Certified

Publicado: 02 de Junio de 2025 Autor: Josรฉ Miguel Romero aKa x3m1Sec Dificultad: โญ Medium OS: Windows

๐Ÿ“ Descripciรณn

Certified es una mรกquina Windows de dificultad media que simula un entorno de Active Directory con servicios de certificados (ADCS) implementados. La mรกquina requiere explotar vulnerabilidades en la configuraciรณn de certificados digitales y abusar de permisos de Active Directory para lograr la escalada de privilegios.

El proceso de explotaciรณn involucra el uso de credenciales iniciales proporcionadas, enumeraciรณn exhaustiva de usuarios y servicios, abuso de permisos WriteOwner y GenericWrite en Active Directory, implementaciรณn de ataques Shadow Credentials mediante pywhisker, y finalmente explotaciรณn de la vulnerabilidad ESC9 en plantillas de certificados ADCS para obtener acceso administrativo.

Esta mรกquina es especialmente valiosa para practicar tรฉcnicas de post-explotaciรณn en entornos empresariales reales, donde los servicios de certificados son comunes y las misconfigurations pueden llevar a compromisos completos del dominio.


๐ŸŽฏ Puntos Clave

  • Enumeraciรณn de Active Directory: Uso de herramientas como netexec, impacket y bloodhound para mapear el dominio

  • Abuso de Permisos ACL: Explotaciรณn de WriteOwner y GenericWrite para modificar membresรญas de grupos

  • Shadow Credentials Attack: Implementaciรณn de credenciales sombra usando pywhisker para obtener hashes NTLM

  • ADCS Exploitation: Identificaciรณn y explotaciรณn de la vulnerabilidad ESC9 en plantillas de certificados

  • Certificate Template Abuse: Manipulaciรณn de UPN (User Principal Name) para suplantar identidades

  • Pass-the-Hash: Uso de hashes NTLM para autenticaciรณn sin conocer contraseรฑas en texto plano


๐Ÿ” Informaciรณn de la Mรกquina

Atributo
Valor

IP

10.10.11.41

Dominio

certified.htb

Controlador de Dominio

DC01.certified.htb

Servicios Clave

ADCS, LDAP, SMB, WinRM, Kerberos

Vulnerabilidades

ESC9, Shadow Credentials, ACL Abuse


๐Ÿ”ญ Reconocimiento

๐Ÿ“ Ping para verificaciรณn en base a TTL

๐Ÿ’ก Nota: El TTL cercano a 128 sugiere que probablemente sea una mรกquina Windows.

๐Ÿš€ Escaneo de puertos

๐Ÿ” Enumeraciรณn de servicios

โš ๏ธ Aรฑadimos el siguiente vhost a nuestro fichero /etc/hosts:

๐Ÿ“‹ Anรกlisis de Servicios Detectados

Los puertos abiertos revelan un controlador de dominio Windows con los siguientes servicios clave:

  • Puerto 53 (DNS): Servicio de resoluciรณn de nombres del dominio

  • Puerto 88 (Kerberos): Autenticaciรณn del dominio

  • Puerto 389/636 (LDAP/LDAPS): Directorio activo para consultas

  • Puerto 445 (SMB): Comparticiรณn de archivos y administraciรณn remota

  • Puerto 5985 (WinRM): Administraciรณn remota de Windows

  • Puerto 9389 (.NET Message Framing): Posible servicio ADCS

๐Ÿ”‘ Credenciales Iniciales

Como es comรบn en las pruebas de penetraciรณn de Windows de la vida real, iniciarรก el cuadro de Administrador con las credenciales de la siguiente cuenta:

  • Nombre de usuario: judith.mader

  • Contraseรฑa: judith09


๐ŸŒ Enumeraciรณn de Servicios

๐Ÿ—‚๏ธ 445 SMB - Enumeraciรณn Inicial

Ya que disponemos de credenciales, comenzamos tratando de enumerar recursos compartidos, usuarios etc:

๐Ÿ‘ฅ Enumeraciรณn de Usuarios del Dominio

Creamos una lista con los usuarios obtenidos:

๐ŸŽซ Verificaciรณn AS-Rep Roast

Verificamos si de los usuarios obtenidos hay alguno que tenga la pre-autenticaciรณn de kerberos deshabilitada y podamos obtener un ticket:

โŒ Resultado: Ningรบn usuario vulnerable a AS-Rep Roast

๐ŸŽฏ Verificaciรณn Kerberoasting

Con la credencial de la que disponemos verificamos si hay alguna cuenta sobre la que podamos realizar un ataque de kerberoasting:

Obtenemos un resultado para la cuenta management_svc, no obstante, intentamos crackearlo offline usando hashcat y el diccionario rockyou.txt sin รฉxito:

๐Ÿ’ง Password Spraying

