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

Pet*_*ter 3 c assembly gdb exploit buffer-overflow

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

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

main(int argc, char *argv[])
{
    char buffer[80];
    strcpy(buffer, argv[1]);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

nne*_*neo 5

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