Я пытаюсь создать свою собственную лабораторию для отработки атаки Postgresql и инъекции sql, однако сейчас я пытаюсь передать свою полезную нагрузку, которая представляет собой файл dll (определяемая пользователем функция - UDF), используя SQLi.
Проблема в том,
Я закодировал свою полезную нагрузку в base64 вот так
cat payload.dll | base64 -w 0
TVqQAAMAAAAEAAAA..........
Я взял вывод в свой python скрипт, который автоматизирует процесс3
# Here the encoded payload
encoded_payload = 'TVqQAAMAAAAEAAAA........'
Затем я выполню запрос, который обновит первую страницу (страница 0) большого объекта
# Each page will take 2048 byte only
UPDATE PG_LARGEOBJECT SET data=decode('%s', 'base64') where loid=1234 and pageno=0
Затем я вставлю остальную полезную нагрузку в таблицу
INSERT INTO PG_LARGEOBJECT (loid, pageno, data) VALUES (1234, %d, decode('%s', 'base64'))
Однако моя проблема, когда я вручную декодирую base64 в файл dll, я получил тот же самый файл с тем же размером,
, но когда я использую SQLi, я получаю поврежденный файл, я считаю, что это проблема с кодировкой. но не смог найти, где это,
Я тоже пробовал шестнадцатеричный, тот же результат вручную и другой результат с использованием SQLi
Postgres обеспечивают 3 типа декодирования (base64, hex и escape) .
Нужно ли мне использовать другой подход для кодирования моего файла dll перед его использованием в скрипте?