VulnNet:Roasted

Dificultad: easy - OS: Windows

¯\_( ͡° ͜ʖ ͡°)_/¯ Machine info

El desafío "VulnNet: Roasted" de TryHackMe se centra en la explotación de vulnerabilidades comunes en entornos de Active Directory (AD), proporcionando un entorno controlado para practicar técnicas de post-explotación y escalamiento de privilegios. La máquina simula un controlador de dominio Windows con servicios típicos como Kerberos, LDAP y SMB expuestos, permitiendo a los participantes realizar una enumeración inicial para identificar usuarios y servicios disponibles. El acceso anónimo a ciertos recursos compartidos de SMB facilita la recopilación de información crítica para las etapas posteriores del ataque

La progresión del ataque se basa en la explotación de debilidades en la configuración de Kerberos. Inicialmente se realiza un reconocimiento de los recursos expuestos en smb (users harvesting), para luego realizar un ataque de AS-REP Roasting, aprovechando cuentas de usuario que no requieren pre autenticación, lo que permite obtener hashes que pueden ser descifrados para revelar credenciales válidas. Con estas credenciales, se ejecuta un ataque de Kerberoasting para obtener hashes de tickets de servicio (TGS), los cuales, una vez descifrados, proporcionan acceso a cuentas con mayores privilegios

Finalmente, el desafío culmina con la obtención de acceso administrativo completo mediante la explotación de un script con credenciales embebidas, lo que permite realizar un ataque de DCSync implementando la tool impacket-secretsdump. Este ataque simula el comportamiento de un controlador de dominio legítimo, solicitando hashes de contraseñas de otros usuarios, incluido el administrador del dominio.

Enumeración de puertos/servicios

┌──(root㉿kali)-[/home/kali/Documents/THM/VULNETROASTED]
└─# nmap -sCV --open -T4 -v -n 10.10.118.220
📌 Parámetros
  • sCV:

    • -sCEjecuta scripts de detección predeterminados → Usa los scripts de nmap ubicados en /usr/share/nmap/scripts/, los cuales buscan información adicional en los puertos abiertos.

    • -sVDetección de versiones → Intenta identificar el software y su versión en los puertos abiertos.

  • -nNo resuelve nombres de dominio (reduce el tiempo del escaneo).

  • --openMuestra solo puertos abiertos → Filtra la salida para no mostrar puertos cerrados o filtrados.

  • -T4Ajusta la velocidad del escaneo → T4 es un nivel "agresivo" que acelera el escaneo, útil en redes rápidas.

  • -vModo verbose → Muestra más detalles sobre el progreso del escaneo.

Resultado:

PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-06-05 21:50:27Z)
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: vulnnet-rst.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: vulnnet-rst.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: WIN-2BO8M1OE1M1; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-06-05T21:50:44
|_  start_date: N/A
|_clock-skew: -9m13s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required

En síntesis:

Este escaneo revela un entorno típico de Active Directory, con múltiples servicios esenciales expuestos. El puerto 88 (Kerberos) permite realizar ataques de AS-REP Roasting si hay cuentas sin pre autenticación habilitada, y posteriormente Kerberoasting para obtener hashes de servicios Kerberos. La presencia de LDAP en los puertos 389 y 3268 permite enumerar usuarios y objetos del dominio, facilitando la obtención de nombres de cuenta válidos. Además, el puerto 445 (SMB) permite acceso a recursos compartidos, crucial para obtener archivos de configuración o scripts con credenciales incrustadas. Finalmente, el servicio en el puerto 5985 (WinRM) puede ser útil en etapas posteriores si se obtienen credenciales válidas, permitiendo ejecución remota de comandos. Otros elementos que nos arroja nmap en este escáner son:

  • Diferencia horaria del servidor Kerberos: El script smb2-time muestra una discrepancia de tiempo entre el servidor y mi kali (clock-skew: -9m13s). Esta diferencia es crítica cuando se interactúa con servicios como Kerberos, que dependen de la sincronización horaria. Una diferencia mayor a 5 minutos puede provocar errores de autenticación, por lo que nos conviene ajustar el reloj del sistema antes de continuar con el CTF.

  • Nombres de dominio para agregar al archivo /etc/hosts: El escaneo revela el dominio Active Directory vulnnet-rst.local Además, el host identificado es WIN-2BO8M1OE1M1. Para asegurar la correcta resolución de nombres en herramientas como rpcclient, smbclient o scripts de enumeración LDAP, es necesario mapear la ip y el dominio al archivo /etc/hosts

