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 root ohne 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:

Einstellung
Beschreibung

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

Befehlt
Beschreibung

$ 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 root ohne 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 hashcat oder john geknackt 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