VulnNet:Roasted
Dificultad: easy - OS: Windows
Enumeración de puertos/servicios
┌──(root㉿kali)-[/home/kali/Documents/THM/VULNETROASTED]
└─# nmap -sCV --open -T4 -v -n 10.10.118.220Resultado:
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 requiredEn 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-timemuestra 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 Directoryvulnnet-rst.localAdemás, el host identificado esWIN-2BO8M1OE1M1. Para asegurar la correcta resolución de nombres en herramientas comorpcclient,smbcliento 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-lookupsidExisten dos directorios a los cuales podemos acceder:
VulnNet-Business-AnonymousyVulnNet-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.xmlque 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,.vbscon contraseñas en texto plano, comandosnet usecon 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
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.
BUILTINes un contenedor especial que representa los grupos locales predefinidos de Windows.Administratorses el grupo que tiene control total sobre el sistema local.Los miembros de
BUILTIN\Administratorspueden: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
VULNNET-RST\Domain AdminsEste es el grupo Domain Admins en el dominio Active Directory VULNNET-RST.
Es un grupo global de AD, no local.
Los miembros de
Domain Adminstienen: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.
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