缓冲区溢出 - 程序以SIGSEGV信号终止

时间:2014-02-26 23:41:27

标签: c assembly gdb buffer-overflow exploit

我正在学习缓冲区溢出漏洞利用。我写了一个像这样的易受攻击的程序:

#include <stdio.h>
#include <string.h>

main(int argc, char *argv[])
{
    char buffer[80];
    strcpy(buffer, argv[1]);
    return 1;
}

非常简单的程序。想法是覆盖用于返回libc函数start_main的返回地址。一切都很顺利,我使用GDB来验证返回地址是否被指向内存中shellcode的正确地址覆盖。

但是当我想要获得一个shell时,会出现:

Program received signal SIGSEGV, Segmentation fault. 0xbffff178 in ?? ()

0xbffff178是返回覆盖的返回地址,它确实指向shellcode我很确定。有什么帮助吗?

1 个答案:

答案 0 :(得分:5)

您可能有一个无执行堆栈,禁止从某些地址范围执行代码。您需要使用-z execstack进行编译以强制堆栈可执行。