> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/writes-ups/tryhackme/hard/reset.md).

# Reset

## Información de la máquina

<figure><img src="/files/WY8BnXBSbjAFxmCntNC2" alt=""><figcaption></figcaption></figure>

**Reset** es una máquina de dificultad **difícil** alojada en **TryHackMe**, diseñada para poner a prueba habilidades avanzadas en la explotación de entornos **Windows** corporativos con **Active Directory**. Desde el primer reconocimiento con múltiples puertos abiertos, pasando por técnicas como **enumeración de dominio SMB**, **Password Spraying**, **AS-REP Roasting**, hasta un uso estratégico de **BloodHound** y explotación de **RBCD (Resource-Based Constrained Delegation)**, esta máquina simula un entorno realista de una red mal configurada. A través de escaladas de privilegios progresivas y aprovechamiento de malas prácticas en la gestión de credenciales y permisos, Reset proporciona una experiencia completa de post-explotación y movimiento lateral dentro de un dominio empresarial.

***

## Reconocimiento

Empezaremos haciendo un primer reconocimiento para ver los puertos abiertos en el sistema.

<figure><img src="/files/ayfb7VfaIcf3ScAFwQjN" alt=""><figcaption></figcaption></figure>

**1. `-p-` → Escaneo de todos los puertos (1-65535)**

Por defecto, `nmap` solo escanea los **1000 puertos más comunes**.\
Con `-p-`, forzamos a que escanee **los 65,535 puertos** de la máquina objetivo, lo que puede ser útil para encontrar servicios que corren en puertos poco convencionales.

**2. `--open` → Filtrar solo los puertos abiertos**

Cuando escaneamos un sistema, muchos puertos pueden estar cerrados o filtrados por un firewall.\
Este parámetro hace que `nmap` **solo muestre los puertos abiertos**, reduciendo el ruido y facilitando el análisis.

**3. `-sS` → Stealth Scan (Escaneo Sigiloso con SYN)**

Es conocido como **"TCP SYN Scan"**, y funciona de la siguiente manera:

* `nmap` envía un paquete **SYN** (solicitud de conexión).
* &#x20;Si el puerto está abierto, el servidor responde con **SYN-ACK**.
* En lugar de completar la conexión con un **ACK**, `nmap` responde con un **RST (Reset)**, interrumpiendo la comunicación.

**4. `--min-rate 5000` → Velocidad mínima de paquetes (5000 por segundo)**

Por defecto, `nmap` ajusta dinámicamente la velocidad de los paquetes según la respuesta de la red.\
Con `--min-rate 5000`, obligamos a `nmap` a **no enviar menos de 5000 paquetes por segundo**, acelerando el escaneo.

**5. `-n` → Deshabilitar resolución DNS**

Normalmente, `nmap` intenta resolver el nombre de dominio de las IPs escaneadas (DNS lookup).\
Con `-n`, evitamos esta resolución de nombres, lo que **acelera el escaneo** y evita que los servidores DNS registren nuestra actividad.

**6. `-Pn` → Omitir detección de host (Host Discovery Off)**

Por defecto, `nmap` envía paquetes ICMP (ping) para ver si un host está activo antes de escanearlo.\
Si un firewall bloquea los pings, `nmap` puede marcarlo como "host down" y no escanearlo.

**7. `-oG`** **→ Exportar el contenido en formato grepeable**

Todo el resultado del escaneo lo exportaremos en un archivo llamado **`allPorts` .**

El escaneo revela muchos puertos abiertos. Ahora haremos un escaneo más detallado.

<figure><img src="/files/WMfAEzpDEdjy257oD5DF" alt=""><figcaption></figcaption></figure>

**1. `-p<puertos>` → Escaneo de puertos específicos**

Con `-p<puertos>`, le indicamos que **solo** escanee los puertos que queremos

**2. `-sCV` → Escaneo de versiones y scripts básicos**

Este parámetro en realidad es **dos combinaciones en una**:

* **`-sC`** → Activa los **NSE scripts por defecto** en `nmap` (similar a usar `--script=default`).\
  Ejecuta scripts básicos para enumerar información del servicio detectado, como banners, versiones, etc.
* **`-sV`** → Realiza **fingerprinting de versiones**, intentando identificar la versión exacta del software en cada puerto abierto.

**3. `-oN` → Guardar el resultado en formato Normal**

Por defecto, `nmap` muestra los resultados en pantalla, pero con **`-oN targeted`**, guardamos el resultado en un archivo en **formato legible para humanos**.

## Domain Enumeration

Usamos la herramienta `nxc smb` (de **nxc suite**) para interactuar con el servicio SMB de la máquina objetivo. Esto nos permite identificar el **nombre del dominio**, así como detalles del sistema operativo Windows que está ejecutando, lo cual es clave para planificar los siguientes pasos.

<figure><img src="/files/t0pdWy1Xp1ptNVatL3fE" alt=""><figcaption></figcaption></figure>

