
Strumento di post-exploitation in C# per Microsoft SQL Server (MS SQL / MSSQL) che attraversa catene di server collegati di qualsiasi profondità con impersonificazione di login a cascata a ogni salto.
Atterra con eleganza nel tuo database Microsoft SQL Server (MS SQL) di destinazione, come se arrivassi su un volo business class con un calice di champagne in mano. 🥂

MSSQLand è uno strumento di post-sfruttamento per Microsoft SQL Server (MSSQL / MS SQL) scritto in C#, progettato per operatori red team. Progettato per essere eseguito direttamente nell'ambiente target tramite i tuoi beacon (ad esempio, usando execute-assembly in Cobalt Strike o Havoc o qualsiasi comando dotnet), ti consente di attraversare catene di server collegati, impersonare qualsiasi login incontrato lungo il percorso e uscire dall'ultimo hop con qualsiasi azione desiderata. Il tutto con un'impronta OPSEC minima e senza dipendenze esterne.
OPENQUERY / EXEC AT attraverso catene arbitrariamente profondeEXECUTE AS LOGIN ad ogni hop con impersonificazione a cascata multi-utentecm-* per ricognizione e sfruttamento dei database di Microsoft Configuration Manager[!TIP] MSSQLand è realizzato con
.NET Framework 4.8, pensato per l'esecuzione di assembly, utilizzando il contesto corrente. Se devi connetterti utilizzando hash NT/LM o un ticket Kerberos, vedi Pass-the-Hash.
[!NOTE] Non dimenticare le basi. Durante un assessment di sicurezza, a volte è più facile usare SQL Server Management Studio (SSMS).
MSSQLand.exe [options] <host> [options] <action> [action-options]
MSSQLand.exe <host> --probe
I flag globali (-c, -l, --debug, ecc.) sono accettati in qualsiasi posizione, anche dopo il nome dell'azione; i token non riconosciuti dopo l'azione vengono passati così come sono all'azione.
[!NOTE] Omettere
<action>esegue solo un test di connessione. Si autentica ed esce senza eseguire query. Ideale per la validazione delle credenziali con un'impronta OPSEC minima.
[!TIP] Evita di scrivere manualmente tutte le chiamate RPC Out o OPENQUERY. Lascia che lo strumento gestisca qualsiasi catena di server collegati con l'argomento
-l, così puoi concentrarti sul quadro generale.
Formato: server:port/user@database o qualsiasi combinazione server/user@database:port.
server (obbligatorio) - Il nome host o l'IP del SQL Server:port (opzionale) - Numero di porta (predefinito: 1433, anche comuni: 1434, 14333, 2433)/user (opzionale) - Utente da impersonare su questo server ("execute as login")
/user1/user2/user3 esegue EXECUTE AS LOGIN = 'user1'; EXECUTE AS LOGIN = 'user2'; EXECUTE AS LOGIN = 'user3';/user inserisce un nuovo contesto di impersonificazione nello stack di sicurezza@database (opzionale) - Contesto del database# 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
Collega più server SQL utilizzando il flag -l con punto e virgola (;) come separatore:
-l SQL01;SQL02/user;SQL03@database
Sintassi:
;) - Separa i server nella catena/) - Specifica l'utente da impersonare ("execute as login")
/user1/user2 esegue impersonificazioni sequenziali@) - Specifica il contesto del database[...]) - Usate per proteggere il nome del server dall'essere diviso dai nostri delimitatoriEsempi:
# 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 specifica della porta (
:port) si applica solo alla connessione host iniziale. Le catene di server collegati (-l) usano i nomi dei server collegati come configurati insys.servers, non combinazionihostname:port.
Queste modalità non richiedono autenticazione e funzionano prima di avere le credenziali.
Il servizio SQL Server Browser ascolta su UDP 1434 e risponde alle richieste di scoperta con l'elenco delle istanze di SQL Server in esecuzione su un host, inclusi nomi, versioni e porte TCP. È utile quando il target esegue istanze con nome su porte dinamiche, non è necessario indovinare o scansionare.
# Query the SQL Browser service on a specific host (UDP 1434)
MSSQLand.exe LAB-SQL03 --browse
Active Directory espone le registrazioni di SQL Server tramite Nomi Principal di Servizio (SPN) memorizzati su account computer e servizio. MSSQLand interroga AD tramite LDAP per gli SPN MSSQLSvc/* per enumerare le istanze di SQL Server nel dominio, o nell'intera foresta tramite il Catalogo Globale.
# 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
La scoperta è multilivello. Vedi FindSqlServers.cs per maggiori dettagli.
SQL Server Browser risponde anche a pacchetti broadcast UDP su UDP 1434, consentendo la scoperta di tutte le istanze di SQL Server che si pubblicizzano sulla sottorete locale.
# Broadcast discovery on the local network (UDP 1434)
MSSQLand.exe --broadcast
MSSQLand.exe --broadcast --timeout 5
[!TIP] Questo è particolarmente utile quando un SQL Server è in esecuzione su una macchina che non è unita al dominio e quindi non apparirà in nessuna query LDAP o SPN. Pensa a server standalone, macchine di sviluppo o istanze canaglia attivate su una VLAN interna.
Convalida le porte aperte contro istanze SQL Server attive utilizzando handshake del protocollo TDS (non solo TCP SYN). Una porta viene segnalata solo se risponde a un pacchetto di pre-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
MSSQLand viene eseguito come assembly .NET all'interno di un beacon e si autentica sempre utilizzando il contesto di esecuzione corrente (-c token). Quando hai un hash, l'approccio corretto è creare prima un token a livello di beacon e poi eseguire MSSQLand normalmente. System.Data.SqlClient eredita quel token in modo trasparente e non è richiesta alcuna implementazione TDS personalizzata.
Implementare NTLMv2 da zero dentro MSSQLand significherebbe:
System.Data.SqlClient con uno stack TDS 7.x fatto a mano (troppe righe di codice socket, TLS e NTLM).Se devi autenticarti con un ticket Kerberos o hash NT/LM da una posizione esterna, mssqlclient-ng è lo strumento giusto. Questo è un client Python 3 costruito per l'accesso lato Unix, facilmente abbinabile a un proxy SOCKS5 stabilito dal tuo beacon.
Se stai eseguendo MSSQLand sul tuo host Windows ma devi accedere a un target SQL Server attraverso un ambiente Linux (VM Hyper-V, VMware o WSL), puoi facilmente inoltrare la connessione usando socat:
sudo socat TCP4-LISTEN:1433,fork,reuseaddr TCP:10.10.11.90:1433
Questo comando ascolta sulla porta 1433 sulla tua macchina Linux e inoltra tutto il traffico al target SQL Server su 10.10.11.90:1433. Puoi quindi connettere MSSQLand all'IP della tua VM Linux dal tuo host Windows.
-h o --help - Mostra tutte le azioni disponibili-h termine_ricerca - Filtra le azioni (es., -h adsi mostra tutte le azioni relative ad ADSI)localhost -c token createuser -h - Mostra l'aiuto dettagliato per un'azione specificaMSSQLand include un supporto completo per lo sfruttamento e la ricognizione di Microsoft Configuration Manager (ex SCCM / MECM). Quando hai accesso a un server database ConfigMgr, puoi sfruttare azioni specializzate per intelligence sui dispositivi (es., cm-devices) o mappatura dell'infrastruttura.
Tutte le azioni ConfigMgr usano il prefisso cm- (es., cm-scripts, cm-package) per allinearsi alla convenzione di denominazione dei cmdlet PowerShell ufficiali di Microsoft (Get-CM*, Set-CM*, ecc.).
L'output dello strumento, arricchito con timestamp e preziose informazioni contestuali, è progettato per produrre risultati visivamente accattivanti e professionali, rendendolo ideale per catturare screenshot di alta qualità per qualsiasi report (es., deliverable per il cliente, report interno, assessment red team).
Tutte le tabelle di output sono compatibili con Markdown e possono essere copiate e incollate direttamente nelle tue note senza fastidi di formattazione.
[!TIP] Puoi anche ottenere output compatibile con
.csvutilizzando l'opzione--format csv:MSSQLand.exe localhost -c token --format csv --silent procedures > procedures.csv
I contributi sono benvenuti e apprezzati! Che si tratti di correggere bug, aggiungere nuove funzionalità, migliorare la documentazione o condividere feedback, il tuo sforzo è valorizzato e fa la differenza. L'open source prospera sulla collaborazione e sul riconoscimento. I contributi, grandi o piccoli, aiutano a migliorare lo strumento e la sua comunità. Il tuo tempo e il tuo sforzo sono davvero apprezzati.
Qui, nessuno verrà cancellato dalla cronologia Git. Nessuna paura qui. Nessuno copierà-incollerà il tuo codice senza aderire all'etica collaborativa dell'open source.
Consulta CONTRIBUTING.md per linee guida dettagliate su come iniziare.
Se ti chiedi perché questo esiste e non come contributo ad altri progetti SQL Server, vedi ORIGIN.md.
Questo strumento è fornito strettamente per ricerca sulla sicurezza difensiva, istruzione e test di penetrazione autorizzati. Devi avere esplicita autorizzazione scritta prima di eseguire questo software su qualsiasi sistema che non possiedi.
Questo strumento è progettato solo per scopi educativi e intende assistere i professionisti della sicurezza nella comprensione e nel test della sicurezza degli ambienti SQL Server in impegni autorizzati.
Gli ambienti accettabili includono:
L'uso improprio di questo progetto può comportare azioni legali.
Qualsiasi uso non autorizzato di questo strumento in ambienti reali o contro sistemi senza permesso esplicito del proprietario del sistema è strettamente proibito e può violare standard legali ed etici. I creatori e i contributori di questo strumento non sono responsabili per qualsiasi uso improprio o danno causato.
Usalo in modo responsabile ed etico. Rispetta sempre la legge e ottieni la dovuta autorizzazione.