我正在学习缓冲区溢出漏洞利用。我写了一个像这样的易受攻击的程序:
#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
我很确定。有什么帮助吗?
答案 0 :(得分:5)
您可能有一个无执行堆栈,禁止从某些地址范围执行代码。您需要使用-z execstack
进行编译以强制堆栈可执行。