
In-Ziel-C#-Post-Exploitation-Tool für Microsoft SQL Server (MS SQL / MSSQL) zur Durchquerung von Linked-Server-Ketten beliebiger Tiefe mit kaskadierender Login-Impersonation auf jedem Hop.
Landen Sie elegant in Ihrem Microsoft SQL Server (MS SQL) DBMS, als kämen Sie mit einem Champagnerglas in der Hand in der Business-Class an. 🥂

MSSQLand ist ein C#-Post-Exploitation-Tool für Microsoft SQL Server (MSSQL / MS SQL), das für Red-Team-Operatoren entwickelt wurde. Es wurde für die direkte Ausführung in der Zielumgebung über Ihre Beacons entwickelt (z. B. mit execute-assembly in Cobalt Strike oder Havoc oder einem beliebigen dotnet Befehl) und ermöglicht es Ihnen, verknüpfte Serverketten zu durchlaufen, sich als beliebige Anmeldeinformationen auszugeben, die Ihnen unterwegs begegnen, und vom letzten Knotenpunkt aus jede gewünschte Aktion auszuführen. All dies bei minimalem OPSEC-Fußabdruck und ohne externe Abhängigkeiten.
OPENQUERY / EXEC AT Wrapping über beliebig tiefe KettenEXECUTE AS LOGIN auf jedem Hop mit kaskadierender Multi-User-Imitationcm-*-Aktionen für Recon und Exploitation von Microsoft Configuration Manager-Datenbanken[!TIP] MSSQLand wurde mit
.NET Framework 4.8erstellt und ist für die Assembly-Ausführung unter Verwendung des aktuellen Kontexts ausgelegt. Wenn Sie eine Verbindung mit NT/LM-Hashes oder einem Kerberos-Ticket herstellen müssen, siehe Pass-the-Hash.
[!NOTE] Vergessen Sie nicht die Grundlagen. Während einer Sicherheitsbewertung ist es manchmal einfacher, SQL Server Management Studio (SSMS) zu verwenden.
MSSQLand.exe [optionen] <host> [optionen] <aktion> [aktionsoptionen]
MSSQLand.exe <host> --probe
Globale Flags (-c, -l, --debug usw.) werden an jeder Position akzeptiert, auch nach dem Aktionsnamen; nicht erkannte Token nach der Aktion werden unverändert an die Aktion übergeben.
[!NOTE] Wenn
<aktion>weggelassen wird, wird nur ein Verbindungstest durchgeführt. Es authentifiziert sich und beendet sich ohne Ausführung von Abfragen. Ideal für die Überprüfung von Anmeldeinformationen mit minimalem OPSEC-Fußabdruck.
[!TIP] Vermeiden Sie es, alle RPC Out oder OPENQUERY Aufrufe manuell einzutippen. Lassen Sie das Tool jede Kette von verknüpften Servern mit dem Argument
-lhandhaben, damit Sie sich auf das große Ganze konzentrieren können.
Format: server:port/user@database oder jede Kombination server/user@database:port.
server (erforderlich) - Der SQL Server-Hostname oder die IP:port (optional) - Portnummer (Standard: 1433, auch üblich: 1434, 14333, 2433)/user (optional) - Benutzer, der auf diesem Server nachgeahmt werden soll ("execute as login")
/user1/user2/user3 führt EXECUTE AS LOGIN = 'user1'; EXECUTE AS LOGIN = 'user2'; EXECUTE AS LOGIN = 'user3'; aus/user schiebt einen neuen Identitätswechselkontext auf den Sicherheitsstapel@database (optional) - Datenbankkontext# Konnektivitätstest: Prüft, ob der Server aktiv ist, ohne sich zu authentifizieren
MSSQLand.exe localhost --probe
# Nur Verbindungstest (keine Aktion ausgeführt, authentifiziert und beendet)
MSSQLand.exe localhost -c token
# Bestimmte Aktion ausführen
MSSQLand.exe localhost -c token info
MSSQLand.exe localhost:1434@db03 -c token info
MSSQLand.exe LAB-SQL01@AdventureWorks -c token tables -n Customer
Verknüpfen Sie mehrere SQL-Server mit dem Flag -l unter Verwendung von Semikolon (;) als Trennzeichen:
-l SQL01;SQL02/user;SQL03@database
Syntax:
;) - Trennt Server in der Kette/) - Gibt den zu imitierenden Benutzer an ("execute as login")
/user1/user2 führt sequentielle Identitätswechsel aus@) - Gibt den Datenbankkontext an[...]) - Werden verwendet, um den Servernamen vor dem Aufteilen durch unsere Trennzeichen zu schützenBeispiele:
# Einfache Kette
-l SQL01;SQL02;SQL03
# Mit Identitätswechsel und Datenbanken
-l SQL01/admin;SQL02;SQL03/manager@clients
# Kaskadierender Identitätswechsel (user1 imitieren, dann user2 auf SQL01)
-l SQL01/user1/user2;SQL02;SQL03
# Gemischter kaskadierender Identitätswechsel (SQL01: user1→user2, SQL03: user3→user4→user5)
-l SQL01/user1/user2;SQL02;SQL03/user3/user4/user5@database
# Servernamen können Bindestriche, Punkte enthalten (keine Klammern erforderlich)
-l SQL-01;SERVER.001;HOST.DOMAIN.COM
# Klammern nur erforderlich, wenn der Servername Trennzeichen enthält
-l [SERVER;PROD];SQL02;[SQL03@clients]@clientdb
[!NOTE] Die Portangabe (
:port) gilt nur für die erste Host-Verbindung. Verknüpfte Serverketten (-l) verwenden die verknüpften Servernamen, wie sie insys.serverskonfiguriert sind, keinehostname:port-Kombinationen.
Diese Modi erfordern keine Authentifizierung und funktionieren, bevor Sie Anmeldeinformationen haben.
Der SQL Server Browser-Dienst hört auf UDP 1434 und antwortet auf Discovery-Anfragen mit der Liste der SQL Server-Instanzen, die auf einem Host laufen, einschließlich ihrer Namen, Versionen und TCP-Ports. Dies ist nützlich, wenn das Ziel benannte Instanzen auf dynamischen Ports ausführt – kein Raten oder Scannen nötig.
# Den SQL Browser-Dienst auf einem bestimmten Host abfragen (UDP 1434)
MSSQLand.exe LAB-SQL03 --browse
Active Directory stellt SQL Server-Registrierungen über Service Principal Names (SPNs) bereit, die auf Computer- und Dienstkonten gespeichert sind. MSSQLand fragt AD via LDAP nach MSSQLSvc/* SPNs ab, um SQL Server-Instanzen in der gesamten Domäne oder der gesamten Gesamtstruktur über den globalen Katalog zu ermitteln.
# SQL Server in Active Directory via LDAP finden (aktuelle Domäne)
MSSQLand.exe --findsql
# Eine bestimmte Domäne ansprechen
MSSQLand.exe --findsql pgd.lab
# Domänenübergreifende Suche über Globalen Katalog (Port 3268)
MSSQLand.exe --findsql pgd.lab --gc
Die Erkennung erfolgt mehrschichtig. Siehe FindSqlServers.cs für weitere Details.
Der SQL Server Browser reagiert auch auf UDP-Broadcast-Pakete auf UDP 1434, was die Erkennung aller SQL Server-Instanzen ermöglicht, die sich im lokalen Subnetz selbst ankündigen.
# Broadcast-Erkennung im lokalen Netzwerk (UDP 1434)
MSSQLand.exe --broadcast
MSSQLand.exe --broadcast --timeout 5
[!TIP] Dies ist besonders nützlich, wenn ein SQL Server auf einem Rechner läuft, der nicht in die Domäne eingebunden ist und daher in keiner LDAP- oder SPN-Abfrage erscheint. Denken Sie an eigenständige Server, Entwicklerrechner oder nicht genehmigte Instanzen, die in einem internen VLAN hochgefahren wurden.
Validiert offene Ports anhand von Live-SQL-Server-Instanzen unter Verwendung von TDS-Protokoll-Handshakes (nicht nur TCP SYN). Ein Port wird nur dann gemeldet, wenn er auf ein TDS-Pre-Login-Paket antwortet.
MSSQLand.exe LAB-SQL03 --portscan
MSSQLand.exe LAB-SQL03 --portscan --all # Alle Instanzen finden (vollständiger temporärer Portbereich)
MSSQLand.exe LAB-SQL03 --portscan 65184 # Einzelner Port
MSSQLand.exe LAB-SQL03 --portscan 65180-65190 # Portbereich
MSSQLand.exe LAB-SQL03 --portscan 1433,5000,65184 # Komma-getrennte Liste
MSSQLand läuft als .NET-Assembly innerhalb eines Beacons und authentifiziert sich immer mit dem aktuellen Ausführungskontext (-c token). Wenn Sie einen Hash haben, besteht der richtige Ansatz darin, zuerst auf Beacon-Ebene ein Token zu erzeugen und dann MSSQLand normal auszuführen. System.Data.SqlClient erbt dieses Token transparent, und es ist keine benutzerdefinierte TDS-Implementierung erforderlich.
Die Implementierung von NTLMv2 von Grund auf innerhalb von MSSQLand würde bedeuten:
System.Data.SqlClient durch einen selbst gestrickten TDS 7.x-Stack zu ersetzen (zu viele Zeilen Socket-, TLS- und NTLM-Code).Wenn Sie sich von einer externen Position aus mit einem Kerberos-Ticket oder NT/LM-Hashes authentifizieren müssen, ist mssqlclient-ng das richtige Tool. Dies ist ein Python 3-Client, der für den Unix-seitigen Zugriff entwickelt wurde und problemlos mit einer SOCKS5-Proxy-Verbindung von Ihrem Beacon aus kombiniert werden kann.
Wenn Sie MSSQLand auf Ihrem Windows-Host ausführen, aber über eine Linux-Umgebung (Hyper-V-VM, VMware oder WSL) auf ein SQL Server-Ziel zugreifen müssen, können Sie die Verbindung einfach mit socat weiterleiten:
sudo socat TCP4-LISTEN:1433,fork,reuseaddr TCP:10.10.11.90:1433
Dieser Befehl lauscht auf Port 1433 auf Ihrem Linux-Rechner und leitet den gesamten Datenverkehr an den Ziel-SQL-Server unter 10.10.11.90:1433 weiter. Sie können dann MSSQLand von Ihrem Windows-Host aus mit der IP Ihrer Linux-VM verbinden.
-h oder --help - Alle verfügbaren Aktionen anzeigen-h suchbegriff - Aktionen filtern (z. B. -h adsi zeigt alle ADSI-bezogenen Aktionen)localhost -c token createuser -h - Detailierte Hilfe für eine bestimmte Aktion anzeigenMSSQLand bietet umfassende Unterstützung für Microsoft Configuration Manager (ehemals SCCM / MECM) zur Ausnutzung und Aufklärung. Wenn Sie Zugriff auf einen ConfigMgr-Datenbankserver haben, können Sie spezialisierte Aktionen für Geräte-Intelligenz (z. B. cm-devices) oder Infrastruktur-Kartierung nutzen.
Alle ConfigMgr-Aktionen verwenden das Präfix cm- (z. B. cm-scripts, cm-package), um sich an der offiziellen PowerShell-Cmdlet-Namenskonvention von Microsoft zu orientieren (Get-CM*, Set-CM* usw.).
Die Ausgabe des Tools, angereichert mit Zeitstempeln und wertvollen kontextuellen Informationen, ist darauf ausgelegt, optisch ansprechende und professionelle Ergebnisse zu liefern, was sie ideal für die Erstellung hochwertiger Screenshots für Ihre Berichte macht (z. B. Kundenlieferung, interner Bericht, Red-Team-Assessments).
Alle Ausgabetabellen sind Markdown-freundlich und können ohne Formatierungsprobleme direkt in Ihre Notizen kopiert und eingefügt werden.
[!TIP] Sie können auch eine
.csv-kompatible Ausgabe erhalten, indem Sie die Option--format csvverwenden:MSSQLand.exe localhost -c token --format csv --silent procedures > procedures.csv
Beiträge sind willkommen und werden geschätzt! Ob Sie Fehler beheben, neue Funktionen hinzufügen, die Dokumentation verbessern oder Feedback teilen – Ihre Bemühungen werden geschätzt und machen einen Unterschied. Open Source lebt von Zusammenarbeit und Anerkennung. Beiträge, ob groß oder klein, helfen, das Tool und seine Gemeinschaft zu verbessern. Ihre Zeit und Mühe werden wirklich geschätzt.
Hier wird niemand aus der Git-Historie gelöscht. Keine Angst. Niemand wird Ihren Code kopieren und einfügen, ohne den kollaborativen Ethos von Open Source zu respektieren.
Ausführliche Richtlinien für den Einstieg finden Sie in CONTRIBUTING.md.
Wenn Sie sich fragen, warum es dieses Projekt gibt und nicht als Beitrag zu anderen SQL-Server-Projekten, siehe ORIGIN.md.
Dieses Tool wird streng für defensive Sicherheitsforschung, Bildung und autorisierte Penetrationstests bereitgestellt. Sie müssen eine ausdrückliche schriftliche Genehmigung haben, bevor Sie diese Software gegen ein System ausführen, das Ihnen nicht gehört.
Dieses Tool ist nur für Bildungszwecke konzipiert und soll Sicherheitsexperten dabei helfen, die Sicherheit von SQL Server-Umgebungen in autorisierten Engagements zu verstehen und zu testen.
Akzeptable Umgebungen umfassen:
Missbrauch dieses Projekts kann zu rechtlichen Schritten führen.
Jede unbefugte Nutzung dieses Tools in realen Umgebungen oder gegen Systeme ohne ausdrückliche Erlaubnis des Systembesitzers ist strengstens untersagt und kann gegen rechtliche und ethische Standards verstoßen. Die Ersteller und Mitwirkenden dieses Tools sind nicht verantwortlich für Missbrauch oder verursachte Schäden.
Nutzen Sie es verantwortungsvoll und ethisch. Respektieren Sie stets das Gesetz und holen Sie die entsprechende Autorisierung ein.