Todo esto lo podemos configurar con los siguientes comandos:

Enumeración de recursos smb con usuario anónimo

Como primer paso vamos a probar la conexión del usuario guest en el smb para ver si podemos acceder y enumerar algunos recursos de forma anónima usando nxc

El resultado nos arrojó varias cosas interesantes:

  • Tenemos permisos de lectura sobre el recurso IPC$, este recurso es clave porque nos permite enumerar más objetos del dominio con herramientas como impacket-lookupsid

  • Existen dos directorios a los cuales podemos acceder: VulnNet-Business-Anonymous y VulnNet-Enterprise-Anonymous

Entonces como primer paso vamos a intentar extraer usuarios con impacket-lookupsid, para estos casos desarrolle el siguiente script en bash que implementa lookupsid pero también nos parcea los usuarios y genera una lista para usar por ejemplo en un Kerberoasting. El script se encuentra en mi repositorio: lookupsid_enum.sh

Ahora vamos a usar smbclient para ingresar a los directorios de smb que enumeramos anteriormente y continuar buscando usuarios o credenciales expuestas

Si leemos los archivos que descargamos del smb, vamos a encontrar los nombres completos de los usuarios que obtuvimos con lookupsid, esto nos confirma que la lista tiene efectivamente usuarios del dominio, por lo tanto podemos implementar un ataque de tipo AS-REP Roasting

AS-REP Roasting attack

En este ataque se explota una configuración insegura de ciertas cuentas en Active Directory que tienen habilitado el atributo DONT_REQUIRE_PREAUTH. Este atributo indica que dichas cuentas no requieren pre autenticación Kerberos, una característica que normalmente protege contra ataques de recolección de credenciales. Al no exigir pre autenticación, el controlador de dominio puede ser inducido a enviar directamente un mensaje AS-REP cifrado con la clave derivada de la contraseña del usuario, sin validar previamente que el cliente es legítimo. Utilizando la herramienta GetNPUsers.py de la suite Impacket, es posible automatizar la identificación de estas cuentas vulnerables y solicitarles un AS-REP para luego crackearlo offline con John the Ripper y obtener la credencial del usuario. Para este escenario voy a mostrar dos opciones de obtener ese TGT.

Opción 1: impacket-GetNPUsers

Opcion 2: kerbrute

TGT cracking con John

Una vez que tenemos el hash lo crackeamos con John The Ripper

Nota: en un ataque AS-REP Roasting no se craquea el TGT completo. Lo que se craquea es una parte del mensaje AS-REP (respuesta del Domain Controller) que contiene un bloque cifrado con la clave derivada de la contraseña del usuario. Si tenes dudas sobre el funcionamiento de este servicio te recomiendo que leas el siguiente artículo:

Una vez que logramos obtener un nuevo par de credenciales lo más recomendable es testear a que servicios nos podemos conectar/logear, de esta forma tendremos una idea de por donde continuar el ataque/intrusión. Para automatizar esta tarea diseñe un script en bash que lo podes obtener del siguiente repositorio: service_validation

Enumeración de recursos smb

Nos vuelve a confirmar el acceso al smb, asique vamos a volver a usar nxc nuevamente para ver si tenemos acceso hacia algún nuevo recurso:

Credential Harvesting

El permiso de lectura del directorio SYSVOL es clave para la recolección de credenciales expuestas, por ejemplo podríamos encontrar algo como:

  • Archivos tipo Groups.xml que definen usuarios y contraseñas en texto claro o cifrado débil → esto es lo que en pentesting se conoce como GPP Passwords (Group Policy Preferences Passwords).

  • Scripts de inicio de sesión (logon scripts), por ejemplo .bat, .cmd, .ps1, .vbs con contraseñas en texto plano, comandos net use con credenciales, variables de entorno que revelan información, etc.

En cualquier caso lo que vamos a hacer primero es usar el módulo spider_plus de crackmapexec para descargar una enumeración de todos esos archivos que se encuentran en SYSVOL y luego buscar alguno que nos llame la atención como el Groups.xml o algun password

📌¿Qué son los recursos que enumeramos en SYSVOL?

