我正在研究一个涉及在 C 程序上执行缓冲区溢出的问题。该程序要求用户输入命令行,我需要使用此输入输入我的字节字符串,包括nops,shellcode,ret地址等。问题是 c 程序将我输入的所有内容解释为文字字符串,因此如果我输入类似"\xff\xab\x12..."程序会将每个单独的字符解释为不同的字节。我可以通过为每个字节创建相应 ASCII 字符的字符串来输入单独的字节,但这将我的字节值限制为十六进制值 00-7F。我想知道是否有某种方法可以使用python输入字节字符串,或者可能格式化用户输入,以便C程序按照我需要的方式解释它。请注意,直到我开始运行程序后,我才知道字节字符串的返回地址是什么,所以我无法在运行 C 程序之前制作字节字符串我正在处理 Linux x86 shell,而且我没有 C 程序的源代码。
我尝试调用python使用以下命令将我需要的字符串打印到输入中,
$(python -c 'print "x41" * 205 + "x34x86")
但是 C 程序只是从字面上解释所有这些字符。我也尝试使用扩展的 ASCII 字符,但 C 程序似乎没有正确解释它们,将它们全部与未知字符符号和十六进制值相关联0xc3。是否有可能 C 程序可能正在使用其他一些字符/十六进制映射?
如果有人知道我可以按照我需要的方式输入输入的方法,您的帮助将不胜感激。
谢谢
您在 shell 调用中缺少一个分号 ('
)python
.此外:
如果可执行文件以 CLI 参数的形式获取其输入:
$ ./yourprog $(python -c 'print "x41" * 205 + "x34x86"')
如果它以 STDIN 的形式接受其输入:
$ python -c 'print "x41" * 205 + "x34x86"' | ./yourprog
将"./yourprog"
替换为可执行文件的名称。