
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:
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 |
|---|---|
| secretsdump | Estrazione SAM/LSA/NTDS.dit e DCSync (remoto + offline) |
| dpapi |
| Strumento | Descrizione |
|---|---|
| ntlmrelayx | Framework completo di NTLM relay con supporto multi-protocollo |
ntlmrelayx supporta:
| Strumento | Descrizione |
|---|---|
| mssqlclient | Client MSSQL interattivo con autenticazione SQL/Windows/Kerberos |
| mssqlinstance | Scoperta di istanze MSSQL via SQL Browser |
| Strumento | Descrizione |
|---|---|
| wmiquery | Shell interattiva per query WMI |
| wmipersist | Persistenza tramite sottoscrizione di eventi WMI |
| Strumento | Descrizione |
|---|---|
| tstool | Enumerazione di sessioni e processi di Terminal Services |
| Strumento | Descrizione |
|---|---|
| rdp_check | Verifica dell'autenticazione RDP |
| mqtt_check | Verifica dell'autenticazione MQTT |
| exchanger | Client Exchange Web Services |
Tutti gli strumenti di rete supportano tre metodi di autenticazione:
# Password
gopacket-secretsdump 'domain/user:password@target'
# NTLM hash (pass-the-hash)
gopacket-secretsdump -hashes ':nthash' 'domain/user@target'
# Kerberos (pass-the-ticket)
KRB5CCNAME=ticket.ccache gopacket-secretsdump -k -no-pass 'domain/user@target'
# Dump domain hashes via DCSync
gopacket-secretsdump 'corp.local/admin:[email protected]'
# Interactive SMB shell
gopacket-smbclient -hashes ':aabbccdd...' 'corp.local/admin@fileserver'
# Kerberoast
gopacket-getuserspns 'corp.local/user:[email protected]'
# Golden ticket
gopacket-ticketer -nthash <krbtgt_hash> -domain-sid S-1-5-21-... -domain corp.local admin
# NTLM relay with SOCKS proxy
sudo gopacket-ntlmrelayx -t smb://target -socks
# LDAP relay for RBCD
sudo gopacket-ntlmrelayx -t ldaps://dc01.corp.local --delegate-access
# Route all outbound traffic through a SOCKS5 proxy
gopacket-secretsdump -proxy socks5h://127.0.0.1:1080 'corp.local/admin:[email protected]'
La directory pkg/ contiene 24 pacchetti di protocollo riutilizzabili che possono essere importati in modo indipendente.
gopacket mira alla piena parità con Impacket. Le seguenti non sono ancora implementate:
Client di protocollo per relay:
Moduli di attacco per relay:
Strumenti standalone:
ifmap.py (mappatura delle interfacce DCOM)mimikatz.py (Mimikatz limitato su RPC)goldenPac.py (MS14-068 - obsoleto su sistemi aggiornati)smbrelayx.py (sostituito da ntlmrelayx)kintercept.py (intercettazione Kerberos)Queste lacune sono a bassa priorità - la maggior parte richiede infrastrutture di nicchia per essere testata o è resa obsoleta da tecniche più recenti.
Queste sono limitazioni a livello di protocollo condivise con Impacket, non bug di gopacket:
Vedi KNOWN_ISSUES.md per informazioni dettagliate su ciascun problema e sulle soluzioni alternative.
Questa è una beta release. I bug sono previsti e i contributi sono benvenuti.
Poiché gopacket implementa gli stessi protocolli di rete di Impacket, una grande frazione dei "bug" si rivela essere ambientale, non specifica di gopacket - DC aggiornati, requisiti di LDAP signing, EPA, PKT_INTEGRITY, SMB signing, validazione NTLM MIC post-CVE-2019-1040, SPN mancanti, disallineamento temporale, stranezze DNS, regole del firewall e così via. Eseguire la stessa operazione con Impacket in parallelo rimuove l'ambiente dall'equazione:
Questo singolo passo di triage fa risparmiare molti scambi di messaggi, quindi per favore non saltarlo.
-debug e cattura l'output completocorp.internal → example.local
e dc01.corp.internal → dc01.example.local va bene - mantieni la
struttura dei dati, ma non i valori identificativi. In caso di dubbio,
oscura tutto.Apri una issue su GitHub descrivendo il caso d'uso e l'equivalente Impacket (se esiste). Se la funzionalità è nella lista "Funzionalità Mancanti" sopra, menziona quale - ci aiuta a dare priorità.
Le PR sono benvenute. Prima di aprirne una:
go build ./..., go vet ./..., gofmt -l . e go test ./...
e assicurati che passino tutti senza erroriGli attori malevoli si stanno allontanando da Python. Il tooling compilato in Go e Rust (Sliver, BRC4, Geacon e loader su misura) sta progressivamente sostituendo Impacket nelle intrusioni nel mondo reale. La maggior parte del tooling difensivo e della logica di rilevamento è stata costruita attorno al comportamento di rete basato su Python di Impacket, e quella copertura si sta erodendo man mano che l'ecosistema degli attaccanti si sposta verso linguaggi compilati.
gopacket esiste in parte per aiutare la comunità della sicurezza a stare al passo con questo cambiamento. Fornendo un'implementazione Go open-source e leggibile degli stessi protocolli e tecniche, i difensori e gli ingegneri del rilevamento possono:
Il divario tra il tooling degli attaccanti e la visibilità dei difensori è più ampio quando il nuovo tooling rimane privato. Rilasciare gopacket come open source restringe quel divario.
KRB5CCNAME non è impostato, gli strumenti cercheranno <username>.ccache nella directory corrente-proxy (vedi Supporto Proxy)Rilasciato sotto la Apache License 2.0.
gopacket è una reimplementazione pulita in Go di Impacket; vedi NOTICE per i riconoscimenti completi di terze parti.
| 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) |
| 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 |
| 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) |
| Strumento | Descrizione |
|---|
| addcomputer | Crea/modifica/elimina account macchina (SAMR + LDAP) |
| rbcd | Manipolazione di Resource-Based Constrained Delegation |
| dacledit | Legge/scrive DACL sugli oggetti AD |
| owneredit | Legge/modifica la proprietà degli oggetti |
| samedit | Spoofing del nome account SAM (CVE-2021-42278/42287) |
| badsuccessor | BadSuccessor / escalation tramite backup operator |
| changepasswd | Cambia/reimposta password via SAMR e LDAP |
| Strumento | Descrizione |
|---|
| smbclient | Client SMB interattivo (condivisioni, ls, get, put, ecc.) |
| smbserver | Server SMB per la condivisione di file |
| attrib | Interroga/modifica gli attributi dei file via SMB |
| filetime | Interroga/modifica i timestamp dei file via SMB |
| services | Gestione remota dei servizi via SVCCTL |
| reg | Operazioni remote sul registro via WINREG |
| Get-GPPPassword | Estrae le password di Group Policy Preferences da SYSVOL |
| karmaSMB | Server SMB rogue per la cattura di hash |
| Strumento | Descrizione |
|---|
| ntfs-read | Parser offline di filesystem NTFS |
| ping / ping6 | Ping ICMP |
| sniff / sniffer | Cattura di pacchetti di rete |
| split | Divide file di grandi dimensioni |
| Flag | Descrizione |
|---|
-hashes LMHASH:NTHASH | Autenticazione con hash NTLM (l'hash LM può essere vuoto) |
-k | Usa l'autenticazione Kerberos |
-no-pass | Non richiedere la password (da usare con -k o -hashes) |
-dc-ip IP | Indirizzo IP del domain controller |
-target-ip IP | Indirizzo IP del target (quando si usa l'hostname per Kerberos) |
-port PORT | Porta del target (i default variano per strumento) |
-proxy URL | Instrada il TCP in uscita attraverso un proxy SOCKS5 (es. socks5h://127.0.0.1:1080). Le funzionalità UDP sono disabilitate. |
-debug | Abilita l'output di debug |
| Pacchetto | Descrizione |
|---|
| smb | Client SMB2/3 con autenticazione NTLM e Kerberos |
| ldap | Client LDAP con bind NTLM/Kerberos |
| dcerpc | Client DCE/RPC + 20 implementazioni di servizi (DRSUAPI, SAMR, SVCCTL, LSARPC, WINREG, NETLOGON, DCOM, TSCH, EPMAPPER, ecc.) |
| kerberos | Client Kerberos, forgiatura di ticket (golden/silver), S4U2Self/S4U2Proxy |
| ntlm | Protocollo di autenticazione NTLM |
| relay | Framework di NTLM relay (server, client, attacchi, SOCKS) |
| tds | Protocollo TDS di SQL Server |
| ese | Parser di Extensible Storage Engine |
| registry | Parser di hive del registro Windows |
| ntfs | Parser di filesystem NTFS |
| security | Security descriptor, ACL, SID |
| dpapi | Strutture DPAPI |
| mqtt | Client del protocollo MQTT |
| session | Parsing di target/credenziali (domain/user:pass@host) |
| flags | Framework unificato di flag CLI |