DfsrPrivate

  • Este es un directorio usado por DFS Replication (Distributed File System Replication).

  • Se trata de metadatos internos que permiten replicar SYSVOL entre los controladores de dominio.

  • No contiene información de configuración útil ni contraseñas — suele estar vacío o contener control de versiones.

Policies

  • Este es el corazón de las Group Policy Objects (GPO).

  • Aquí se encuentran definidas las políticas de configuración que el dominio aplica a usuarios y equipos.

  • La estructura típica es: Policies/{GUID}/Machine y Policies/{GUID}/User.

  • En GPO antiguas o mal configuradas, es posible encontrar archivos tipo Groups.xml que definen usuarios y contraseñas en texto claro o cifrado débil → esto es lo que en pentesting se conoce como GPP Passwords (Group Policy Preferences Passwords).

scripts

  • Este es un clásico: es el lugar donde se colocan scripts de inicio de sesión (logon scripts), por ejemplo .bat, .cmd, .ps1.

  • Es muy común que en CTF como VulnNet:Roasted, los administradores ficticios hayan dejado scripts inseguros con:

    • Contraseñas en texto plano.

    • Comandos net use con credenciales.

    • Variables de entorno que revelan información.

No encontramos el Groups.xml pero si hay un ResetPassword.vbs asique vamos a ingresar al smb con smbclient y descargar este recurso para analizarlo localmente.

Remote Code Execution con EvilWinRM

Con estas nuevas credenciales vamos a testear nuevamente a que servicios nos podemos conectar/logear y buscar el proximo vector de ataque.

Tenemos credenciales válidas para conectarnos a WinRM, asique vamos a usar EvilWinRM y buscar nuestra flag

Kerberoasting con impacket-GetUserSPNs

Está flag pertenece al usuario enterprise-core-vn, pero no tenemos su contraseña, asique vamos a intentar obtenerla a través de un Kerberoasting con impacket-GetUserSPNs y luego vamos a crackear ese hash con John The Ripper

Volviendo a la sesión de EvilWinRM del usuario a-whitehat, si leemos su información completa sobre el contexto de seguridad vamos a encontrar dos elementos críticos: en la sección GROUP INFORMATION el usuario figura dentro de los grupos BUILTIN\Administrators y Domain Admins

¿Que son estos grupos?

BUILTIN\Administrators

Es el grupo Administrators local de la máquina Windows.

  • BUILTIN es un contenedor especial que representa los grupos locales predefinidos de Windows.

  • Administrators es el grupo que tiene control total sobre el sistema local.

  • Los miembros de BUILTIN\Administrators pueden:

    • Instalar software.

    • Administrar usuarios y permisos locales.

    • Cambiar configuraciones del sistema.

    • Leer cualquier archivo en el disco local.

Si un usuario pertenece a este grupo, tiene privilegios de administrador local en la máquina.

Este grupo no otorga automáticamente privilegios en el dominio, solo en el equipo específico.

VULNNET-RST\Domain Admins

Este es el grupo Domain Admins en el dominio Active Directory VULNNET-RST.

  • Es un grupo global de AD, no local.

  • Los miembros de Domain Admins tienen:

    • Control total sobre todos los equipos unidos al dominio.

    • Permisos administrativos automáticos en todos los equipos y servidores del dominio.

    • Capacidad de modificar usuarios, GPOs, OU, permisos en Active Directory.

    • Capacidad de acceder a los Controladores de Dominio y realizar ataques como DCSync.

Si un usuario es Domain Admin, puede comprometer todo el dominio fácilmente. Además, por herencia, los Domain Admins suelen ser agregados automáticamente al grupo BUILTIN\Administrators en todos los equipos del dominio → por eso en este caso vemos ambos.

Un usuario que esté en el grupo Domain Admin nos habilita a extraer del DC todos los hashes del dominio mediante un ataque DCSync con impacket-secretsdump

DCSync con Impacket-secretsdump

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.

📌Output de impacket-secretsdump explicado
  1. Local SAM Hashes

Qué es: Hashes de las cuentas locales del sistema Windows.

Contenido:

  • Administrator

  • Guest

  • DefaultAccount

Posiblse ataques:

  • Pass-the-Hash local para comprometer el sistema.

  • Crackeo offline de contraseñas.

