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



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

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

到目前为止,导入子进程并在提示符下使用 p=subprocess.Popen("bin", stdin=subprocess.PIPE)p.stdin.write("sometext" + "xhhxhhxhhxhh") 并没有像我希望的那样工作。

有什么建议吗?

谢谢!

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')

相关内容

  • 没有找到相关文章

最新更新