MySQL File priv to SSRF/RCE
Це краткий огляд технік MySQL/MariaDB/Percona з https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.
Використання функцій SQL для виклику запитів на сервері (SSRF)
Під час дослідження витоку даних через SQL Out of Band, функція 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. Бібліотеки повинні бути передані на сервер, що можливо завдяки шістнадцятковому або base64 кодуванню вмісту бібліотеки, а потім записуванню його в відповідний каталог.
Процес відрізняється, якщо @@plugin_dir
не є доступним для запису, особливо для версій MySQL вище v5.0.67
. У таких випадках потрібно використовувати альтернативні шляхи, які доступні для запису.
Автоматизацію цих процесів можна спростити за допомогою інструментів, таких як SQLMap, який підтримує впровадження UDF, а для сліпих SQL-ін'єкцій можна використовувати перенаправлення виводу або техніки підманіпулювання запитами DNS.
Last updated