1433 - MSSQL
Einführung
Microsoft SQL Server (MSSQL) ist ein relationales Datenbankmanagementsystem, das in vielen Windows-Umgebungen zum Einsatz kommt. In Penetration Tests kann ein erreichbarer MSSQL-Server einen vielversprechenden Angriffsvektor darstellen, insbesondere wenn Login-Daten bekannt oder erratbar sind.
Ziel dieser Anleitung ist es, zu zeigen, wie man sich mit MSSQL verbindet, Berechtigungen prüft, die Kommandoausführung über xp_cmdshell ermöglicht und schließlich eine Reverse Shell erhält.
Typische Fehlkonfigurationen in MSSQL-Umgebungen
Keine Verschlüsselung zwischen MSSQL-Clients und dem Server
Selbstsignierte Zertifikate bei aktivierter Verschlüsselung (anfällig für Spoofing)
Verwendung von Named Pipes anstelle von TCP (kann für Lateral Movement missbraucht werden)
Schwache oder Standard-Zugangsdaten für den
sa-Account (z. B.sa:sa)Nicht deaktivierter
sa-Account, obwohl nicht benötigtVeraltete MSSQL-Versionen mit bekannten Schwachstellen
Fehlende Rollen- und Rechteprüfung nach Änderungen (z. B. alte Benutzer mit
sysadmin-Rechten)Unnötig aktivierte Features, z. B.
xp_cmdshelloderOLE Automation ProceduresFehlende Netzwerksegmentierung, MSSQL ist direkt aus anderen Netzwerken erreichbar
Logging und Auditing deaktiviert oder unzureichend konfiguriert
Grundlegende MySQL-Befehle
SELECT name FROM master..sysdatabases;
Listet alle verfügbaren Datenbanken.
USE <datenbank>;
Wechselt zur angegebenen Datenbank.
SELECT name FROM sysobjects WHERE type='U';
Zeigt alle Tabellen der aktuellen Datenbank.
EXEC sp_columns <tabelle>;
Listet Spalten einer bestimmten Tabelle.
SELECT * FROM <tabelle>;
Zeigt den gesamten Inhalt einer Tabelle.
SELECT * FROM <tabelle> WHERE <spalte> = '<wert>';
Sucht nach einem spezifischen Wert in einer Tabelle.
SELECT SYSTEM_USER;
Zeigt den aktuellen MSSQL-Benutzernamen.
SELECT is_srvrolemember('sysadmin');
Prüft, ob der aktuelle Benutzer sysadmin-Rechte hat.
EXEC xp_cmdshell 'whoami';
Führt einen Windows-Befehl über xp_cmdshell aus (falls aktiviert).
Enumeration von MSSQL
oder via Metasploit
Bruteforcing
Mit Hydra:
Verbindung zum MSSQL-Server mit mssqlclient.py
Wir nutzen das Tool mssqlclient.py aus der Impacket-Suite, um eine Verbindung herzustellen.
Befehl:
ARCHETYPE/sql_svc: Benutzername (Domäne/Benutzer)-windows-auth: Nutzt Windows Authentication
Warum dieser Schritt wichtig ist: Damit erhalten wir eine interaktive SQL-Shell auf dem Server. Voraussetzung ist ein gültiger Benutzername und Passwort (z. B. aus Konfigurationsdateien).
Rollen und Rechte überprüfen
Nach dem Login prüfen wir, ob wir Systemrechte (sysadmin) haben:
SQL-Befehl:
Ausgabe
1bedeutet, wir sind sysadmin und haben volle Kontrolle.
Warum dieser Schritt wichtig ist:
Nur mit sysadmin-Rechten können wir xp_cmdshell nutzen und damit Systembefehle ausführen.
Kommandoausführung mit xp_cmdshell vorbereiten
xp_cmdshell ist standardmäßig deaktiviert. Wir aktivieren sie mit:
SQL-Befehle:
Warum dieser Schritt wichtig ist:
Erst durch diese Befehle wird xp_cmdshell aktiviert und erlaubt die Ausführung von Systemkommandos über SQL.
Erste Systemkommandos ausführen
Testen, ob xp_cmdshell funktioniert:
Warum dieser Schritt wichtig ist: Verifiziert, ob wir erfolgreich Kommandos ausführen können und mit welchem Benutzer wir arbeiten.
Reverse Shell vorbereiten
Wir starten einen Python HTTP-Server und Netcat Listener:
Ziel: Die Datei nc64.exe vom eigenen System auf das Ziel laden.
Download-Verzeichnis herausfinden:
Falls kein Schreibrecht, in z. B. C:\Users\sql_svc\Downloads wechseln.
Datei per PowerShell herunterladen:
Warum dieser Schritt wichtig ist: Wir platzieren ein Binary (Netcat), das uns eine Remote Shell liefert.
Reverse Shell starten
Warum dieser Schritt wichtig ist:
Damit erhalten wir eine interaktive Remote-Shell als Benutzer sql_svc.
Was jetzt?
Sammle erste Informationen:
whoami,hostname,ipconfig,systeminfoSuche nach Rechten und Schwachstellen zur Privilege Escalation
Lies die
user.txtauf dem Desktop des SQL-Nutzers
Zusammenfassung
Verbindung mit
mssqlclient.py(Impacket)Prüfen der Rechte mit
is_srvrolememberAktivieren von
xp_cmdshellRemote-Kommandos ausführen
Reverse Shell holen per Netcat & PowerShell
Optional: Suche nach LPE (z. B. Unquoted Service Paths, AlwaysInstallElevated, Token Impersonation etc.) zur Privilege Escalation.
Wenn du willst, kann ich daraus auch eine kompakte Cheatsheet-Variante erstellen.
Last updated