我试图利用C代码中的缓冲区溢出漏洞,这个漏洞基本上归结为:
int main(void) {
char buf[100];
gets(buf);
return 0;
}
如果没有详细介绍赋值,我想溢出这个缓冲区,而不必手动输入Unicode字符,并且复制/粘贴对某些特殊字符没有用。
我尝试了什么
直接复制/粘贴字符串。这似乎对某些角色有奇怪的结果。例如,如果我粘贴字符'\ x90'并检查gdb中的内存,它将显示为'\ x90 \ x21'。
写入/ proc // fd / 0 这种方式有效,因为它在那里打印了我想要的字符串,但是如果我在上面的代码中添加了printf,它就不会打印任何内容。我已经尝试使用终端和正在运行的程序的pid并获得相同的结果。
使用pipe(),fork(),dup(),exec()最后我写了一个打开管道的程序,将写入流复制到stdin,执行程序,然后写入攻击写管道。这实际上写了字符串,并将打印出来。但是,它不会写入所有字节。如果我尝试向易受攻击的程序写入500字节的'A',它只打印~120,程序甚至不会崩溃。
有什么方法可以让我失踪吗?或者我在上述方法中做错了什么?
我在VirtualBox中使用Ubuntu 12.04。如果需要更多信息,请告诉我。
答案 0 :(得分:2)
您可以将命令的输出传递到程序中。发送100' X'的简单方法字符后面跟一个新行进入你的程序(我将调用./prog):
sh -c 'for i in `seq 1 100` ; do echo -n X; done; echo ""' | ./prog
替换上面的100以更改' X'换行符前的字符