
Outil de post-exploitation C# ciblé pour Microsoft SQL Server (MS SQL / MSSQL) parcourant des chaînes de serveurs liés de toute profondeur avec usurpation d'identité de connexion en cascade à chaque saut.
Atterrissez en toute élégance sur votre Microsoft SQL Server (MS SQL) SGBD cible, comme si vous arriviez en voyage d'affaires avec une coupe de champagne à la main. 🥂

MSSQLand est un outil de post-exploitation C# pour Microsoft SQL Server (MSSQL / MS SQL) conçu pour les opérateurs red team. Conçu pour s'exécuter directement dans l'environnement cible via vos beacons (par exemple, en utilisant execute-assembly dans Cobalt Strike ou Havoc, ou toute commande dotnet), il vous permet de traverser des chaînes de serveurs liés, d'usurper l'identité de toute connexion rencontrée en cours de route, et d'émerger du dernier saut avec l'action souhaitée. Le tout avec une empreinte OPSEC minimale et aucune dépendance externe.
OPENQUERY / EXEC AT sur des chaînes de profondeur arbitraireEXECUTE AS LOGIN à chaque saut avec usurpation en cascade multi-utilisateurcm-* pour la reconnaissance et l'exploitation des bases de données Microsoft Configuration Manager[!TIP] MSSQLand est construit avec .NET Framework 4.8, en pensant à une exécution en assembly, utilisant le contexte courant. Si vous devez vous connecter en utilisant des hashs NT/LM ou un ticket Kerberos, consultez la section Pass-the-Hash.
[!NOTE] N'oubliez pas les bases. Lors d'une évaluation de sécurité, il est parfois plus simple d'utiliser SQL Server Management Studio (SSMS).
MSSQLand.exe [options] <host> [options] <action> [action-options]
MSSQLand.exe <host> --probe
Les flags globaux (-c, -l, --debug, etc.) sont acceptés à n'importe quelle position, y compris après le nom de l'action ; les tokens non reconnus après l'action sont passés tels quels à l'action.
[!NOTE] Omettre
<action>effectue uniquement un test de connexion. Il s'authentifie et se termine sans exécuter de requêtes. Idéal pour valider des identifiants avec une empreinte OPSEC minimale.
[!TIP] Évitez de saisir manuellement tous les appels RPC Out ou OPENQUERY. Laissez l'outil gérer toute chaîne de serveurs liés avec l'argument
-l, afin de pouvoir vous concentrer sur la vue d'ensemble.
Format : server:port/user@database ou toute combinaison server/user@database:port.
server (obligatoire) - Le nom d'hôte ou l'IP du serveur SQL:port (optionnel) - Numéro de port (par défaut : 1433, également courant : 1434, 14333, 2433)/user (optionnel) - Utilisateur à usurper sur ce serveur ("execute as login")
/user1/user2/user3 exécute EXECUTE AS LOGIN = 'user1'; EXECUTE AS LOGIN = 'user2'; EXECUTE AS LOGIN = 'user3';/user ajoute un nouveau contexte d'usurpation sur la pile de sécurité@database (optionnel) - Contexte de base de données# Sonde de connectivité : vérifie si le serveur est actif sans s'authentifier
MSSQLand.exe localhost --probe
# Test de connexion uniquement (aucune action exécutée, s'authentifie et quitte)
MSSQLand.exe localhost -c token
# Exécute une action spécifique
MSSQLand.exe localhost -c token info
MSSQLand.exe localhost:1434@db03 -c token info
MSSQLand.exe LAB-SQL01@AdventureWorks -c token tables -n Customer
Enchaînez plusieurs serveurs SQL à l'aide du flag -l avec le point-virgule (;) comme séparateur :
-l SQL01;SQL02/user;SQL03@database
Syntaxe :
;) - Sépare les serveurs dans la chaîne/) - Spécifie l'utilisateur à usurper ("execute as login")
/user1/user2 exécute des usurpations séquentielles@) - Spécifie le contexte de base de données[...]) - Utilisés pour protéger le nom du serveur d'une division par nos délimiteursExemples :
# Chaîne simple
-l SQL01;SQL02;SQL03
# Avec usurpation et bases de données
-l SQL01/admin;SQL02;SQL03/manager@clients
# Usurpation en cascade (usurper user1, puis user2 sur SQL01)
-l SQL01/user1/user2;SQL02;SQL03
# Cascade mixte (SQL01 : user1→user2, SQL03 : user3→user4→user5)
-l SQL01/user1/user2;SQL02;SQL03/user3/user4/user5@database
# Les noms de serveurs peuvent contenir des tirets, des points (pas besoin de crochets)
-l SQL-01;SERVER.001;HOST.DOMAIN.COM
# Les crochets ne sont nécessaires que si le nom du serveur contient des caractères délimiteurs
-l [SERVER;PROD];SQL02;[SQL03@clients]@clientdb
[!NOTE] La spécification de port (
:port) s'applique uniquement à la connexion initiale à l'hôte. Les chaînes de serveurs liés (-l) utilisent les noms de serveurs liés tels que configurés danssys.servers, et non les combinaisonshôte:port.
Ces modes ne nécessitent aucune authentification et fonctionnent avant d'avoir des identifiants.
Le service SQL Server Browser écoute sur UDP 1434 et répond aux requêtes de découverte avec la liste des instances SQL Server en cours d'exécution sur un hôte, y compris leurs noms, versions et ports TCP. Utile lorsque la cible exécute des instances nommées sur des ports dynamiques, sans avoir à deviner ou scanner.
# Interroge le service SQL Browser sur un hôte spécifique (UDP 1434)
MSSQLand.exe LAB-SQL03 --browse
Active Directory expose les enregistrements SQL Server via des Service Principal Names (SPNs) stockés sur les comptes d'ordinateur et de service. MSSQLand interroge AD via LDAP pour les SPNs MSSQLSvc/* afin d'énumérer les instances SQL Server dans le domaine, ou dans toute la forêt via le Global Catalog.
# Trouve les serveurs SQL dans Active Directory via LDAP (domaine courant)
MSSQLand.exe --findsql
# Cible un domaine spécifique
MSSQLand.exe --findsql pgd.lab
# Recherche dans toute la forêt via le Global Catalog (port 3268)
MSSQLand.exe --findsql pgd.lab --gc
La découverte est multicouche. Voir FindSqlServers.cs pour plus de détails.
Le service SQL Server Browser répond également aux paquets UDP broadcast sur UDP 1434, permettant de découvrir toutes les instances SQL Server s'annonçant sur le sous-réseau local.
# Découverte par broadcast sur le réseau local (UDP 1434)
MSSQLand.exe --broadcast
MSSQLand.exe --broadcast --timeout 5
[!TIP] Cela est particulièrement utile lorsqu'un SQL Server s'exécute sur une machine qui n'est pas jointe au domaine et n'apparaîtra donc dans aucune requête LDAP ou SPN. Pensez aux serveurs autonomes, aux machines de développeur ou aux instances non autorisées déployées sur un VLAN interne.
Valide les ports ouverts par rapport aux instances SQL Server actives en utilisant les poignées de main du protocole TDS (pas seulement TCP SYN). Un port n'est signalé que s'il répond à un paquet de pré-connexion TDS.
MSSQLand.exe LAB-SQL03 --portscan
MSSQLand.exe LAB-SQL03 --portscan --all # Trouve toutes les instances (plage éphémère complète)
MSSQLand.exe LAB-SQL03 --portscan 65184 # Port unique
MSSQLand.exe LAB-SQL03 --portscan 65180-65190 # Plage de ports
MSSQLand.exe LAB-SQL03 --portscan 1433,5000,65184 # Liste séparée par des virgules
MSSQLand s'exécute en tant qu'assembly .NET dans un beacon et s'authentifie toujours en utilisant le contexte d'exécution courant (-c token). Lorsque vous disposez d'un hash, la bonne approche consiste d'abord à forger un token au niveau du beacon, puis à exécuter MSSQLand normalement. System.Data.SqlClient hérite de ce token de manière transparente, et aucune implémentation TDS personnalisée n'est requise.
Implémenter NTLMv2 à partir de zéro dans MSSQLand signifierait :
System.Data.SqlClient par une pile TDS 7.x faite main (trop de lignes de code socket, TLS et NTLM).Si vous devez vous authentifier avec un ticket Kerberos ou des hashs NT/LM depuis une position externe, mssqlclient-ng est l'outil approprié. Il s'agit d'un client Python 3 conçu pour un accès côté Unix, facilement associé à un proxy SOCKS5 établi depuis votre beacon.
Si vous exécutez MSSQLand sur votre hôte Windows mais devez accéder à une cible SQL Server via un environnement Linux (VM Hyper-V, VMware ou WSL), vous pouvez facilement rediriger la connexion à l'aide de socat :
sudo socat TCP4-LISTEN:1433,fork,reuseaddr TCP:10.10.11.90:1433
Cette commande écoute sur le port 1433 de votre machine Linux et redirige tout le trafic vers le serveur SQL cible à 10.10.11.90:1433. Vous pouvez ensuite connecter MSSQLand à l'IP de votre VM Linux depuis votre hôte Windows.
-h ou --help - Affiche toutes les actions disponibles-h search_term - Filtre les actions (par exemple, -h adsi affiche toutes les actions liées à ADSI)localhost -c token createuser -h - Affiche l'aide détaillée pour une action spécifiqueMSSQLand inclut une prise en charge complète pour l'exploitation et la reconnaissance de Microsoft Configuration Manager (anciennement SCCM / MECM). Lorsque vous avez accès à un serveur de base de données ConfigMgr, vous pouvez utiliser des actions spécialisées pour le renseignement sur les périphériques (par exemple, cm-devices) ou la cartographie de l'infrastructure.
Toutes les actions ConfigMgr utilisent le préfixe cm- (par exemple, cm-scripts, cm-package) pour s'aligner sur la convention de nommage des cmdlets PowerShell officiels de Microsoft (Get-CM*, Set-CM*, etc.).
La sortie de l'outil, enrichie d'horodatages et d'informations contextuelles précieuses, est conçue pour produire des résultats visuellement attrayants et professionnels, ce qui la rend idéale pour capturer des captures d'écran de haute qualité pour tous vos rapports (par exemple, livrables clients, rapports internes, évaluations red team).
Tous les tableaux de sortie sont compatibles Markdown et peuvent être copiés-collés directement dans vos notes sans aucune difficulté de formatage.
[!TIP] Vous pouvez également obtenir une sortie compatible
.csven utilisant l'option--format csv:MSSQLand.exe localhost -c token --format csv --silent procedures > procedures.csv
Les contributions sont les bienvenues et appréciées ! Que ce soit pour corriger des bugs, ajouter de nouvelles fonctionnalités, améliorer la documentation ou partager des retours, vos efforts sont valorisés et font la différence. L'open source prospère grâce à la collaboration et à la reconnaissance. Les contributions, grandes ou petites, aident à améliorer l'outil et sa communauté. Votre temps et vos efforts sont vraiment appréciés.
Ici, personne ne sera effacé de l'historique Git. Pas de crainte à avoir ici. Personne ne copiera-collera votre code sans respecter l'éthique collaborative de l'open source.
Veuillez consulter CONTRIBUTING.md pour des directives détaillées sur la façon de commencer.
Si vous vous demandez pourquoi cela existe et non comme contribution à d'autres projets SQL Server, voir ORIGIN.md.
Cet outil est fourni strictement à des fins de recherche en sécurité défensive, d'éducation et de tests d'intrusion autorisés. Vous devez disposer d'une autorisation écrite explicite avant d'exécuter ce logiciel sur tout système dont vous n'êtes pas propriétaire.
Cet outil est conçu à des fins éducatives uniquement et vise à aider les professionnels de la sécurité à comprendre et tester la sécurité des environnements SQL Server dans le cadre d'engagements autorisés.
Les environnements acceptables incluent :
Toute utilisation abusive de ce projet peut entraîner des poursuites judiciaires.
Toute utilisation non autorisée de cet outil dans des environnements réels ou contre des systèmes sans autorisation explicite du propriétaire du système est strictement interdite et peut violer les normes légales et éthiques. Les créateurs et contributeurs de cet outil ne sont pas responsables de toute utilisation abusive ou des dommages causés.
Utilisez-le de manière responsable et éthique. Respectez toujours la loi et obtenez les autorisations appropriées.