c - 在 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
解决方案
推荐阅读
- java - 如何在java中的数组列表中明智地存储数据列?
- typescript - TypeScript:如何将泛型方法的返回类型限制为依赖于参数类型?
- comments - Sublime Text Editor Anaconda package Autoformat PEP8 Errors 不会自动重新格式化太长的注释
- c++ - C++:修改左操作数的成员重载二元运算符,例如 +=
- python - 通过使用 Python 修改 Excel 后面的 xml 来动态更改 Excel 中的文件共享根目录
- applescript - 让 AppleScript 单击按钮“+”并选择“语言”并单击添加
- javascript - 数组在每个位置依次Javascript
- android - 仅在 xamarin.forms 中首次未在 Android 中加载 Esri 地图
- python - 将 python 响应转换为 Json 响应
- javascript - 为什么移动设备上的浏览器可以播放比设备支持的分辨率更高的视频,但显示相同 Web 应用程序的原生应用程序可能会失败?