我试图利用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。如果需要更多信息,请告诉我。