Active
Active es una máquina de Hack The Box enfocada en la explotación de un entorno Active Directory, comenzando con enumeración SMB y acceso anónimo a recursos compartidos. La explotación permite recuperar credenciales almacenadas de forma insegura mediante Group Policy Preferences (GPP) y posteriormente realizar un ataque de Kerberoasting para comprometer una cuenta privilegiada del dominio.

- Plataforma
- Hack The Box
- Sistema operativo
- Windows
- Dificultad
- Fácil
- Publicado
- Autor
- Pedro Vargas
- Temas
- Active Directory
- SMB
- Null Session
- Gpp
- Kerberos
- Kerberoasting
- Password Cracking
En esta página
Resumen
Active es una máquina Windows de Hack The Box orientada principalmente a la explotación de un entorno Active Directory.
Durante la resolución se identificó que el servidor permitía realizar enumeración SMB sin proporcionar credenciales. Aprovechando este acceso fue posible ingresar al recurso compartido Replication, donde se encontró un archivo Groups.xml perteneciente a una antigua Group Policy Preference (GPP).
Este archivo contenía una contraseña almacenada mediante cpassword, la cual pudo ser recuperada utilizando gpp-decrypt. Las credenciales obtenidas correspondían a una cuenta del dominio y permitieron continuar con la enumeración de Active Directory.
Posteriormente se realizó un ataque de Kerberoasting, solicitando un Ticket Granting Service (TGS) asociado a una cuenta con un Service Principal Name (SPN). El ticket obtenido pudo ser crackeado offline utilizando Hashcat, permitiendo finalmente obtener credenciales privilegiadas y acceder al servidor como Administrator.
Enumeración
Descubrimiento de puertos
El primer paso fue realizar un escaneo inicial de los puertos más comunes del servidor.
Para ello utilicé Nmap:
nmap --top-ports 1000 -T5 -n 10.129.44.166

Este primer escaneo permitió identificar diferentes servicios disponibles en la máquina y obtener una idea inicial de la superficie de ataque.
Debido a que el laboratorio estaba orientado a Active Directory y se habían identificado servicios relacionados con SMB, continué la enumeración centrándome en este protocolo.
Identificación del sistema mediante SMB
Utilicé NetExec para obtener información adicional del servicio SMB:
nxc smb 10.129.44.166
El resultado permitió confirmar que nos encontrábamos frente a un servidor Windows Server 2008 perteneciente a un entorno de dominio.
Además, durante esta enumeración se observó que era posible realizar Null Authentication.
Una sesión nula SMB permite intentar interactuar con determinados recursos del servidor sin proporcionar un usuario y contraseña válidos. Esto no significa necesariamente que tengamos acceso completo al sistema, pero puede permitir enumerar recursos compartidos o acceder a información expuesta de manera insegura.
Enumeración de recursos compartidos SMB
El siguiente paso fue comprobar qué recursos SMB se encontraban disponibles.
Inicialmente utilicé smbclient sin proporcionar credenciales:
smbclient -L //10.129.44.166 -N

La opción -N permite realizar la conexión sin solicitar una contraseña.
Aunque fue posible obtener información sobre los recursos disponibles, quería identificar de manera más clara los permisos que tenía sobre cada uno de ellos.
Para ello utilicé SMBMap:
smbmap -H 10.129.44.166

Durante esta enumeración se identificó que era posible acceder al recurso:
Replication
Por este motivo procedí a conectarme utilizando nuevamente una sesión sin autenticación:
smbclient //10.129.44.166/Replication -N

Una vez dentro del recurso compartido comencé a revisar los diferentes directorios y archivos disponibles.
Durante esta enumeración encontré un archivo especialmente interesante dentro de las políticas del dominio:
Groups.xml


Obtención de credenciales mediante GPP
Análisis de Groups.xml
El archivo Groups.xml estaba relacionado con Group Policy Preferences (GPP).
Las Group Policy Preferences permitían a los administradores de Windows configurar diferentes parámetros en los equipos pertenecientes a un dominio. Históricamente, también era posible utilizar estas políticas para distribuir determinadas credenciales.
El problema era que algunas de estas credenciales podían quedar almacenadas dentro de archivos XML mediante un atributo denominado:
cpassword
Aunque la contraseña estaba cifrada, Microsoft publicó posteriormente la clave utilizada para proteger estos valores. Como consecuencia, si un atacante consigue acceder a uno de estos antiguos archivos de políticas, puede recuperar la contraseña almacenada.
Por esta razón, encontrar un archivo como Groups.xml dentro de un recurso accesible del dominio resulta especialmente interesante.
Descifrado de la contraseña
Para intentar recuperar las credenciales utilicé la herramienta gpp-decrypt.
El proyecto puede encontrarse en:
https://github.com/t0thkr1s/gpp-decrypt
Después de descargar la herramienta utilicé el archivo encontrado anteriormente:
gpp-decrypt -f Groups.xml

La herramienta permitió recuperar las credenciales correspondientes a un usuario del dominio:
SVC_TGS
La contraseña obtenida durante esta fase se ha omitido del writeup.
Enumeración autenticada mediante SMB
Ahora que disponía de unas credenciales válidas, volví a utilizar NetExec para comprobar a qué recursos podía acceder el usuario.
nxc smb 10.129.44.166 -u SVC_TGS -p '<PASSWORD>' --shares

