flagSupport 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, netexec

  • BloodHound 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.zip

  • UserInfo.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

Para 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 Dockerarrow-up-right

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:

  1. Crear una computadora falsa - Como usuario autenticado del dominio, podemos agregar hasta 10 computadoras al dominio. Creamos una computadora que controlamos (ej: ATTACKER$).

  2. Configurar delegación - Usando el permiso GenericAll que tenemos sobre el Controlador de Dominio (DC), le decimos al DC: "Confía en mi computadora falsa, permite que actúe en tu nombre".

  3. 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.

  4. 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 limitadas

  • Tu jefe (Administrador) tiene todas las llaves

  • Hay un grupo de confianza (Shared Support Accounts) que tiene permiso para modificar cerraduras

  • Este 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