Big Binary Files Upload (PostgreSQL)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
PostgreSQL пропонує структуру, відому як великі об'єкти, доступну через таблицю pg_largeobject
, призначену для зберігання великих типів даних, таких як зображення або PDF-документи. Цей підхід є вигіднішим у порівнянні з функцією COPY TO
, оскільки він дозволяє експортувати дані назад до файлової системи, забезпечуючи точну копію оригінального файлу.
Для зберігання повного файлу в цій таблиці, об'єкт повинен бути створений у таблиці pg_largeobject
(ідентифікований за LOID), після чого дані вставляються у частини, кожна з яких має розмір 2KB. Важливо, щоб ці частини були точно 2KB (з можливим винятком останньої частини), щоб функція експорту працювала правильно.
Щоб поділити ваші бінарні дані на частини по 2KB, можна виконати такі команди:
Для кодування кожного файлу в Base64 або Hex можна використовувати такі команди:
Важливо: При автоматизації цього процесу переконайтеся, що надсилаєте частини по 2 КБ чистих байтів. Файли в шістнадцятковому кодуванні вимагатимуть 4 КБ даних на частину через подвоєння розміру, тоді як файли в Base64 кодуванні слідують формулі ceil(n / 3) * 4
.
Вміст великих об'єктів можна переглядати для налагодження за допомогою:
Використання lo_creat
та Base64
Щоб зберегти бінарні дані, спочатку створюється LOID:
В ситуаціях, що вимагають точного контролю, таких як експлуатація Blind SQL Injection, lo_create
є переважним для вказівки фіксованого LOID.
Частини даних можна вставити наступним чином:
Щоб експортувати та потенційно видалити великий об'єкт після використання:
Використання lo_import
та Hex
Функція lo_import
може бути використана для створення та вказівки LOID для великого об'єкта:
Після створення об'єкта дані вставляються по сторінках, забезпечуючи, щоб кожен фрагмент не перевищував 2KB:
Щоб завершити процес, дані експортуються, а великий об'єкт видаляється:
Зазначено, що великі об'єкти можуть мати ACL (Списки контролю доступу), що потенційно обмежує доступ навіть до об'єктів, створених вашим користувачем. Однак старі об'єкти з ліберальними ACL можуть все ще бути доступними для ексфільтрації контенту.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)