首页 > 解决方案 > 在 GDB 中无法正确处理不可打印的输入

问题描述

我正在试验缓冲区溢出漏洞,并有一个给定的(编译的)C 程序,用于scanf将用户输入的数据读取到缓冲区中,而无需进行必要的溢出预防检查。我相信我几乎已经弄清楚了如何利用它,但我目前无法调试我的方法,因为我无法弄清楚如何在使用GDB.

通过阅读此处的文档和其他答案,这应该很容易通过将输入字节写入文件然后将该文件作为输入传递给 GDB,如下所示(gdb) r < input.txt:但奇怪的是,当我在调用 之后检查内存中易受攻击的缓冲区的内容时scanf,它的内容与输入字节序列完全不同,除了第一个字节(即\xa1)。我对只包含 ASCII 字符的文件尝试了同样的操作,在这种情况下,调用后的缓冲区内容scanf与文件内容匹配。

我在这里不知所措,这可能是GDB问题吗?还是有scanf什么特别之处?(我没有 C 程序的源代码)。

编辑:我添加了hexdump -C input.txt下面的结果。

00000000  a1 0d 84 04 08 e0 ff 90  90 90 90 90 90 90 90 90  |................|
00000010  90 90 90 90 90 90 90 90  90 90 90 90 90 90 90 90  |................|
*
000000d0  48 d6 ff ff 48 d6 ff ff  0a                       |H...H....|
000000d9

标签: cgdbscanf

解决方案


推荐阅读