程序输入通过python子进程重定向

时间:2013-10-02 07:08:19

标签: python buffer-overflow exploit

以为我可以在谷歌上找到这个,但不能。我试图利用溢出来利用用C语言编写的二进制文件。在gdb中,我在正确的字节上有溢出着陆以重定向函数返回,但似乎无法在我的代码上获得正确的值。

当你运行程序时,它会从stdin请求两个输入,我需要能够为其中一些提供十六进制值。像\x##这样的转义在提示符下不起作用。我想我可以用python子进程库做点什么。

到目前为止,导入子流程并在提示时使用p=subprocess.Popen("bin", stdin=subprocess.PIPE)p.stdin.write("sometext" + "\xhh\xhh\xhh\xhh")并不像我希望的那样有效。

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

<强> parent.py

import subprocess
import sys

p = subprocess.Popen([sys.executable, 'sub.py'], stdin=subprocess.PIPE)
p.stdin.write('foo')  # not even a newline seems to be required for this to work, oddly
# p.stdin.flush()  # optional; seems like not required

_, _ = p.communicate()  # this is required--otherwise it just seems to block

<强> sub.py

print raw_input()

然后按预期运行parent.py输出foo

如果您关心communicate()的返回值,只需将_, _替换为out, err(或者例如out, _,如果您只关心STDOUT);我只想用_标记未使用的变量,尽管可以完全忽略communicate()的返回值...但是看起来communicate看起来没有返回任何内容。

请参阅:http://docs.python.org/2/library/subprocess.html#subprocess.Popen.communicate

<强>更新

看起来你也可以:

p = subprocess.Popen([sys.executable, 'sub.py'], stdin=subprocess.PIPE)
_, _ = p.communicate(input='foo')