Un port completo en Go de Impacket: 63 herramientas CLI y 24 bibliotecas para ataques a protocolos de Windows y Active Directory, compilado en un único binario sin dependencias.
Por Jacob Paullus (@psycep_)
Una implementación completa en Go de Impacket - 63 herramientas y 24 paquetes de biblioteca para la interacción con protocolos de red de Windows, enumeración de Active Directory y ejecución de ataques. Construido como un framework nativo de Go para que puedas compilar una vez y ejecutar en cualquier lugar sin dependencias de Python.
Versión Beta - Altamente Experimental. gopacket está en desarrollo activo. Las herramientas principales han sido probadas contra entornos de laboratorio de Active Directory, pero se esperan casos límite y peculiaridades de protocolo. Si algo no funciona, por favor prueba la misma operación con Impacket en paralelo e incluye ambas salidas en tu informe de error. Esto nos ayuda a identificar rápidamente si es un problema específico de gopacket o una limitación de protocolo compartida.
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 compilación predeterminada (--target native) requiere Go 1.24.13+, GCC y los encabezados de desarrollo de libpcap (apt install build-essential libpcap-dev en Debian/Ubuntu/Kali, yum install gcc libpcap-devel en RHEL/CentOS, o brew install libpcap en macOS). Los objetivos portable y windows solo necesitan el toolchain de Go; sniff y split se convierten en stubs en esas compilaciones porque requieren libpcap. Consulta Soporte de Plataformas para la matriz completa.
gopacket compila en Linux, macOS y Windows. El conjunto de herramientas funcionales y las rutas de proxy disponibles dependen de los flags de compilación:
| Compilación | Herramientas disponibles | Proxy |
|---|---|---|
| Linux / macOS con cgo (predeterminado) | Las 63 | proxychains (LD_PRELOAD) y/o -proxy SOCKS5 |
Linux con CGO_ENABLED=0 | 61 (sniff, split se convierten en stubs) | solo -proxy (proxychains necesita el hook de libc) |
Windows (GOOS=windows CGO_ENABLED=0) | 60 (stubs de sniff, split, sniffer) | solo -proxy (no hay LD_PRELOAD en Windows) |
sniff y split dependen de libpcap a través de cgo; sniffer depende de sockets raw de Unix. Cuando una herramienta no se puede compilar para el objetivo, gopacket sustituye un stub que imprime un mensaje claro y sale con código 1, de modo que go build ./... siempre tiene éxito y el diseño de instalación es consistente entre plataformas.
Para desinstalar:
./install.sh --uninstall
gopacket soporta dos rutas de proxy independientes. También se pueden encadenar.
Todas las herramientas de gopacket funcionan a través de proxychains. Los binarios de Go normalmente omiten proxychains porque el runtime de Go maneja DNS y redes internamente, saltándose los hooks de LD_PRELOAD en los que se basa proxychains. gopacket soluciona esto enlazando contra la biblioteca C del sistema para operaciones de red, permitiendo que proxychains intercepte las conexiones normalmente.
proxychains gopacket-secretsdump 'domain/user:password@target'
proxychains gopacket-smbclient -k -no-pass 'domain/[email protected]'
-proxy)Todas las herramientas aceptan -proxy para enrutar el TCP saliente a través de un servidor SOCKS5 sin depender de LD_PRELOAD. Esquemas aceptados: socks5 y socks5h. Cuando -proxy no está establecido, se consultan las variables de entorno ALL_PROXY / all_proxy como respaldo.
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'
Las funciones dependientes de UDP están deshabilitadas bajo -proxy en lugar de filtrar paquetes silenciosamente (SOCKS5 UDP ASSOCIATE rara vez es soportado por los proxies, y omitir el proxy para UDP revelaría la IP de origen real del operador). Las funciones afectadas y sus soluciones alternativas están documentadas en KNOWN_ISSUES.md.
Encadenamiento: -proxy es compatible con proxychains. La conexión TCP al propio proxy SOCKS5 todavía pasa por connect() de libc, por lo que proxychains → gopacket → -proxy → target funciona para escenarios de enrutamiento anidado.
Consulta la Guía para Desarrolladores de la Biblioteca para documentación completa de la API, ejemplos de código y descripción general de la arquitectura para construir herramientas personalizadas sobre los 24 paquetes de protocolo de gopacket.
| Herramienta | Descripción |
|---|---|
| psexec | Ejecución remota de comandos mediante creación de servicio SMB |
| smbexec | Ejecución remota de comandos vía SMB (más sigiloso que psexec) |
| wmiexec | Ejecución remota de comandos vía WMI |
| dcomexec | Ejecución remota de comandos vía DCOM |
| atexec | Ejecución remota de comandos vía Task Scheduler |
| Herramienta | Descripción |
|---|---|
| secretsdump | Extracción de SAM/LSA/NTDS.dit y DCSync (remoto + offline) |
| dpapi | Extracción de clave de respaldo DPAPI |
| esentutl | Parser offline de base de datos ESE (NTDS.dit) |
| registry-read | Parser offline de hive del registro de Windows |
| Herramienta | Descripción |
|---|---|
| getTGT | Solicitar un TGT con contraseña, hash o clave AES |
| getST | Solicitar un ticket de servicio con S4U2Self/S4U2Proxy |
| GetUserSPNs | Kerberoasting - encontrar y solicitar SPNs |
| GetNPUsers | AS-REP roasting - encontrar cuentas sin pre-autenticación |
| ticketer | Falsificación de tickets golden/silver |
| ticketConverter | Convertir entre formatos ccache y kirbi |
| describeTicket | Parsear y descifrar tickets Kerberos |
| getPac | Solicitar y parsear información del PAC |
| keylistattack | Ataque KERB-KEY-LIST-REQ (RODC) |
| raiseChild | Escalada de dominio hijo a padre mediante golden ticket |