在C程序用户输入中输入字节字符串

时间:2019-05-26 16:25:10

标签: python c linux input user-input

我正在解决一个涉及在C程序上执行缓冲区溢出的问题。该程序要求用户输入命令行,我需要使用此输入来输入字节字符串,包括nops,shellcode,ret地址等。问题是c程序将我输入的所有内容都解释为文字字符串,因此,如果我输入类似“ \ xff \ xab \ x12 ...”的内容,则程序会将每个单独的字符解释为不同的字节。我可以通过为每个字节创建一个包含相应ASCII字符的字符串来输入单独的字节,但这将我的字节值限制为十六进制值00-7F。我想知道是否有某种方法可以使用python在字节字符串中输入,或者可以格式化用户输入,以便C程序以我需要的方式解释它。请注意,在开始运行程序之前,我不知道字节字符串的返回地址是什么,因此在运行Linux x86 shell的C程序之前,无法创建字节字符串。 ,而且我没有C程序的源代码。

我尝试使用以下命令调用python将我需要的字符串打印到输入中

$(python -c 'print "\x41" * 205 + "\x34\x86")

但是C程序只是按字面意义解释所有这些字符。我也尝试使用扩展的ASCII字符,但C程序似乎无法正确解释它们,将它们全部与未知的字符符号和0xc3十六进制值相关联。 C程序可能还会使用其他字符/十六进制映射吗?

如果有人知道我可以按需要输入输入的方式,将非常感谢您的帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

您对'的shell调用中缺少分号(python)。另外:

如果可执行文件以CLI参数的形式接受输入:

$ ./yourprog $(python -c 'print "\x41" * 205 + "\x34\x86"')


如果以STDIN形式输入:

$ python -c 'print "\x41" * 205 + "\x34\x86"' | ./yourprog


用可执行文件的名称替换"./yourprog"