
Ferramenta de pós-exploração em C# para Microsoft SQL Server (MS SQL / MSSQL) que percorre cadeias de servidores vinculados de qualquer profundidade com impersonação de login em cascata em cada salto.
Aterrisse graciosamente no seu Microsoft SQL Server (MS SQL) DBMS alvo, como se estivesse chegando em um voo de classe executiva com uma taça de champanhe na mão. 🥂

MSSQLand é uma ferramenta de pós-exploração em C# para Microsoft SQL Server (MSSQL / MS SQL) construída para operadores de red team. Projetada para ser executada dentro do ambiente alvo diretamente através de seus beacons (por exemplo, usando execute-assembly no Cobalt Strike ou Havoc ou qualquer comando dotnet), ela permite que você percorra cadeias de servidores vinculados, personifique qualquer login encontrado ao longo do caminho e saia do último salto com qualquer ação desejada. Tudo com mínimo impacto OPSEC e sem dependências externas.
OPENQUERY / EXEC AT através de cadeias arbitrariamente profundasEXECUTE AS LOGIN em cada salto com personificação em cascata de vários usuárioscm-* para reconhecimento e exploração de bancos de dados do Microsoft Configuration Manager[!TIP] O MSSQLand é construído usando
.NET Framework 4.8, pensado para execução de assembly, usando o contexto atual. Se você precisar conectar usando hashes NT/LM ou um ticket Kerberos, veja Pass-the-Hash.
[!NOTE] Não se esqueça do básico. Durante uma avaliação de segurança, às vezes é mais fácil usar o SQL Server Management Studio (SSMS).
MSSQLand.exe [options] <host> [options] <action> [action-options]
MSSQLand.exe <host> --probe
As flags globais (-c, -l, --debug, etc.) são aceitas em qualquer posição, incluindo após o nome da ação; tokens não reconhecidos após a ação são passados literalmente para a ação.
[!NOTE] Omitir
<action>realiza apenas um teste de conexão. Ele autentica e sai sem executar consultas. Ideal para validação de credenciais com mínimo impacto OPSEC.
[!TIP] Evite digitar manualmente todas as chamadas RPC Out ou OPENQUERY. Deixe a ferramenta lidar com qualquer cadeia de servidores vinculados com o argumento
-l, para que você possa se concentrar no panorama geral.
Formato: server:port/user@database ou qualquer combinação server/user@database:port.
server (obrigatório) - O nome do host ou IP do SQL Server:port (opcional) - Número da porta (padrão: 1433, também comuns: 1434, 14333, 2433)/user (opcional) - Usuário para personificar neste servidor ("execute as login")
/user1/user2/user3 executa EXECUTE AS LOGIN = 'user1'; EXECUTE AS LOGIN = 'user2'; EXECUTE AS LOGIN = 'user3';/user insere um novo contexto de personificação na pilha de segurança@database (opcional) - Contexto do banco de dados# Connectivity probe: checks if server is alive without authenticating
MSSQLand.exe localhost --probe
# Connection test only (no action executed, authenticates and exits)
MSSQLand.exe localhost -c token
# Execute specific action
MSSQLand.exe localhost -c token info
MSSQLand.exe localhost:1434@db03 -c token info
MSSQLand.exe LAB-SQL01@AdventureWorks -c token tables -n Customer
Encadeie vários servidores SQL usando a flag -l com ponto e vírgula (;) como separador:
-l SQL01;SQL02/user;SQL03@database
Sintaxe:
;) - Separa servidores na cadeia/) - Especifica usuário para personificar ("execute as login")
/user1/user2 executa personificações sequenciais@) - Especifica contexto do banco de dados[...]) - Usados para proteger o nome do servidor de ser dividido pelos nossos delimitadoresExemplos:
# 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] A especificação de porta (
:port) se aplica apenas à conexão inicial do host. As cadeias de servidores vinculados (-l) usam os nomes dos servidores vinculados conforme configurados emsys.servers, não combinaçõeshostname:port.
Esses modos não exigem autenticação e funcionam antes de você ter credenciais.
O serviço SQL Server Browser escuta na porta UDP 1434 e responde a solicitações de descoberta com a lista de instâncias do SQL Server em execução em um host, incluindo seus nomes, versões e portas TCP. Isso é útil quando o alvo está executando instâncias nomeadas em portas dinâmicas, sem necessidade de advinhar ou escanear.
# Query the SQL Browser service on a specific host (UDP 1434)
MSSQLand.exe LAB-SQL03 --browse
O Active Directory expõe registros do SQL Server através de Service Principal Names (SPNs) armazenados em contas de computador e serviço. O MSSQLand consulta o AD via LDAP por SPNs MSSQLSvc/* para enumerar instâncias do SQL Server no domínio, ou toda a floresta através do Catálogo Global.
# Find SQL Servers in Active Directory via LDAP (current domain)
MSSQLand.exe --findsql
# Target a specific domain
MSSQLand.exe --findsql pgd.lab
# Forest-wide search via Global Catalog (port 3268)
MSSQLand.exe --findsql pgd.lab --gc
A descoberta é em múltiplas camadas. Veja FindSqlServers.cs para mais detalhes.
O SQL Server Browser também responde a pacotes de broadcast UDP na UDP 1434, permitindo a descoberta de todas as instâncias do SQL Server que se anunciam na sub-rede local.
# Broadcast discovery on the local network (UDP 1434)
MSSQLand.exe --broadcast
MSSQLand.exe --broadcast --timeout 5
[!TIP] Isso é particularmente útil quando um SQL Server está sendo executado em uma máquina que não está ingressada no domínio e, portanto, não aparecerá em nenhuma consulta LDAP ou SPN. Pense em servidores autônomos, máquinas de desenvolvedor ou instâncias não autorizadas criadas em uma VLAN interna.