Ein vollständiger Go-Port von Impacket – 63 CLI-Tools und 24 Bibliotheken für Angriffe auf Windows- und Active-Directory-Protokolle, kompiliert zu einer einzigen abhängigkeitsfreien Binärdatei.
Von Jacob Paullus (@psycep_)
Eine vollständige Go-Implementierung von Impacket - 63 Tools und 24 Bibliothekspakete für die Interaktion mit Windows-Netzwerkprotokollen, Active-Directory-Enumeration und Angriffsausführung. Entwickelt als natives Go-Framework, sodass du einmal kompilieren und überall ausführen kannst, ohne Python-Abhängigkeiten.
Beta-Release - Hochgradig experimentell. gopacket befindet sich in aktiver Entwicklung. Die Kerntools wurden gegen Active-Directory-Lab-Umgebungen getestet, aber Edge Cases und Protokoll-Eigenheiten sind zu erwarten. Wenn etwas nicht funktioniert, teste bitte dieselbe Operation parallel mit Impacket und füge beide Ausgaben in deinen Bugreport ein. Das hilft uns, schnell zu erkennen, ob es sich um ein gopacket-spezifisches Problem oder eine gemeinsame Protokollbeschränkung handelt.
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
Der Standard-Build (--target native) benötigt Go 1.24.13+, GCC und libpcap-Entwicklungsheader (apt install build-essential libpcap-dev unter Debian/Ubuntu/Kali, yum install gcc libpcap-devel unter RHEL/CentOS oder brew install libpcap unter macOS). Die Targets portable und windows benötigen nur die Go-Toolchain; sniff und split werden in diesen Builds zu Stubs, da sie libpcap erfordern. Siehe Platform Support für die vollständige Matrix.
gopacket lässt sich unter Linux, macOS und Windows bauen. Die Menge der funktionierenden Tools und verfügbaren Proxy-Pfade hängt von den Build-Flags ab:
| Build | Verfügbare Tools | Proxying |
|---|---|---|
| Linux / macOS mit cgo (Standard) | Alle 63 | proxychains (LD_PRELOAD) und/oder -proxy SOCKS5 |
Linux mit CGO_ENABLED=0 | 61 (sniff, split werden zu Stubs) | nur -proxy (proxychains benötigt den libc-Hook) |
Windows (GOOS=windows CGO_ENABLED=0) | 60 (sniff, split, sniffer Stubs) | nur -proxy (kein LD_PRELOAD unter Windows) |
sniff und split hängen über cgo von libpcap ab; sniffer hängt von Unix-Raw-Sockets ab. Wenn ein Tool nicht für das Ziel gebaut werden kann, ersetzt gopacket es durch einen Stub, der eine klare Meldung ausgibt und mit Exit-Code 1 beendet, sodass go build ./... immer erfolgreich ist und das Installationslayout plattformübergreifend konsistent bleibt.
Zum Deinstallieren:
./install.sh --uninstall
gopacket unterstützt zwei unabhängige Proxy-Pfade. Sie können auch verkettet werden.
Alle gopacket-Tools funktionieren durch proxychains. Go-Binaries umgehen proxychains normalerweise, weil Go's Runtime DNS und Netzwerk intern abwickelt und dabei die LD_PRELOAD-Hooks überspringt, auf die proxychains angewiesen ist. gopacket umgeht dies, indem es für Netzwerkoperationen gegen die System-C-Bibliothek linkt, sodass proxychains Verbindungen normal abfangen kann.
proxychains gopacket-secretsdump 'domain/user:password@target'
proxychains gopacket-smbclient -k -no-pass 'domain/[email protected]'
-proxy)Jedes Tool akzeptiert -proxy, um ausgehendes TCP über einen SOCKS5-Server zu routen, ohne auf LD_PRELOAD angewiesen zu sein. Akzeptierte Schemata: socks5 und socks5h. Wenn -proxy nicht gesetzt ist, werden die Umgebungsvariablen ALL_PROXY / all_proxy als Fallback herangezogen.
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'
UDP-abhängige Funktionen sind unter -proxy deaktiviert, statt Pakete stillschweigend durchsickern zu lassen (SOCKS5 UDP ASSOCIATE wird von Proxies selten unterstützt, und das Umgehen des Proxys für UDP würde die echte Quell-IP des Operators preisgeben). Betroffene Funktionen und ihre Workarounds sind in KNOWN_ISSUES.md dokumentiert.
Verkettung: -proxy ist mit proxychains kompatibel. Die TCP-Verbindung zum SOCKS5-Proxy selbst läuft weiterhin über libc connect(), sodass proxychains → gopacket → -proxy → target für verschachtelte Routing-Szenarien funktioniert.
Siehe den Library Developer Guide für vollständige API-Dokumentation, Codebeispiele und einen Architekturüberblick zum Erstellen eigener Tools auf Basis von gopackets 24 Protokollpaketen.
| Tool | Beschreibung |
|---|---|
| psexec | Remote-Befehlsausführung über SMB-Diensterstellung |
| smbexec | Remote-Befehlsausführung über SMB (stealthier als psexec) |
| wmiexec | Remote-Befehlsausführung über WMI |
| dcomexec | Remote-Befehlsausführung über DCOM |
| atexec | Remote-Befehlsausführung über Task Scheduler |
| Tool | Beschreibung |
|---|---|
| secretsdump | SAM/LSA/NTDS.dit-Extraktion und DCSync (remote + offline) |
| dpapi | DPAPI-Backup-Key-Extraktion |
| esentutl | Offline-ESE-Datenbank-Parser (NTDS.dit) |
| registry-read | Offline-Parser für Windows-Registry-Hives |
| Tool | Beschreibung |
|---|---|
| getTGT | Fordert ein TGT mit Passwort, Hash oder AES-Key an |
| getST | Fordert ein Service-Ticket mit S4U2Self/S4U2Proxy an |
| GetUserSPNs | Kerberoasting - SPNs finden und anfordern |
| GetNPUsers | AS-REP-Roasting - Konten ohne Pre-Auth finden |
| ticketer | Golden-/Silver-Ticket-Forging |
| ticketConverter | Konvertierung zwischen ccache- und kirbi-Formaten |
| describeTicket | Kerberos-Tickets parsen und entschlüsseln |
| getPac | PAC-Informationen anfordern und parsen |
| keylistattack | KERB-KEY-LIST-REQ-Angriff (RODC) |
| raiseChild | Child-to-Parent-Domain-Eskalation über Golden Ticket |
| Tool | Beschreibung |
|---|---|
| GetADUsers | Domänenbenutzer über LDAP aufzählen |
| GetADComputers | Domänencomputer über LDAP aufzählen |
| GetLAPSPassword | LAPS-Passwörter über LDAP auslesen |
| findDelegation | Delegationskonfigurationen finden |
| lookupsid | SID-Brute-Forcing über LSARPC |
| samrdump | Benutzer über SAMR aufzählen |
| rpcdump | RPC-Endpunkte über epmapper dumpen |
| rpcmap | Nach zugänglichen RPC-Schnittstellen scannen |
| net | net user/group/computer-Enumeration über SAMR/LSARPC |
| netview | Sitzungen, Shares und angemeldete Benutzer aufzählen |
| CheckLDAPStatus | LDAP-Signing- und Channel-Binding-Anforderungen prüfen |
| DumpNTLMInfo | NTLM-Authentifizierungsinformationen aus SMB-Negotiation dumpen |
| getArch | Remote-OS-Architektur über RPC erkennen |
| machine_role | Maschinenrolle erkennen (DC, Server, Workstation) |