Verificamos si la contraseรฑa de Judith estรก siendo reutilizada por algรบn otro usuario del dominio:

bash

Resultado: Solo Judith usa esta contraseรฑa


๐Ÿฉธ Anรกlisis con BloodHound

Utilizamos bloodhound-python como collector con las credenciales de judith para poder obtener el modelo del dominio y cargar en bloodhound con el fin de analizar posibles vรญas potenciales para ganar acceso.

๐ŸŽฏ Hallazgos Clave en BloodHound

Vemos que Judith tiene permisos "WriteOwner" sobre el grupo Management:

Ademรกs, vemos que cualquiera que pertenezca al grupo Management tiene permisos GenericWrite sobre la cuenta del usuario management_svc por lo que ya tenemos aquรญ una vรญa potencial de acceso:

๐Ÿ“ˆ Cadena de Ataque Identificada

  1. judith.mader โ†’ WriteOwner โ†’ Management Group

  2. Management Group โ†’ GenericWrite โ†’ management_svc

  3. management_svc โ†’ Certificate Service DCOM Access โ†’ ADCS Exploitation


๐Ÿš€ Explotaciรณn - Acceso Inicial

๐Ÿ‘‘ Abusando de WriteOwner

Primero necesitamos hacer que judith pertenezca al grupo Management:

Ahora, usarรฉ RPC para agregar a Judith al grupo de management:

๐Ÿ” Implementando Shadow Credentials

Aquรญ podrรญamos usar targetedKerberoast para tratar de realizar un ataque de kerberoasting sobre la cuenta management_svc y tratar de crackear la contraseรฑa, pero esto ya lo hicimos con otro mรฉtodo anteriormente y vimos que la contraseรฑa no estaba en rockyou.txt

Podemos abusar de las credenciales shadow y obtener un hash de NT usando pywhisker, suponiendo que tengamos el ticket Kerberos (lo cual sรญ tenemos).

Primero, usarรฉ pywhisker para comprobar si management_svc tiene credenciales shadow:

Nos da un error de permisos

Para solucionarlo usamos --action add para agregar un atributo de clave pรบblica (msDS-KeyCredentialLink) al usuario objetivo.

๐ŸŽซ Obteniendo TGT con PKINITtools

Harรฉ exactamente los pasos que nos ha indicado el comando del paso anterior y usarรฉ PKINITtools para obtener el TGT:

Actualizamos el reloj del sistema con el DC:

Ahora ejecutarรฉ el comando proporcionando la informaciรณn del comando anterior:

๐Ÿ”“ Extrayendo Hash NTLM

Exportamos la variable KRB5CCNAME con el ticket, actualizamos de nuevo la hora y usamos la herramienta getnthash.py para obtener el hash NTLM con el que podremos realizar pass the hash:

๐ŸŽŠ Primer Acceso - User Flag

Una vez obtenido el hash realizamos pass the hash usando evil-winrm y ganamos acceso como management_svc y ya podemos obtener la primera flag:

๐Ÿ” Escalada de Privilegios - ADCS Certificate Attack (ESC9)

๐Ÿ“‹ Informaciรณn Inicial

Durante la enumeraciรณn del usuario actual, se descubriรณ que pertenece al grupo Certificate Service DCOM Access, lo cual es clave para esta escalada de privilegios.


๐ŸŽฏ Objetivo

Necesitamos escalar privilegios desde management_svc hasta ca_operator y finalmente obtener acceso como Administrator aprovechando vulnerabilidades en ADCS (Active Directory Certificate Services).


๐Ÿ” Fase 1: Shadow Credentials Attack

Contexto

  • Usuario actual: management_svc

  • Objetivo: ca_operator

  • Privilegio: GenericAll sobre ca_operator

  • Tรฉcnica: Certipy shadow credentials

Comando Ejecutado

Resultado Obtenido

โœ… ร‰xito: Obtenido el hash NTLM de ca_operator


๐Ÿ” Fase 2: Enumeraciรณn de Plantillas Vulnerables

Bรบsqueda de Vulnerabilidades ADCS

Hallazgo Crรญtico

๐Ÿšจ Plantilla Vulnerable Encontrada: Certified Authentication

  • Vulnerabilidad: ESC9

  • Impacto: Permite escalada de privilegios a Administrator


โšก Fase 3: Explotaciรณn ESC9

Paso 1: Modificaciรณn del UPN

Cambiar el UPN de ca_operator a Administrator:

Paso 2: Solicitud de Certificado

Solicitar la plantilla vulnerable como ca_operator:

Paso 3: Restauraciรณn del UPN

Revertir el UPN para evitar detecciรณn:

Paso 4: Autenticaciรณn con Certificado

Obtener hash NTLM del Administrator:

Resultado Final


๐Ÿ† Fase 4: Acceso Final como Administrator

Pass-the-Hash Attack

Verificaciรณn de Acceso

Last updated