Un port Go completo di Impacket - 63 strumenti CLI e 24 librerie per attacchi ai protocolli Windows e Active Directory, compilati in un unico binario senza dipendenze.
Di Jacob Paullus (@psycep_)
Un'implementazione completa in Go di Impacket - 63 strumenti e 24 pacchetti di libreria per l'interazione con protocolli di rete Windows, l'enumerazione di Active Directory e l'esecuzione di attacchi. Costruito come framework nativo Go, così puoi compilare una volta e eseguire ovunque senza dipendenze Python.
Beta Release - Altamente Sperimentale. gopacket è in fase di sviluppo attivo. Gli strumenti principali sono stati testati contro ambienti di laboratorio Active Directory, ma sono previsti casi limite e stranezze dei protocolli. Se qualcosa non funziona, testa la stessa operazione con Impacket in parallelo e includi entrambi gli output nella tua segnalazione di bug. Questo ci aiuta a identificare rapidamente se si tratta di un problema specifico di gopacket o di una limitazione condivisa del protocollo.
git clone https://github.com/mandiant/gopacket
cd gopacket
# Default: Linux/macOS build + install to /usr/local/bin
./install.sh
# Run with no flags and it prompts you through the choices interactively.
# Or pick a target directly:
./install.sh --target portable # static Linux binaries in ./dist/portable/
./install.sh --target windows # Windows .exe cross-compiles in ./dist/windows/
./install.sh --target all # build every target in one run
# Build without installing (native only)
./install.sh --build-only
# Or build with make
make build
La build predefinita (--target native) richiede Go 1.24.13+, GCC e gli header
di sviluppo di libpcap (apt install build-essential libpcap-dev su
Debian/Ubuntu/Kali, yum install gcc libpcap-devel su RHEL/CentOS, o
brew install libpcap su macOS). I target portable e windows richiedono
solo la toolchain Go; sniff e split diventano stub in quelle build
perché richiedono libpcap. Vedi Platform Support per
la matrice completa.
gopacket si compila su Linux, macOS e Windows. L'insieme degli strumenti funzionanti e dei percorsi di proxying disponibili dipende dai flag di build:
| Build | Strumenti disponibili | Proxying |
|---|---|---|
| Linux / macOS con cgo (default) | Tutti i 63 | proxychains (LD_PRELOAD) e/o -proxy SOCKS5 |
Linux con CGO_ENABLED=0 | 61 (sniff, split diventano stub) | solo -proxy (proxychains richiede l'hook libc) |
Windows (GOOS=windows CGO_ENABLED=0) | 60 (sniff, split, sniffer stub) | solo -proxy (nessun LD_PRELOAD su Windows) |
sniff e split dipendono da libpcap tramite cgo; sniffer dipende dai raw
socket Unix. Quando uno strumento non può essere compilato per il target, gopacket sostituisce uno
stub che stampa un messaggio chiaro ed esce con codice 1, così go build ./... riesce
sempre e il layout di installazione è coerente tra le piattaforme.
Per disinstallare:
./install.sh --uninstall
gopacket supporta due percorsi di proxying indipendenti. Possono anche essere concatenati.
Tutti gli strumenti gopacket funzionano attraverso proxychains. I binari Go normalmente aggirano proxychains perché il runtime di Go gestisce DNS e networking internamente, saltando gli hook LD_PRELOAD su cui proxychains si basa. gopacket aggira questo problema collegandosi alla libreria C di sistema per le operazioni di rete, permettendo a proxychains di intercettare le connessioni normalmente.
proxychains gopacket-secretsdump 'domain/user:password@target'
proxychains gopacket-smbclient -k -no-pass 'domain/[email protected]'
-proxy)Ogni strumento accetta -proxy per instradare il TCP in uscita attraverso un server SOCKS5 senza affidarsi a LD_PRELOAD. Schemi accettati: socks5 e socks5h. Quando -proxy non è impostato, le variabili d'ambiente ALL_PROXY / all_proxy vengono consultate come fallback.
gopacket-secretsdump -proxy socks5h://127.0.0.1:1080 'domain/user:password@target'
ALL_PROXY=socks5h://127.0.0.1:1080 gopacket-smbclient 'domain/user:password@target'
Le funzionalità che dipendono da UDP sono disabilitate sotto -proxy anziché perdere pacchetti silenziosamente (SOCKS5 UDP ASSOCIATE è raramente supportato dai proxy, e aggirare il proxy per UDP rivelerebbe l'IP sorgente reale dell'operatore). Le funzionalità interessate e le relative soluzioni alternative sono documentate in KNOWN_ISSUES.md.
Concatenamento: -proxy è compatibile con proxychains. La connessione TCP al proxy SOCKS5 stesso passa comunque attraverso la connect() di libc, quindi proxychains → gopacket → -proxy → target funziona per scenari di routing annidato.
Vedi la Library Developer Guide per la documentazione completa delle API, esempi di codice e panoramica dell'architettura per costruire strumenti personalizzati sopra i 24 pacchetti di protocollo di gopacket.
| Strumento | Descrizione |
|---|---|
| psexec | Esecuzione remota di comandi tramite creazione di servizi SMB |
| smbexec | Esecuzione remota di comandi tramite SMB (più stealth di psexec) |
| wmiexec | Esecuzione remota di comandi tramite WMI |
| dcomexec | Esecuzione remota di comandi tramite DCOM |
| atexec | Esecuzione remota di comandi tramite Task Scheduler |
| Strumento | Descrizione |
|---|---|
| secretsdump | Estrazione SAM/LSA/NTDS.dit e DCSync (remoto + offline) |
| dpapi | Estrazione della chiave di backup DPAPI |
| esentutl | Parser offline di database ESE (NTDS.dit) |
| registry-read | Parser offline di hive del registro Windows |
| Strumento | Descrizione |
|---|---|
| getTGT | Richiede un TGT con password, hash o chiave AES |
| getST | Richiede un service ticket con S4U2Self/S4U2Proxy |
| GetUserSPNs | Kerberoasting - trova e richiede SPN |
| GetNPUsers | AS-REP roasting - trova account senza pre-auth |
| ticketer | Forgiatura di golden/silver ticket |
| ticketConverter | Converte tra formati ccache e kirbi |
| describeTicket | Analizza e decifra i ticket Kerberos |
| getPac | Richiede e analizza le informazioni PAC |
| keylistattack | Attacco KERB-KEY-LIST-REQ (RODC) |
| raiseChild | Escalation da dominio figlio a padre tramite golden ticket |
| Strumento | Descrizione |
|---|---|
| GetADUsers | Enumera gli utenti del dominio via LDAP |
| GetADComputers | Enumera i computer del dominio via LDAP |
| GetLAPSPassword | Legge le password LAPS via LDAP |
| findDelegation | Trova le configurazioni di delega |
| lookupsid | Brute-forcing di SID via LSARPC |
| samrdump | Enumera gli utenti via SAMR |
| rpcdump | Dump degli endpoint RPC via epmapper |
| rpcmap | Scansiona le interfacce RPC accessibili |
| net | Enumerazione net user/group/computer via SAMR/LSARPC |
| netview | Enumera sessioni, condivisioni e utenti connessi |
| CheckLDAPStatus | Verifica i requisiti di LDAP signing e channel binding |
| DumpNTLMInfo | Estrae le informazioni di autenticazione NTLM dalla negoziazione SMB |
| getArch | Rileva l'architettura del sistema operativo remoto via RPC |
| machine_role | Rileva il ruolo della macchina (DC, server, workstation) |