Concepto clave: El SAM (Security Account Manager) almacena hashes de contraseñas de cuentas locales. Si el sistema es un DC, estas cuentas son menos críticas; si es un workstation o server standalone, son importantes.

  1. LSA Secrets

Qué es: Secretos almacenados en el LSA (Local Security Authority), incluyendo claves y contraseñas internas.

Contenido:

  • $MACHINE.ACC: claves de la cuenta de máquina (Win-2BO8M1OE1M1$), incluyendo AES, DES y contraseña en hexadecimal.

Posible ataque:

  • Pass-the-Hash o uso de la cuenta de máquina para persistencia.

  • Movimiento lateral autenticandose como la máquina en otros sistemas.

Concepto clave: Cada equipo en un dominio tiene una cuenta de máquina con clave propia. Estas claves son usadas en autenticación Kerberos.

  1. DPAPI_SYSTEM

Qué es: Claves maestras de DPAPI (Data Protection API), usada para cifrar datos como credenciales guardadas en navegadores, certificados, etc.

Contenido:

  • dpapi_machinekey

  • dpapi_userkey

Posible ataque:

  • Desencriptar secretos protegidos con DPAPI, como contraseñas WiFi, certificados personales, claves de navegador.

Concepto clave: DPAPI protege datos en Windows. Si obtenés estas claves, podés desencriptar todos los datos DPAPI de la máquina.

4. NL$KM

Qué es: Clave secreta usada en el proceso de autenticación de usuarios de dominio en modo cacheado (Cached Credentials).

Posible ataque:

  • Forzar el uso de contraseñas cacheadas o atacar el proceso de autenticación offline.

Concepto clave: Cuando un usuario se loguea en un sistema fuera del dominio (por ejemplo, laptop desconectada), su hash cacheado se usa para autenticarlo. Con esta clave se puede atacar ese mecanismo.

5. Dumping Domain Credentials (DRSUAPI method)

Qué es: Dump completo de los hashes de todas las cuentas del dominio, extraídos de NTDS.DIT mediante el protocolo DRSUAPI (DCSync).

Contenido:

  • Administrator → crítico

  • krbtgt → crítico

  • Enterprise-core-vn

  • a-whitehat

  • t-skid

  • j-goldenhand

  • j-leet

  • cuenta de máquina (WIN-2BO8M1OE1M1$)

Posible ataque:

  • Pass-the-Hash → moverse lateralmente o tomar control total.

  • Golden Ticket → persistencia total en el dominio (usando hash de krbtgt).

  • Crackeo offline de contraseñas de usuarios de dominio.

Concepto clave: El ataque DCSync simula ser un DC y solicita la replicación de credenciales. Es el ataque más crítico: obtener krbtgt + Administrator implica control absoluto.

6. Kerberos Keys

Qué es: Claves Kerberos (AES, DES) de las cuentas listadas. Se usan en la generación y validación de tickets Kerberos.

Contenido:

  • Administrator

  • krbtgt

  • enterprise-core-vn

  • a-whitehat

  • t-skid

  • j-goldenhand

  • j-leet

  • cuenta de máquina (WIN-2BO8M1OE1M1$)

Posible ataque:

  • Golden Ticket → forjar tickets Kerberos válidos para cualquier usuario.

  • Pass-the-Ticket → inyectar tickets Kerberos en una sesión y autenticarse como otro usuario.

Concepto clave: El hash de krbtgt permite generar un Golden Ticket que da acceso ilimitado al dominio. Las claves Kerberos de usuarios pueden ser usadas para impersonarlos mediante Pass-the-Ticket.

Conceptos clave adicionales:

  • NTDS.DIT: Base de datos que contiene toda la información del dominio, incluyendo hashes de cuentas.

  • DCSync: Técnica que explota permisos de replicación para obtener los hashes de las cuentas de dominio.

  • Golden Ticket: Ticket TGT Kerberos falsificado que permite acceso persistente y oculto al dominio.

  • Pass-the-Hash: Técnica que permite autenticarse usando el hash de la contraseña sin necesidad de conocer la contraseña en texto claro.

  • Pass-the-Ticket: Técnica que permite autenticarse usando un ticket Kerberos legítimo o falsificado.

Pass the hash con EvilWinRM

Una vez que tenemos el hash del usuario Administrator podemos usarlo para conectarnos con EvilWinRM y leer la última flag