Support HackTheBox (Easy)
Contexto de la maquina
Trayectoria Support

Descripción
La máquina presenta un entorno Active Directory basado en Windows Server, donde se abordan múltiples vectores de ataque típicos en entornos corporativos: enumeración SMB, análisis de binarios, extracción de credenciales, abuso de LDAP y escalada mediante delegación Kerberos.
Objetivo del reto
Obtener acceso inicial al dominio mediante credenciales expuestas.
Escalar privilegios dentro del dominio hasta comprometer el Domain Controller.
Capturar las flags de usuario y administrador.
Tipo de máquina
Windows (Active Directory)
Habilidades y técnicas evaluadas
Enumeración SMB y LDAP
Análisis de binarios (.NET)
Ingeniería inversa básica
Descifrado de credenciales (XOR + Base64)
Uso de herramientas como
mono,ghidra,ldapsearch,netexecBloodHound y análisis de relaciones AD
Abuso de permisos (GenericAll)
Ataque Resource-Based Constrained Delegation (RBCD)
Uso de herramientas Impacket
Análisis de vulnerabilidades




Escaneo de puertos
Comenzamos realizando un escaneo completo de puertos TCP para identificar los servicios expuestos en la máquina objetivo.
Una vez identificados los puertos abiertos, lanzamos un escaneo más detallado sobre ellos para obtener versiones y scripts por defecto.
Resultado:
Observamos múltiples servicios típicos de un Controlador de Dominio (Active Directory):
Kerberos (
88)LDAP (
389,3268)SMB (
445)RPC
WinRM (
5985)
No se detecta un servidor web tradicional en los puertos estándar (80/443), pero sí se identifica un dominio:
Lo añadimos a nuestro archivo /etc/hosts para poder resolverlo correctamente:
Enumeración SMB
Dado que el servicio SMB está expuesto, intentamos listar los recursos compartidos de forma anónima:
Respuesta:
Observación
Destaca el recurso compartido support-tools, ya que no es un recurso por defecto y puede contener información relevante.
Acceso al recurso compartido
Intentamos acceder al recurso de forma anónima:
Respuesta:
Listamos su contenido:
La mayoría son herramientas estándar de Windows, pero hay dos archivos especialmente interesantes:
SysinternalsSuite.zipUserInfo.exe.zip
Análisis de archivos
Descargamos el primero:
Una vez que lo tengamos en nuestro host vamos a descomprimirlo dentro de una carpeta que creemos:
Tras descomprimirlo, observamos múltiples herramientas conocidas de Windows, pero ninguna aporta información relevante en este punto.
Por lo tanto, centramos la atención en el segundo archivo:
Contenido:
Escalada a usuario (LDAP)
Análisis de UserInfo.exe
UserInfo.exePara analizar el binario, utilizamos mono, que permite ejecutar binarios .NET en sistemas Linux:
Respuesta:
Esto indica que se trata de una herramienta interna para consultar información de usuarios, probablemente mediante LDAP.
Sin embargo, al ejecutarla localmente no obtenemos información útil, por lo que procedemos a analizar el binario de forma estática.
Ingeniería inversa
Abrimos el binario con ghidra para inspeccionar su funcionamiento interno:
Tras analizar el binario, identificamos una función interesante llamada:
Esto sugiere que el programa podría contener credenciales o lógica sensible embebida.

Decompilación con IL
Dado que es un binario .NET, podemos obtener una representación más clara utilizando monodis:
Esto genera un archivo en lenguaje intermedio (IL), que facilita el análisis de funciones internas.
A continuación, filtramos el contenido para localizar la función getPassword y analizar su lógica, con el objetivo de identificar posibles credenciales hardcodeadas o mecanismos de autenticación reutilizables.
Credenciales Hardcodeadas

Para profundizar en el análisis del binario previamente decompilado (UserInfo.il), filtramos directamente la función getPassword para identificar posibles credenciales embebidas:
Resultado:
Análisis
De este fragmento podemos extraer dos elementos clave:
Cadena cifrada (Base64):
Clave utilizada:
Por el patrón observado, es razonable asumir que el valor está protegido mediante un esquema de cifrado basado en XOR + Base64.
Decodificación de la contraseña
Para recuperar la contraseña en texto claro, desarrollamos un script en Python que replica el proceso de descifrado:
decodeText.py
Ejecutamos el script:
Respuesta:
Hemos obtenido una contraseña válida, pero aún no conocemos el usuario asociado.
Enumeración del usuario
Para identificar posibles usuarios, filtramos cadenas relevantes dentro del .il:
Respuesta:
Veremos una llamada que es la siguiente:
Esto sugiere claramente que el usuario es:
Validación de credenciales
Probamos las credenciales obtenidas contra el servicio SMB utilizando netexec:
Respuesta:
Las credenciales son válidas, lo que nos permite autenticarnos correctamente en el dominio.
Escalate user support
Con credenciales válidas, procedemos a realizar una enumeración completa del dominio utilizando RustHound (alternativa moderna a BloodHound ingestor):
Respuesta:
Se genera un archivo .zip compatible con BloodHound, que contiene toda la información necesaria para analizar relaciones, privilegios y posibles vectores de escalada dentro del dominio.
El siguiente paso será importar estos datos en BloodHound para identificar rutas de privilegio hacia usuarios más privilegiados, como support o incluso Domain Admin.
BloodHound
Ahora vamos a instalar BloodHound de forma rapida en un docker:
URL = Download BloodHound en Docker
Respuesta:
Ahora que esta importado en nuestro docker y levantado podremos acceder a el desde la siguiente URL.
Nos logueamos con las credenciales propocionadas por la herramienta, entrando nos pedira cambiar las credenciales y ya nos metera dentro:
Al iniciar sesión, la herramienta nos pedirá cambiar la contraseña. Tras esto, ya podremos acceder al panel principal.
A continuación, importamos el archivo .zip generado previamente con RustHound. Tras unos segundos de procesamiento, tendremos disponibles todos los datos del dominio para su análisis.
Análisis inicial
Una vez cargados los datos, comenzamos investigando el usuario ldap, pero no encontramos vectores de ataque relevantes asociados a este.

