【发布时间】:2014-04-27 10:31:38
【问题描述】:
我试图在没有堆栈保护的命令行程序上生成一个 shell,这个程序接受两个输入,一个数字和一个日期。
./convert <number> <date>
我想溢出缓冲区,现在我正在尝试做
[nop sled] ..... [shell code] ..... [return address]
我的问题在于当我通过命令行(或更准确地说是在 GDB 中)传递 nop 时。在 GDB 中,当我使用参数运行时:1 \x90\x90\x90\x90.... 700 字节值,它作为输入接收的是实际字符 '\' 'x' '9' '0',与 nop 的十六进制值相反。我怎样才能正确输入这个? (我知道这一点是因为 EIP 给了我39785c30,它转换为9x\0)。我该怎么办?
【问题讨论】:
-
为什么会有这么多关于故意做错事的帖子?是否突然出现全球漏洞短缺?如果是这样,那是我没有收到的另一份备忘录。
-
答案取决于您的字符编码,但如果您使用 8 位 ascii,那么 É 的 ascii 代码似乎为 0x90。 (带重音的 E)
-
@KlasLindbäck 假设我只是通过 CLI 输入命令,这个带有 nop sled shell 代码和返回地址的字符串就在其中。我正在使用 bash。我不知道为什么它不会输入与字符相反的十六进制
-
@Kevin 将
\x90转换为C 代码中字符串中的单字节值144 由编译器完成。除非文档特别提到 gdb 的 CLI 进行了转换,否则没有理由期望转换。
标签: c input buffer command-line-arguments buffer-overflow