
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.
Valida portas abertas em instâncias ativas do SQL Server usando handshakes do protocolo TDS (não apenas SYN TCP). Uma porta só é reportada se responder a um pacote de pré-login TDS.
MSSQLand.exe LAB-SQL03 --portscan
MSSQLand.exe LAB-SQL03 --portscan --all # Find all instances (full ephemeral range)
MSSQLand.exe LAB-SQL03 --portscan 65184 # Single port
MSSQLand.exe LAB-SQL03 --portscan 65180-65190 # Port range
MSSQLand.exe LAB-SQL03 --portscan 1433,5000,65184 # Comma-separated list
O MSSQLand é executado como um assembly .NET dentro de um beacon e sempre autentica usando o contexto de execução atual (-c token). Quando você tem um hash, a abordagem correta é forjar um token no nível do beacon primeiro e então executar o MSSQLand normalmente. System.Data.SqlClient herda esse token de forma transparente, e nenhuma implementação TDS personalizada é necessária.
Implementar NTLMv2 do zero dentro do MSSQLand significaria:
System.Data.SqlClient por uma pilha TDS 7.x feita à mão (muitas linhas de código de socket, TLS e NTLM).Se você precisar autenticar com um ticket Kerberos ou hashes NT/LM de uma posição externa, mssqlclient-ng é a ferramenta certa. Este é um cliente Python 3 construído para acesso do lado Unix, facilmente emparelhado com um proxy SOCKS5 estabelecido a partir do seu beacon.
Se você estiver executando o MSSQLand em seu host Windows, mas precisar acessar um servidor SQL alvo através de um ambiente Linux (VM Hyper-V, VMware ou WSL), você pode encaminhar facilmente a conexão usando socat:
sudo socat TCP4-LISTEN:1433,fork,reuseaddr TCP:10.10.11.90:1433
Este comando escuta na porta 1433 em sua máquina Linux e encaminha todo o tráfego para o servidor SQL alvo em 10.10.11.90:1433. Você pode então conectar o MSSQLand ao IP da sua VM Linux a partir do seu host Windows.
-h ou --help - Mostrar todas as ações disponíveis-h termo_de_busca - Filtrar ações (ex.: -h adsi mostra todas as ações relacionadas a ADSI)localhost -c token createuser -h - Mostrar ajuda detalhada para uma ação específicaO MSSQLand inclui suporte abrangente para exploração e reconhecimento do Microsoft Configuration Manager (anteriormente SCCM / MECM). Quando você tem acesso a um servidor de banco de dados ConfigMgr, pode usar ações especializadas para inteligência de dispositivos (ex.: cm-devices) ou mapeamento de infraestrutura.
Todas as ações do ConfigMgr usam o prefixo cm- (ex.: cm-scripts, cm-package) para alinhar com a convenção de nomenclatura dos cmdlets PowerShell oficiais da Microsoft (Get-CM*, Set-CM*, etc.).
A saída da ferramenta, enriquecida com carimbos de data/hora e informações contextuais valiosas, é projetada para produzir resultados visualmente atraentes e profissionais, tornando-a ideal para capturar capturas de tela de alta qualidade para qualquer um de seus relatórios (ex.: entrega para cliente, relatório interno, avaliações de red team).
Todas as tabelas de saída são amigáveis ao Markdown e podem ser copiadas e coladas diretamente em suas anotações sem qualquer problema de formatação.
[!TIP] Você também pode ter saída compatível com
.csvusando a opção--format csv:MSSQLand.exe localhost -c token --format csv --silent procedures > procedures.csv
Contribuições são bem-vindas e apreciadas! Seja corrigindo bugs, adicionando novas funcionalidades, melhorando a documentação ou compartilhando feedback, seu esforço é valorizado e faz a diferença. O código aberto prospera na colaboração e no reconhecimento. Contribuições, grandes ou pequenas, ajudam a melhorar a ferramenta e sua comunidade. Seu tempo e esforço são realmente valorizados.
Aqui, ninguém será apagado do histórico do Git. Sem medo aqui. Ninguém copiará e colará seu código sem aderir ao espírito colaborativo do código aberto.
Consulte o CONTRIBUTING.md para obter diretrizes detalhadas sobre como começar.
Se você se pergunta por que isso existe e não como contribuição para outros projetos de SQL Server, veja ORIGIN.md.
Esta ferramenta é fornecida estritamente para pesquisa de segurança defensiva, educação e testes de penetração autorizados. Você deve ter autorização explícita por escrito antes de executar este software contra qualquer sistema que não possua.
Esta ferramenta é projetada apenas para fins educacionais e destina-se a ajudar profissionais de segurança a entender e testar a segurança de ambientes SQL Server em engajamentos autorizados.
Ambientes aceitáveis incluem:
O uso indevido deste projeto pode resultar em ação legal.
Qualquer uso não autorizado desta ferramenta em ambientes do mundo real ou contra sistemas sem permissão explícita do proprietário do sistema é estritamente proibido e pode violar padrões legais e éticos. Os criadores e contribuidores desta ferramenta não são responsáveis por qualquer uso indevido ou danos causados.
Use de forma responsável e ética. Sempre respeite a lei e obtenha a devida autorização.