Sauna
Dificultad: Easy - OS: Windows
Enumeración de puertos/servicios
┌──(root㉿kali)-[/home/kali/Documents/HTB]
└─# nmap -sCV --open -T4 -v -n 10.10.10.175Resultado:
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
|_ Potentially risky methods: TRACE
|_http-title: Egotistical Bank :: Home
|_http-server-header: Microsoft-IIS/10.0
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-05-11 02:58:19Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: Host: SAUNA; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2025-05-11T02:58:34
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
|_clock-skew: 6h51m03sEn síntesis:
Primero vamos a extraer el nombre de dominio para agregarlo al /etc/hosts
Inspección del sitio Web
Si recorremos la página web nos vamos a encontrar con algunos nombres de usuarios que podemos aprovechar para hacer un diccionario e intentar un ataque con Kerbrute para hallar algún nombre válido en el dominio.


Para hacer la lista voy a usar la siguiente tool AD-Username-Generator. Primero paso los nombres de los usuarios a una lista y esa lista se la pasó al script para que me haga el diccionario
Una vez generada una lista de posibles nombres de usuario, una de las herramientas más eficientes para verificar su validez en un entorno Kerberos es Kerbrute. Esta tool nos permite realizar una enumeración activa de cuentas contra un Controlador de Dominio mediante el protocolo Kerberos, sin necesidad de conocer previamente una contraseña válida. Su funcionamiento se basa en el envío de solicitudes de Ticket Granting Ticket (TGT) al KDC (Key Distribution Center), en las cuales no se incluye ninguna credencial. Esto desencadena una respuesta diferenciada por parte del servidor, dependiendo de si el nombre de usuario existe o no en el dominio.
Cuando un usuario no existe, el KDC responde con un error específico del protocolo (KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN), indicando que el principal es desconocido. En cambio, si el usuario sí existe pero requiere pre autenticación, el KDC devuelve un error distinto (KRB5KDC_ERR_PREAUTH_REQUIRED). Esta distinción permite a Kerbrute identificar cuáles entradas en la lista corresponden a usuarios válidos en el dominio. Adicionalmente, si una cuenta está configurada sin la exigencia de pre autenticación —es decir, tiene deshabilitada la opción DONT_REQ_PREAUTH—, el KDC responderá directamente con un ticket cifrado que puede ser utilizado para llevar a cabo un ataque de tipo ASREPRoasting, donde el atacante puede intentar romper el hash del ticket fuera de línea.
ASREPRoasting attack
Una vez identificada una cuenta de usuario con la bandera DONT_REQ_PREAUTH habilitada —como es el caso de fsmith en este escenario—, es posible explotar una característica del protocolo Kerberos mediante un ataque conocido como ASREPRoasting. En este tipo de ataques, se solicita un Ticket Granting Ticket (TGT) al Key Distribution Center (KDC) sin necesidad de proporcionar una contraseña válida. El protocolo permite esta operación siempre que la cuenta en cuestión no requiera preautenticación. El KDC responde con un mensaje KRB_AS_REP, el cual contiene un TGT cifrado junto con un paquete adicional que incluye datos como la clave de sesión, la expiración del ticket y un nonce generado por el cliente. Este paquete está cifrado con una clave derivada directamente de la contraseña del usuario, y es este componente el que puede ser extraído y sometido a un ataque de fuerza bruta offline con herramientas como Hashcat o JohnthreRipper.
Este proceso de obtención del AS-REP cifrado y su posterior intento de descifrado con diccionarios se conoce coloquialmente como TGT Cracking. A pesar del nombre, el objetivo no es romper el TGT en sí, que está cifrado con la clave del servicio krbtgt, sino descifrar el bloque cifrado con la clave derivada de la contraseña del usuario objetivo. Esto permite descubrir contraseñas débiles sin interacción adicional con el sistema remoto, lo que representa un vector silencioso y eficaz dentro de una infraestructura de Active Directory mal configurada. Para aprender más técnicas como estas te recomiendo que leas los siguientes articulos que estan en este blog: Attacktive Directory (THM) y Attacking Kerberos (THM)
Para explotar esta técnica vamos a usar el script GetNPUsers de la suite de impacket. Este comando interactúa directamente con el AS del KDC, solicitando un AS_REP para fsmith. Como fsmith no requiere preautenticación, el KDC entrega el paquete con el bloque cifrado que se puede atacar. El hash extraído representa ese bloque, y es el que luego se fuerza con Hashcat o John.
TGT Cracking
Llegó el momento de descifrar la contraseña con John the Ripper
Bingo! ( ͡• ͜ʖ ͡•)
Ahora con el script service_validation.sh vamos a ver a qué servicios podemos conectarnos con estas credenciales capturadas
Vamos a aprovechar que podemos conectarnos al servicio WinRM, usando la tool EvilWinRM
System Enumeration con WinPeas.exe
Levantamos un servidor con python para compartir el recurso winPEASx64.exe, desde el directorio en donde se encuentra, y lo descargamos en la sesión del EvilWinRM
DCSync-Attack
Con estas nuevas credenciales vamos a invocar a nuestro amigo Bloodhound para poder ver los privilegios que tiene el usuario svc_loanmgr en el dominio y encontrar un camino para la escalada de privilegios. Si no conoces esta herramienta a continuación te dejo un artículo introductorio para que puedas comprender su uso
Este archivo zip lo pasamos a la gui de bloodhound de la siguiente manera

Ahora podemos usar la opción Find Shortest Paths to Domain Admins para visualizar los nodos del DC

Luego si filtramos por Find Principals with DCSync Rights vamos a ver que nuestro usuario cuenta con privilegios DCSync en el dominio, esto nos permite deducir que podemos implementar un ataque DCSync para obtener los hashes de todas las cuentas del dominio junto con la de los administradores


El ataque DCSync permite a un atacante simular el comportamiento de un controlador de dominio legítimo. Para ello, se emiten peticiones al Domain Controller utilizando las funciones de replicación de Active Directory, como si el atacante necesitara sincronizarse con el resto del dominio. Estas peticiones acceden a la base de datos NTDS.dit, que contiene información crítica sobre los objetos del dominio, incluyendo los hashes NTLM de todas las cuentas: usuarios, administradores, y servicios. Al realizar esta solicitud desde una cuenta con los privilegios adecuados, el controlador de dominio responde con los datos de replicación, sin necesidad de comprometer el servidor físico ni ejecutar código malicioso sobre él. Nota: el nombre del privilegio que otorga la capacidad de ejecutar un ataque DCSync es GetChangesAll, lo que permite replicar la base de datos de Active Directory y extraer hashes de cualquier cuenta.
Para materializar esta técnica, vamos a utilizar la herramienta secretsdump.py de la suite Impacket. Esta utilidad permite extraer de forma remota los hashes del dominio haciendo uso de los privilegios de replicación del usuario comprometido.
Autenticación con Pass-the-Hash
Ahora que tenemos el hash del Administrator vamos a utilizar el script psexec de impacket para conectarnos al DC y capturar las flags ¯\_( ͡° ͜ʖ ͡°)_/¯
Last updated