gpt4 book ai didi

c - 提供十六进制值作为 C 中获取的输入

转载 作者:行者123 更新时间:2023-12-03 05:18:28 24 4
gpt4 key购买 nike

我正在研究一个简单的弧注入(inject)漏洞,其中这个特定的字符串为我提供了我想要跳转的位置的所需地址:Á^F@^@。这是地址0x004006c1(我使用的是64位Intel处理器,所以x86-64采用小端序排列)。

当我提供此字符串 Á^F@^@ 作为函数中易受攻击的 gets() 例程的输入并使用 gdb< 检查地址时,地址被修改为 0x00400681 而不是 0x004006c1。我不太确定为什么会发生这种情况。此外,有没有什么方法可以轻松地向 stdin 处的 gets 例程提供十六进制值?我尝试过执行类似以下操作: 121351...12312\xc1\x06\x40\x00,但它不是按原样选取 \xc1,而是翻译单个字符到十六进制,所以我得到类似 5c78.. (十六进制表示\和 x,后跟十六进制表示 c 和 1)。

感谢任何帮助,谢谢!

最佳答案

您可以将原始字节放入某个文件中,然后将其直接通过管道传输到您的应用程序中。

$ path/to/my_app <raw_binary_data

或者,您可以将应用程序包装在 shell 脚本中,该脚本将转义的十六进制字节转换为其相应的字节值。当在命令行上设置 -e 开关时,echo 实用程序将执行此操作,例如:

$ echo '\x48\x65\x6c\x6c\x6f'
\x48\x65\x6c\x6c\x6f
$ echo -e '\x48\x65\x6c\x6c\x6f'
Hello

您可以使用此功能来处理应用程序的输入,如下所示:

while read -r line; do echo -e $line; done | path/to/my_app

要终止输入,请尝试按 ControlDControlC

关于c - 提供十六进制值作为 C 中获取的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28925811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com