
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