Añadimos una entrada en el archivo `/etc/hosts` de nuestro sistema para asociar la IP del objetivo con el **nombre del dominio**. Esto nos permitirá interactuar con los servicios usando el nombre del dominio, como requiere Kerberos o herramientas específicas.

<figure><img src="/files/0ENBmhSnpGZJBIcvb2Fe" alt=""><figcaption></figcaption></figure>

Usando el usuario **guest** (acceso anónimo), exploramos los **shares (recursos compartidos)** disponibles en el servidor SMB. Esto nos permite ver si hay carpetas públicas o mal configuradas, y qué nivel de acceso (lectura/escritura) tenemos sobre ellas.

<figure><img src="/files/QgQIEYjx37GjjXCTos18" alt=""><figcaption></figcaption></figure>

Identificamos un recurso SMB llamado **Data** con permisos de **lectura y escritura**, lo cual puede ser muy útil. Nos conectamos a este recurso con `smbclient`, navegamos por sus carpetas y descargamos los archivos que se encuentran dentro de una carpeta llamada **onboarding**, que parece contener información sensible o útil.

<figure><img src="/files/JdPR4Ri4GOjOzdVMV9RE" alt=""><figcaption></figcaption></figure>

Entre los archivos descargados, encontramos un documento que incluye una **contraseña inicial**: `ResetMe123!`, posiblemente utilizada para cuentas de usuario nuevas o en pruebas.

<figure><img src="/files/qfgMqrrTmDmKDHTNezTY" alt=""><figcaption></figcaption></figure>

Aprovechando que tenemos acceso a SMB, utilizamos la técnica de **RID Brute Forcing** con `nxc` para obtener una lista de **usuarios válidos** en el dominio. Esta técnica abusa de cómo Windows asigna identificadores únicos (RID) a los usuarios y responde de manera distinta a RIDs válidos e inválidos.

<figure><img src="/files/n0tRQFVfjLT4rc2KEEPk" alt=""><figcaption></figcaption></figure>

Guardamos toda la salida del proceso de enumeración en un archivo llamado `users.txt`&#x20;

<figure><img src="/files/opCSTIDVjZXBleSPJ4rf" alt=""><figcaption></figcaption></figure>

Procesamos el archivo `users.txt` para **extraer únicamente los nombres de usuario** (limpiando datos innecesarios) y guardamos el resultado limpio en un archivo nuevo: `dc_users.txt`.

<figure><img src="/files/p9ZAM57Juh5zbv1fBK7k" alt=""><figcaption></figcaption></figure>

Realizamos un ataque de **spray de contraseñas**, probando `ResetMe123!` con todos los usuarios de `dc_users.txt`. Descubrimos que el usuario **LILY\_ONEILL** tiene esa contraseña válida, confirmando acceso.

<figure><img src="/files/mAnFH4Ccuh8Il7X9kusQ" alt=""><figcaption></figcaption></figure>

Con este usuario no podemos avanzar en la máquina.

## AS-REP Roast Attack

{% hint style="success" %}
El ataque **AS-REP Roasting** se basa en explotar cuentas de Active Directory que **no requieren preautenticación Kerberos**. Esto permite solicitar un **AS-REP** cifrado con la clave del usuario, que luego se puede **crackear offline** para recuperar la contraseña.
{% endhint %}

Usamos una herramienta como `GetNPUsers.py` (de Impacket) y conseguimos **3 hashes Kerberos AS-REP**, lo que significa que hay usuarios mal configurados en el dominio.

<figure><img src="/files/soAGSJ38Mn5XagNZlgsB" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/AomFMLA0yppkOZz4D5cs" alt=""><figcaption></figcaption></figure>

Guardamos los hashes obtenidos en un archivo que será usado como entrada para herramientas de cracking como John the Ripper o Hashcat.

<figure><img src="/files/deQq4mPXG5DpRUvquTvJ" alt=""><figcaption></figcaption></figure>

Utilizamos **John the Ripper,** logrando **crackear uno de los hashes**, revelando la contraseña del usuario **TABATHA\_BRITT**.

<figure><img src="/files/7aDzwP0Pp6LuT5wQkSXY" alt=""><figcaption></figcaption></figure>

Finalmente, usando las credenciales recién obtenidas, nos conectamos al sistema mediante **Remote Desktop Protocol (RDP)** como el usuario **TABTHA\_BRITT**, accediendo al entorno gráfico del sistema y avanzando al siguiente nivel del compromiso.

<figure><img src="/files/oq8QxP5ZvqrUW4rw4AIE" alt=""><figcaption></figcaption></figure>

## BloodHound

{% hint style="success" %}
`bloodhound-python` es una herramienta que permite **recolectar información de Active Directory desde la línea de comandos**, sin necesidad del clásico ejecutable `SharpHound`. Esta herramienta recopila datos como relaciones entre usuarios, permisos, membresías de grupos, delegaciones, etc., y los guarda en formato `.json` para luego ser analizados visualmente en la interfaz gráfica de BloodHound.
{% endhint %}