Sin embargo, al revisar el resto de usuarios del dominio, identificamos un usuario interesante: support, el cual presenta ciertos permisos destacables.

Aunque inicialmente no podemos explotarlos directamente, lo marcamos como objetivo potencial.
Enumeración de usuarios vía LDAP
Para obtener todos los usuarios del dominio, realizamos una enumeración mediante LDAP:
Con la lista de usuarios generada, intentamos realizar un ataque de Kerberoasting, pero no obtenemos resultados válidos.
Tras continuar con la enumeración, observamos que el usuario support tiene permisos para autenticarse mediante WinRM, lo que lo convierte en un objetivo prioritario.
Análisis LDAP (usuario support)
Procedemos a extraer toda la información del objeto support desde LDAP:

Respuesta:
Este valor tiene alta probabilidad de ser una contraseña almacenada en texto claro o reutilizada.
Validación de credenciales
Probamos estas credenciales con netexec:
Respuesta:
Confirmamos que las credenciales son válidas.
Acceso mediante WinRM
Dado que el usuario support tiene acceso por WinRM, establecemos una sesión remota:
Respuesta:
Veremos que hemos accedido de forma correcta, por lo que leeremos la flag del usuario.
user.txt
Escalate Privileges

Recordando el análisis previo en BloodHound, el usuario support pertenece al grupo Shared Support Accounts, el cual tiene permisos elevados sobre el Domain Controller (DC).
Esto nos permite explotar un escenario de Resource-Based Constrained Delegation (RBCD).
¿Qué es RBCD?
La Delegación Restringida Basada en Recursos (RBCD) es una característica de Active Directory que permite que un servicio actúe en nombre de otros usuarios. Normalmente, cuando un servicio necesita acceder a recursos en nombre de un usuario, el administrador configura qué servicios pueden delegar y hacia dónde.
¿Cómo funciona el ataque?
En un ataque RBCD, hacemos lo siguiente:
Crear una computadora falsa - Como usuario autenticado del dominio, podemos agregar hasta 10 computadoras al dominio. Creamos una computadora que controlamos (ej:
ATTACKER$).Configurar delegación - Usando el permiso
GenericAllque tenemos sobre el Controlador de Dominio (DC), le decimos al DC: "Confía en mi computadora falsa, permite que actúe en tu nombre".Solicitar ticket de usuario - Pedimos a Kerberos un ticket que nos permita actuar como un usuario privilegiado (Administrador) pero usando nuestra computadora falsa como intermediaria.
Pasar el ticket - Tomamos ese ticket y lo usamos para autenticarnos como Administrador en el DC.
Analogía simple
Imagina que:
Eres un empleado (
support) en una empresa con credenciales limitadasTu jefe (
Administrador) tiene todas las llavesHay un grupo de confianza (
Shared Support Accounts) que tiene permiso para modificar cerradurasEste grupo puede decirle a la cerradura principal (DC) que le dé acceso a tu llave falsa
Creas una llave falsa (
ATTACKER$) y le dices a la cerradura: "confía en esta llave falsa"Luego usas esa llave falsa para pedir acceso como el jefe
La cerradura te da un ticket de acceso como si fueras el jefe

Para comenzar con la explotación, vamos a crear una cuenta de máquina desde nuestra máquina atacante utilizando impacket, autenticándonos con las credenciales del usuario support:
Respuesta:
Esto confirma que la cuenta de máquina ATTACKER$ ha sido creada correctamente en el dominio.
A continuación, aprovechamos el permiso GenericAll que posee el grupo Shared Support Accounts sobre el Domain Controller (DC) para configurar la delegación RBCD, permitiendo que nuestra máquina controlada sea confiable para realizar impersonación:
Respuesta:
Con esto, hemos configurado correctamente la delegación basada en recursos, permitiendo que ATTACKER$ pueda impersonar usuarios contra el DC mediante Kerberos.
El siguiente paso consiste en solicitar un ticket Kerberos (TGS) impersonando al usuario Administrator mediante el flujo S4U2Self + S4U2Proxy:
Respuesta:
Se ha generado correctamente un ticket Kerberos válido para el usuario Administrator.
Para facilitar su uso, renombramos el fichero generado y lo exportamos en la variable de entorno KRB5CCNAME, lo que permitirá autenticarnos mediante Kerberos sin necesidad de contraseña:
Además, añadimos la resolución del hostname del controlador de dominio para evitar problemas de conectividad:
Finalmente, utilizamos el ticket Kerberos para autenticarnos como Administrator contra el DC mediante wmiexec de impacket:
Respuesta:
Esto confirma que hemos conseguido acceso como Administrator, comprometiendo completamente el Domain Controller.
Por lo que leeremos la flag del usuario admin.
root.txt
Last updated