3306 - MySQL
Einführung in MySQL
MySQL ist ein Open-Source-SQL-Datenbankverwaltungssystem (RDBMS), das nach dem Client-Server-Prinzip arbeitet. Es speichert Daten in strukturierten Tabellen und wird häufig für Webanwendungen in Kombination mit Linux, Apache und PHP (LAMP-Stack) oder Nginx (LEMP-Stack) verwendet. MySQL ist bekannt für seine hohe Performance, Skalierbarkeit und Benutzerfreundlichkeit.
Sicherheitsrelevante Aspekte
Unverschlüsselte Authentifizierung: MySQL kann auf unverschlüsselten TCP-Ports (3306) betrieben werden.
Schwache Zugangsdaten: Standardbenutzer wie
rootohne Passwort sind oft zu finden.Fehlkonfigurierte Benutzerrechte: Exzessive Rechte für nicht-administrative Benutzer.
SQL-Injection: Fehlerhafte Webapplikationen können Angreifern direkten SQL-Zugriff ermöglichen.
Datenlecks durch Debug-Logs: Fehlerhafte Konfiguration kann sensible Daten in Logs speichern.
Gefährliche MySQL-Einstellungen
Bestimmte Konfigurationsoptionen können ein erhebliches Sicherheitsrisiko darstellen:
user
Setzt den MySQL-Dienstbenutzer. Falls falsch konfiguriert, kann MySQL mit Root-Rechten laufen.
password
Speichert Klartextpasswörter. Dies sollte vermieden werden.
admin_address
Gibt an, auf welcher IP der MySQL-Adminservice erreichbar ist. Eine falsche Konfiguration kann zu einem öffentlichen Zugang führen.
debug
Aktiviert Debugging-Informationen, die sensitive Daten preisgeben können.
sql_warnings
Zeigt detaillierte Fehlermeldungen, die für SQL-Injections genutzt werden können.
secure_file_priv
Definiert, ob MySQL Dateien importieren/exportieren darf. Unsichere Werte ("" oder NULL) können zur Arbitrary File Read/Write Schwachstelle führen.
Grundlegende MySQL-Befehle
$ mysql -u <user> -p<password> -h <IP>
Verbindung zu einem MySQL-Server herstellen.
show databases;
Listet alle verfügbaren Datenbanken.
use <database>;
Wechselt zur angegebenen Datenbank.
show tables;
Zeigt alle Tabellen der aktuellen Datenbank.
show columns from <table>;
Listet Spalten einer bestimmten Tabelle.
select * from <table>;
Zeigt den gesamten Inhalt einer Tabelle.
select * from <table> where <column> = "<string>";
Sucht nach einem spezifischen Wert in einer Tabelle.
Schritt-für-Schritt MySQL Pentesting
1. Service Enumeration
1.1 MySQL-Port mit Nmap scannen
Zunächst überprüfen wir, ob MySQL auf dem Zielsystem läuft und welche Version genutzt wird:
Möglicher Output:
Interpretation:
Der MySQL-Dienst ist aktiv und verwendet die Version 8.0.27.
Der verwendete Authentifizierungs-Plugin ist
caching_sha2_password.
1.2 Benutzer- und Passwort-Enumerierung
Falls keine Zugangsdaten vorhanden sind, versuchen wir, schwache oder Standard-Passwörter zu finden:
Alternativ mit Nmap:
Achtung: Ein erfolgreicher Login mit
rootohne Passwort ist ein kritischer Sicherheitsmangel.
2. MySQL-Exploitation
2.1 Direkte Anmeldung
Falls gültige Zugangsdaten gefunden wurden, können wir uns mit dem MySQL-Client anmelden:
Falls das Passwort bekannt ist:
Erfolgreiche Anmeldung:
2.2 Zugriff auf sensible Daten
Sobald wir Zugriff haben, suchen wir nach sensiblen Informationen wie Benutzerkonten und Passwörtern.
Möglicher Output:
Hinweis:
Hashes können mit
hashcatoderjohngeknackt werden.
2.3 Dumping der Datenbank
Falls wir Zugriff auf eine relevante Datenbank haben, können wir sie vollständig exportieren:
Ziel:
Lokale Analyse oder Import in eine Testumgebung.
Suche nach sensiblen Daten (Benutzer, Passwörter, Kreditkarteninformationen).
2.4 SQL-Berechtigungen eskalieren
Falls wir eingeschränkte Rechte haben, prüfen wir unsere Berechtigungen:
Falls wir Schreibrechte auf kritische Tabellen haben, könnten wir einen Backdoor-User anlegen:
2.5 Exploits & Schwachstellen
Falls MySQL veraltet ist, suchen wir nach bekannten Exploits, z.B.:
Beispiel für eine kritische Schwachstelle:
3. Post-Exploitation & Persistenz
Falls wir Zugang zu MySQL haben, können wir uns durch Hintertüren Zugang verschaffen:
3.1 Einfügen eines Reverse Shell-Triggers
Falls die Datenbank als Root läuft, können wir Shell-Befehle ausführen:
Last updated