<figure><img src="/files/v53f3kWLZqIMumi2BrTR" alt=""><figcaption></figcaption></figure>

Instalamos la aplicación **BloodHound**, una herramienta de visualización que nos permite analizar gráficamente las relaciones y rutas de ataque dentro de un dominio Active Directory. Esta interfaz es esencial para planificar movimientos laterales y escaladas de privilegios.

{% embed url="<https://bloodhound.specterops.io/get-started/quickstart/community-edition-quickstart#bloodhound-community-edition-quickstart>" %}

<figure><img src="/files/1AMykc6u6oGtszJl6T5s" alt=""><figcaption></figcaption></figure>

Subimos los archivos recolectados por `bloodhound-python` a la interfaz de BloodHound. Esto nos permite navegar por los gráficos y ver qué usuarios pueden comprometer a otros, quién tiene privilegios especiales, o qué rutas existen hacia el dominio completo.

<figure><img src="/files/R46gxwiGX2tUtkcOXABs" alt=""><figcaption></figcaption></figure>

## Resets Passwords

Al inspeccionar las relaciones en BloodHound, vemos que el usuario **TABATHA\_BRITT** tiene el permiso **"ForceChangePassword"** sobre otros usuarios. Esto significa que puede **resetear sus contraseñas** sin saber la actual, lo que permite tomar control de esas cuentas una por una.

<figure><img src="/files/hR3jg14dj4boqCW3TSUa" alt=""><figcaption></figcaption></figure>

Aprovechamos que ya tenemos acceso remoto por RDP con el usuario `TABATHA_BRITT` para utilizar la herramienta gráfica o PowerShell y así cambiar las contraseñas de los otros usuarios. Vamos "escalando" entre cuentas gracias a los privilegios heredados.

<figure><img src="/files/bmw8JIx8bHKC0VslUvA3" alt=""><figcaption></figcaption></figure>

Iniciamos sesión como el usuario `SHAWNA_BRAY` en **PowerShell ISE** para ejecutar el cambio de contraseña de `CRUZ_HALL`, quien será el siguiente eslabón en la cadena.

<figure><img src="/files/VnJiJis6Lmn4BCdv1TYH" alt=""><figcaption></figcaption></figure>

Una vez dentro como `CRUZ_HALL`, realizamos el mismo procedimiento: cambiamos la contraseña de `DARLA_WINTERS`. Esta escalada por permisos de cambio de contraseña permite llegar a usuarios con más privilegios.

<figure><img src="/files/Up5AitNSykGCpp9zTcpv" alt=""><figcaption></figcaption></figure>

## RBCD

{% hint style="success" %}
**RBCD (Delegación Restringida Basada en Recursos)** permite que **un servicio A actúe en nombre de un usuario para acceder a un servicio B**, pero solo si el **recurso de destino** (servicio B) lo permite específicamente. A diferencia de la delegación clásica, con RBCD es el **recurso quien define qué servicios pueden suplantar a usuarios para conectarse a él**, lo que da un control mucho más preciso y seguro.
{% endhint %}

<figure><img src="/files/T1Nb4FNZevyYNsyxqwlw" alt=""><figcaption></figcaption></figure>

Usamos la herramienta `getST.py` de **Impacket**, que permite obtener un **ticket de servicio Kerberos (TGS)** para suplantar al usuario `Administrator`, aprovechando la configuración de RBCD que hemos manipulado a nuestro favor.

<figure><img src="/files/KriDjOnQt2UXoQbmIVqp" alt=""><figcaption></figcaption></figure>

Ejecutamos `winexe` (una herramienta para ejecutar comandos de forma remota en máquinas Windows) y conseguimos una shell como el usuario **Administrator**, con privilegios máximos en el sistema.

<figure><img src="/files/YNdd6AbnTStheL2tSmBN" alt=""><figcaption></figcaption></figure>

Con el acceso como Administrator, podemos acceder a **todas las carpetas del sistema**, incluidas las del usuario normal y la cuenta de `root` o `SYSTEM`, lo que nos permite leer ambas flags y completar la máquina.

<figure><img src="/files/ZbQaZW6d59Wrzvdi8KXe" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/epIYZ5CIlVzoFeDgVEL5" alt=""><figcaption></figcaption></figure>

***

## Conclusión

La máquina **Reset** ejemplifica perfectamente los riesgos asociados a una mala gestión de usuarios, contraseñas predeterminadas, y configuraciones débiles en Active Directory. Desde el acceso inicial mediante SMB y una contraseña filtrada, hasta el compromiso total del dominio a través de **Delegación Restringida Basada en Recursos**, cada etapa del ataque destaca una técnica crucial en entornos reales de red corporativa. Además, el uso de herramientas como **BloodHound**, **Impacket**, y técnicas de **Kerberoasting** demuestran cómo un atacante puede encadenar vulnerabilidades aparentemente menores para alcanzar el control total del sistema. Reset no solo es un excelente reto técnico, sino también una lección clara sobre la importancia de la defensa en profundidad y la correcta configuración de entornos Windows.