Esta vez fue posible observar acceso a diferentes recursos compartidos del dominio, entre ellos:
NETLOGON
Replication
SYSVOL
Users
En este punto ya disponíamos de un usuario válido dentro del dominio.
Sin embargo, el nombre de la cuenta también resultaba interesante:
SVC_TGS
El prefijo SVC suele utilizarse como convención para identificar cuentas de servicio, aunque el nombre por sí solo no garantiza que realmente lo sea.
Esto hacía interesante comprobar si dentro del dominio existían cuentas asociadas a servicios mediante un Service Principal Name (SPN) y, en caso afirmativo, determinar si era posible realizar un ataque de Kerberoasting.
Kerberoasting
¿Qué es Kerberoasting?
En Active Directory, determinados servicios utilizan Service Principal Names (SPN) para asociar un servicio con una cuenta.
Cuando un usuario autenticado necesita acceder a uno de estos servicios puede solicitar al Key Distribution Center (KDC) un Ticket Granting Service (TGS).
Una parte del ticket está protegida utilizando material criptográfico derivado de la contraseña de la cuenta asociada al servicio.
Esto crea una situación interesante desde el punto de vista ofensivo: un usuario válido del dominio puede solicitar determinados tickets de servicio y posteriormente intentar recuperar offline la contraseña de la cuenta asociada mediante ataques de diccionario o fuerza bruta.
A esta técnica se le conoce como:
Kerberoasting
La ventaja para un atacante es que el proceso de crackeo se realiza offline, sin necesidad de enviar continuamente intentos de autenticación al controlador de dominio.
Configuración del dominio
Antes de realizar la enumeración añadí el dominio de la máquina al archivo:
/etc/hosts
Asociando la dirección IP con:
active.htb
Esto permitió resolver correctamente el dominio durante las siguientes consultas contra Active Directory.
Enumeración de SPN
Para buscar cuentas que tuvieran un SPN configurado utilicé GetUserSPNs de Impacket.
impacket-GetUserSPNs active.htb/SVC_TGS:'<PASSWORD>' -request

La opción:
-request
hace que la herramienta no se limite a enumerar las cuentas con SPN, sino que también solicite sus correspondientes TGS.
Durante esta fase se obtuvo un ticket asociado a una cuenta privilegiada del dominio.
Es importante tener en cuenta que obtener este ticket no significa que ya tengamos acceso como Administrator.
Lo que obtenemos es información criptográfica del TGS que puede utilizarse para intentar recuperar offline la contraseña de la cuenta asociada.
Crackeo del TGS
Copié el hash correspondiente al ticket obtenido y lo almacené en un archivo:
hash.txt
Posteriormente utilicé Hashcat para realizar un ataque de diccionario:
hashcat -m 13100 hash.txt /usr/share/wordlists/rockyou.txt

El modo:
13100
corresponde al formato Kerberos utilizado por este tipo de hashes:
Kerberos 5, etype 23, TGS-REP
Utilizando rockyou.txt como diccionario fue posible recuperar la contraseña asociada al ticket.
La contraseña obtenida mediante Hashcat se ha omitido del writeup.
Las credenciales recuperadas correspondían a:
Administrator
Con esto ya disponíamos de credenciales privilegiadas válidas dentro del dominio.
Acceso como Administrator
Finalmente utilicé las credenciales obtenidas para conectarme mediante SMB al recurso Users:
smbclient //10.129.44.166/Users -U 'Administrator%<PASSWORD>'

La autenticación fue exitosa y permitió acceder a los directorios correspondientes a los usuarios del servidor.
Desde allí fue posible localizar:
root.txt
confirmando que se había conseguido comprometer completamente la máquina.
Conclusiones
Active es una máquina especialmente útil para comprender algunos conceptos fundamentales de seguridad en Active Directory.
El ataque comienza con una configuración SMB que permite acceder anónimamente a información del dominio. Este acceso expone una antigua Group Policy Preference que contiene credenciales recuperables.
Estas credenciales proporcionan un punto de entrada válido al dominio y permiten posteriormente realizar un ataque de Kerberoasting. Finalmente, una contraseña débil asociada a una cuenta privilegiada permite crackear el TGS y comprometer completamente el servidor.
El flujo de ataque puede resumirse en:
- Enumeración de puertos y servicios.
- Identificación de un servidor Windows y servicios de Active Directory.
- Enumeración SMB mediante Null Authentication.
- Acceso al recurso compartido
Replication. - Descubrimiento de
Groups.xml. - Recuperación de credenciales almacenadas mediante GPP.
- Enumeración autenticada del dominio.
- Identificación de cuentas con SPN.
- Kerberoasting mediante la solicitud de un TGS.
- Crackeo offline del ticket con Hashcat.
- Obtención de credenciales de
Administrator. - Acceso al recurso SMB y obtención de
root.txt.
Herramientas utilizadas
- Nmap
- NetExec
- smbclient
- SMBMap
- gpp-decrypt
- Impacket
- Hashcat