Um port completo em Go do Impacket - 63 ferramentas CLI e 24 bibliotecas para ataques a protocolos Windows e Active Directory, compilado em um único binário sem dependências.
Por Jacob Paullus (@psycep_)
Uma implementação completa em Go do Impacket - 63 ferramentas e 24 pacotes de biblioteca para interação com protocolos de rede Windows, enumeração de Active Directory e execução de ataques. Construído como um framework nativo em Go para que você possa compilar uma vez e executar em qualquer lugar sem dependências de Python.
Versão Beta - Altamente Experimental. O gopacket está em desenvolvimento ativo. As ferramentas principais foram testadas em ambientes de laboratório de Active Directory, mas casos extremos e peculiaridades de protocolo são esperados. Se algo não estiver funcionando, teste a mesma operação com o Impacket lado a lado e inclua ambas as saídas no seu relatório de bug. Isso nos ajuda a identificar rapidamente se é um problema específico do gopacket ou uma limitação de protocolo compartilhada.
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
A compilação padrão (--target native) requer Go 1.24.13+, GCC e cabeçalhos de desenvolvimento do libpcap (apt install build-essential libpcap-dev no Debian/Ubuntu/Kali, yum install gcc libpcap-devel no RHEL/CentOS, ou brew install libpcap no macOS). Os alvos portable e windows precisam apenas do toolchain Go; sniff e split tornam-se stubs nessas compilações porque requerem libpcap. Consulte Suporte de Plataforma para a matriz completa.
O gopacket compila em Linux, macOS e Windows. O conjunto de ferramentas funcionais e os caminhos de proxy disponíveis dependem das flags de compilação:
| Build | Ferramentas disponíveis | Proxy |
|---|---|---|
| Linux / macOS com cgo (padrão) | Todas as 63 | proxychains (LD_PRELOAD) e/ou -proxy SOCKS5 |
Linux com CGO_ENABLED=0 | 61 (sniff, split tornam-se stubs) | Apenas -proxy (proxychains precisa do hook libc) |
Windows (GOOS=windows CGO_ENABLED=0) | 60 (stubs de sniff, split, sniffer) | Apenas -proxy (sem LD_PRELOAD no Windows) |
sniff e split dependem do libpcap via cgo; sniffer depende de sockets raw do Unix. Quando uma ferramenta não pode ser compilada para o alvo, o gopacket substitui por um stub que imprime uma mensagem clara e sai com código 1, então go build ./... sempre funciona e o layout de instalação é consistente entre plataformas.
Para desinstalar:
./install.sh --uninstall
O gopacket suporta dois caminhos de proxy independentes. Eles também podem ser encadeados.
Todas as ferramentas do gopacket funcionam através do proxychains. Binários Go normalmente ignoram o proxychains porque o runtime do Go lida com DNS e rede internamente, pulando os hooks LD_PRELOAD dos quais o proxychains depende. O gopacket contorna isso vinculando-se à biblioteca C do sistema para operações de rede, permitindo que o proxychains intercepte conexões normalmente.
proxychains gopacket-secretsdump 'domain/user:password@target'
proxychains gopacket-smbclient -k -no-pass 'domain/[email protected]'
-proxy)Todas as ferramentas aceitam -proxy para rotear TCP de saída através de um servidor SOCKS5 sem depender de LD_PRELOAD. Esquemas aceitos: socks5 e socks5h. Quando -proxy não está definido, as variáveis de ambiente ALL_PROXY / all_proxy são consultadas como 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'
Recursos dependentes de UDP são desabilitados sob -proxy em vez de vazar pacotes silenciosamente (SOCKS5 UDP ASSOCIATE raramente é suportado por proxies, e contornar o proxy para UDP revelaria o IP de origem real do operador). Recursos afetados e suas soluções alternativas estão documentados em KNOWN_ISSUES.md.
Encadeamento: -proxy é compatível com proxychains. A conexão TCP com o próprio proxy SOCKS5 ainda passa pelo connect() da libc, então proxychains → gopacket → -proxy → target funciona para cenários de roteamento aninhado.
Consulte o Guia do Desenvolvedor de Biblioteca para documentação completa da API, exemplos de código e visão geral da arquitetura para construir ferramentas personalizadas sobre os 24 pacotes de protocolo do gopacket.
| Ferramenta | Descrição |
|---|---|
| psexec | Execução remota de comandos via criação de serviço SMB |
| smbexec | Execução remota de comandos via SMB (mais furtivo que psexec) |
| wmiexec | Execução remota de comandos via WMI |
| dcomexec | Execução remota de comandos via DCOM |
| atexec | Execução remota de comandos via Agendador de Tarefas |
| Ferramenta | Descrição |
|---|---|
| secretsdump | Extração de SAM/LSA/NTDS.dit e DCSync (remoto + offline) |
| dpapi | Extração de chave de backup DPAPI |
| esentutl | Parser offline de banco de dados ESE (NTDS.dit) |
| registry-read | Parser offline de hive do registro do Windows |
| Ferramenta | Descrição |
|---|---|
| getTGT | Solicitar um TGT com senha, hash ou chave AES |
| getST | Solicitar um ticket de serviço com S4U2Self/S4U2Proxy |
| GetUserSPNs | Kerberoasting - encontrar e solicitar SPNs |
| GetNPUsers | AS-REP roasting - encontrar contas sem pré-autenticação |
| ticketer | Forja de tickets golden/silver |
| ticketConverter | Converter entre formatos ccache e kirbi |
| describeTicket | Analisar e descriptografar tickets Kerberos |
| getPac | Solicitar e analisar informações do PAC |
| keylistattack | Ataque KERB-KEY-LIST-REQ (RODC) |
| raiseChild | Escalação de domínio filho para pai via golden ticket |
| Ferramenta | Descrição |
|---|---|
| GetADUsers | Enumerar usuários do domínio via LDAP |
| GetADComputers | Enumerar computadores do domínio via LDAP |
| GetLAPSPassword | Ler senhas LAPS via LDAP |
| findDelegation | Encontrar configurações de delegação |
| lookupsid | Força bruta de SID via LSARPC |
| samrdump | Enumerar usuários via SAMR |
| rpcdump | Despejar endpoints RPC via epmapper |
| rpcmap | Escanear interfaces RPC acessíveis |
| net | Enumeração de usuários/grupos/computadores via SAMR/LSARPC |
| netview | Enumerar sessões, compartilhamentos e usuários conectados |
| CheckLDAPStatus | Verificar requisitos de assinatura LDAP e channel binding |
| DumpNTLMInfo | Despejar informações de autenticação NTLM da negociação SMB |
| getArch | Detectar arquitetura do SO remoto via RPC |
| machine_role | Detectar função da máquina (DC, servidor, estação de trabalho) |