MySQL File priv to SSRF/RCE

Reading time: 3 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Це резюме технік MySQL/MariaDB/Percona з https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.

Серверна підробка запитів (SSRF) через SQL функції

У дослідженні SQL витоку даних поза каналом, функція LOAD_FILE() зазвичай використовується для ініціювання мережевих запитів. Однак ця функція обмежена операційною системою, на якій вона працює, та конфігураціями запуску бази даних.

Глобальна змінна secure_file_priv, якщо не встановлена, за замовчуванням дорівнює /var/lib/mysql-files/, обмежуючи доступ до файлів лише цією директорією, якщо не встановлено на порожній рядок (""). Це налаштування вимагає змін у конфігураційному файлі бази даних або параметрах запуску.

Якщо secure_file_priv вимкнено (""), і за умови, що надані необхідні права на файл та file_priv, файли поза призначеною директорією можуть бути прочитані. Проте можливість цих функцій здійснювати мережеві виклики сильно залежить від операційної системи. На системах Windows мережеві виклики до UNC шляхів можливі завдяки розумінню операційною системою конвенцій іменування UNC, що може призвести до витоку хешів NTLMv2.

Цей метод SSRF обмежений TCP портом 445 і не дозволяє змінювати номер порту, хоча його можна використовувати для доступу до загальних ресурсів з повними правами на читання і, як показано в попередніх дослідженнях, для крадіжки хешів для подальшої експлуатації.

Віддалене виконання коду (RCE) через визначені користувачем функції (UDF)

Бази даних MySQL пропонують використання визначених користувачем функцій (UDF) з зовнішніх бібліотек. Якщо ці бібліотеки доступні в певних директоріях або в системному $PATH, їх можна викликати зсередини MySQL.

Ця техніка дозволяє виконувати мережеві/HTTP запити через UDF, за умови виконання кількох умов, включаючи доступ на запис до @@plugin_dir, file_priv встановлений на Y та вимкнений secure_file_priv.

Наприклад, бібліотека lib_mysqludf_sys або інші UDF бібліотеки, що дозволяють HTTP запити, можуть бути завантажені для виконання SSRF. Бібліотеки повинні бути передані на сервер, що можна досягти через кодування в hex або base64 вмісту бібліотеки, а потім записати його в відповідну директорію.

Процес змінюється, якщо @@plugin_dir не доступний для запису, особливо для версій MySQL вище v5.0.67. У таких випадках необхідно використовувати альтернативні шляхи, які доступні для запису.

Автоматизацію цих процесів можна полегшити за допомогою інструментів, таких як SQLMap, які підтримують ін'єкцію UDF, а для сліпих SQL ін'єкцій можуть бути використані техніки перенаправлення виходу або контрабанди DNS запитів.

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks