如何找到缓冲区溢出错误的stackpointer?

时间:2015-03-17 17:45:16

标签: linux security assembly buffer-overflow

我已经读过堆栈通常从相同的地址开始,因此攻击者可能会猜到缓冲区的起始点是否溢出。这是了解此地址以使恶意代码运行所必需的。我创建了一个带有几行代码的程序,以便在每次启动时获取堆栈指针地址并将其打印在屏幕上:

int * get_stack_pointer(){
   __asm__("mov %esp,%eax");
}
void main(){
  printf("Address: %p\n",get_stack_pointer());
}

这是程序的反汇编:

<get_stack_pointer>:
push   %rbp
mov    %rsp,%rbp
mov    %esp,%eax
pop    %rbp
retq   

<main>:
push   %rbp
mov    %rsp,%rbp
mov    $0x0,%eax
callq  40050c <get_stack_pointer>
mov    %rax,%rsi
mov    $0x4005ec,%edi
mov    $0x0,%eax
callq  4003e0 <printf@plt>
pop    %rbp
retq 

但每次启动程序时,我都会得到不同的地址。一些主题如下:

地址:0xc31b2c80 地址:0x2e041e0 地址:0x7b003190 地址:0xb3fd1350

那么在这种情况下,攻击者如何在易受攻击的程序上运行他的代码呢? (我的操作系统是Linux 64位)

编辑:我在汇编中创建了另一个程序,其中包含一些简单的行。我只是每次从调试器开始检查RSP的值,我看到RSP总是有相同的值但不是用c写的程序。

0 个答案:

没有答案