
Herramienta de post-explotación en C# para Microsoft SQL Server (MS SQL / MSSQL) que recorre cadenas de servidores vinculados de cualquier profundidad con suplantación de inicio de sesión en cascada en cada salto.
Aterrice con elegancia en su DBMS Microsoft SQL Server (MS SQL) objetivo, como si llegara en un vuelo de clase business con una copa de champán en la mano. 🥂

MSSQLand es una herramienta de post-explotación para Microsoft SQL Server (MSSQL / MS SQL) en C# diseñada para operadores de equipos rojos. Diseñada para ejecutarse dentro del entorno objetivo directamente a través de sus beacons (por ejemplo, usando execute-assembly en Cobalt Strike o Havoc o cualquier comando dotnet), le permite recorrer cadenas de servidores vinculados, suplantar cualquier inicio de sesión encontrado en el camino y emerger desde el último salto con cualquier acción deseada. Todo con una huella OPSEC mínima y sin dependencias externas.
OPENQUERY / EXEC AT a través de cadenas arbitrariamente profundasEXECUTE AS LOGIN en cada salto con suplantación de múltiples usuarios en cascadacm-* para reconocimiento y explotación de bases de datos de Microsoft Configuration Manager[!TIP] MSSQLand está construido usando
.NET Framework 4.8, pensando en la ejecución de ensamblados, utilizando el contexto actual. Si necesita conectarse usando hashes NT/LM o un ticket Kerberos, consulte Pass-the-Hash.
[!NOTE] No olvide lo básico. Durante una evaluación de seguridad, a veces es más fácil usar SQL Server Management Studio (SSMS).
MSSQLand.exe [options] <host> [options] <action> [action-options]
MSSQLand.exe <host> --probe
Las banderas globales (-c, -l, --debug, etc.) se aceptan en cualquier posición, incluso después del nombre de la acción; los tokens no reconocidos después de la acción se pasan textualmente a la acción.
[!NOTE] Omitir
<action>realiza solo una prueba de conexión. Se autentica y sale sin ejecutar consultas. Ideal para validación de credenciales con huella OPSEC mínima.
[!TIP] Evite escribir manualmente todas las llamadas RPC Out o OPENQUERY. Deje que la herramienta maneje cualquier cadena de servidores vinculados con el argumento
-l, para que pueda concentrarse en el panorama general.
Formato: server:port/user@database o cualquier combinación server/user@database:port.
server (obligatorio) - El nombre de host o IP del SQL Server:port (opcional) - Número de puerto (por defecto: 1433, también común: 1434, 14333, 2433)/user (opcional) - Usuario a suplantar en este servidor ("execute as login")
/user1/user2/user3 ejecuta EXECUTE AS LOGIN = 'user1'; EXECUTE AS LOGIN = 'user2'; EXECUTE AS LOGIN = 'user3';/user empuja un nuevo contexto de suplantación a la pila de seguridad@database (opcional) - Contexto de base de datos# Sonda de conectividad: comprueba si el servidor está vivo sin autenticarse
MSSQLand.exe localhost --probe
# Solo prueba de conexión (no se ejecuta ninguna acción, se autentica y sale)
MSSQLand.exe localhost -c token
# Ejecutar acción específica
MSSQLand.exe localhost -c token info
MSSQLand.exe localhost:1434@db03 -c token info
MSSQLand.exe LAB-SQL01@AdventureWorks -c token tables -n Customer
Encadene múltiples servidores SQL usando la bandera -l con punto y coma (;) como separador:
-l SQL01;SQL02/user;SQL03@database
Sintaxis:
;) - Separa servidores en la cadena/) - Especifica el usuario a suplantar ("execute as login")
/user1/user2 ejecuta suplantaciones secuenciales@) - Especifica el contexto de base de datos[...]) - Se usan para proteger el nombre del servidor de ser dividido por nuestros delimitadoresEjemplos:
# Simple chain
-l SQL01;SQL02;SQL03
# With impersonation and databases
-l SQL01/admin;SQL02;SQL03/manager@clients
# Cascading impersonation (impersonate user1, then user2 on SQL01)
-l SQL01/user1/user2;SQL02;SQL03
# Mixed cascading (SQL01: user1→user2, SQL03: user3→user4→user5)
-l SQL01/user1/user2;SQL02;SQL03/user3/user4/user5@database
# Server names can contain hyphens, dots (no brackets needed)
-l SQL-01;SERVER.001;HOST.DOMAIN.COM
# Brackets only needed if server name contains delimiter characters
-l [SERVER;PROD];SQL02;[SQL03@clients]@clientdb
[!NOTE] La especificación de puerto (
:port) solo se aplica a la conexión inicial del host. Las cadenas de servidores vinculados (-l) usan los nombres de servidores vinculados tal como están configurados ensys.servers, no combinacioneshostname:port.
Estos modos no requieren autenticación y funcionan antes de tener credenciales.
El Servicio SQL Server Browser escucha en UDP 1434 y responde a solicitudes de descubrimiento con la lista de instancias de SQL Server en un host, incluyendo sus nombres, versiones y puertos TCP. Esto es útil cuando el objetivo ejecuta instancias con nombre en puertos dinámicos, no es necesario adivinar o escanear.
# Consulta el servicio SQL Browser en un host específico (UDP 1434)
MSSQLand.exe LAB-SQL03 --browse
Active Directory expone los registros de SQL Server a través de Nombres de Principales de Servicio (SPN) almacenados en cuentas de equipo y de servicio. MSSQLand consulta AD mediante LDAP para SPN MSSQLSvc/* con el fin de enumerar instancias de SQL Server en todo el dominio, o todo el bosque a través del Catálogo Global.
# Busca servidores SQL en Active Directory mediante LDAP (dominio actual)
MSSQLand.exe --findsql
# Apunta a un dominio específico
MSSQLand.exe --findsql pgd.lab
# Búsqueda en todo el bosque mediante Catálogo Global (puerto 3268)
MSSQLand.exe --findsql pgd.lab --gc
El descubrimiento tiene múltiples capas. Consulte FindSqlServers.cs para más detalles.
SQL Server Browser también responde a paquetes de difusión UDP en UDP 1434, permitiendo el descubrimiento de todas las instancias de SQL Server que se anuncian en la subred local.
# Descubrimiento por difusión en la red local (UDP 1434)
MSSQLand.exe --broadcast
MSSQLand.exe --broadcast --timeout 5
[!TIP] Esto es particularmente útil cuando un SQL Server se ejecuta en una máquina que no está unida al dominio y por lo tanto no aparecerá en ninguna consulta LDAP o SPN. Piense en servidores independientes, máquinas de desarrolladores o instancias no autorizadas levantadas en una VLAN interna.