> 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/hackmyvm/easy/dc01.md).

# DC01

## Información de la máquina

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

**DC01 es una máquina fácil de Directorio Activo** que representa un entorno empresarial básico con servicios típicos como SMB y Kerberos. El proceso de compromiso comienza con un reconocimiento exhaustivo mediante Nmap para identificar servicios accesibles. A partir de ahí, se lleva a cabo una enumeración de usuarios a través de fuerza bruta de RIDs, seguida de un ataque de password spraying para obtener credenciales válidas. Con estas credenciales se accede a recursos compartidos que contienen información sensible, permitiendo avanzar con un ataque de Kerberoasting. Finalmente, se aprovechan hashes filtrados para escalar privilegios y obtener una shell como administrador. Esta cadena de ataques demuestra cómo una mala configuración en un entorno de Active Directory puede llevar a una completa toma de control del sistema.

***

## Reconocimiento

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

<figure><img src="/files/UyAnLg9C3z4aGuqPxQxR" 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` .**

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

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

Con `-p<puertos>`, le indicamos que **solo** escanee los puertos que le indicamo&#x73;**.**

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

Enumeramos con nxc el servicio smb para ver el nombre del dominio y a lo que nos enfrentamos

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

Obtenemos el dominio y lo ponemos en el /ect/hosts ya que mas adelante nos hará falta

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

## Rid-brute

**nxc** es una herramienta para interactuar con servicios de red como SMB y LDAP. Con el parámetro `--rid-brute`, realizamos un ataque de **fuerza bruta** para enumerar los usuarios de un dominio, utilizando un rango de RIDs (Relative Identifiers). Esta técnica es útil cuando no conocemos los nombres de usuario, pero tenemos la capacidad de enumerar RIDs secuenciales.\
El resultado se guarda en un archivo **users.txt** para su posterior procesamiento

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

El archivo generado por `nxc` contiene más información de la que necesitamos, por lo que hay que filtrarlo para extraer únicamente los **nombres de usuario**.

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

Usamos las herramientas **awk** y **tr** para procesar el archivo y extraer solo los nombres de usuario.

* **awk** es una herramienta de procesamiento de texto que permite seleccionar, filtrar y modificar columnas de texto.
* **tr** es otra herramienta de texto que sirve para reemplazar o eliminar caracteres.

Estos usuarios los guardamos en un nuevo archivo y eliminamos el anterior.

<figure><img src="/files/5piR6NEG9vobI6CepJ77" alt=""><figcaption></figcaption></figure>

## Password Sprying

**Password Spraying** es una técnica en la que se prueba una lista común de contraseñas contra muchos usuarios, en lugar de intentar adivinar la contraseña de un solo usuario con una gran cantidad de contraseñas.\
En este caso, utilizamos el archivo `users.txt` (con los usuarios enumerados anteriormente) y probamos una contraseña común contra todos ellos usando **nxc**.\
Obtuvimos credenciales válidas para el usuario **ybob317**.

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

Después de obtener las credenciales válidas, verificamos los recursos compartidos en el sistema. Descubrimos que tenemos **acceso de lectura** en el recurso compartido **Users**.

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

Al acceder al recurso compartido, descargamos el archivo **user.txt**, que contiene la primera **flag**.

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

Ya tenemos la primera flag.

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

## Kerberoasting Attack

**Kerberoasting** es un ataque contra el protocolo **Kerberos**. Los atacantes solicitan tickets de servicio (TGS) para los servicios Kerberos que no estén protegidos, los cuales pueden ser crackeados offline. Si un servicio utiliza una contraseña débil, el atacante puede obtener el hash y descifrar la contraseña.

El ataque Kerberoasting depende de que la hora del sistema esté sincronizada correctamente. Si la hora no está correcta, el ataque no funcionará y se generará un error.

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

Usamos **ntpdate** para sincronizar la hora del sistema con un servidor NTP. Esto es crucial para que el ataque Kerberoasting funcione correctamente.

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

Una vez sincronizada la hora, el ataque Kerberoasting se realiza correctamente.

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

El archivo generado contiene los hashes de los usuarios obtenidos previamente, que pueden ser utilizados para **crackear** las contraseñas.

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

## Hash Cracking

Utilizamos de cracking de hashes **John the Ripper** para obtener la contraseña. En este caso, la contraseña recuperada es **Password123!!**.

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

El símbolo **\[+]** en la salida de **nxc** indica que las credenciales son válidas y que tenemos acceso al recurso o servicio. En este caso, las credenciales son válidas para el usuario **file\_svc**.

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

Usamos **smbmap**, una herramienta para enumerar recursos compartidos de **SMB** y los permisos asociados. Encontramos que tenemos acceso al recurso compartido **backup**.

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

## Backup document

**smbclient** es una herramienta de línea de comandos que permite acceder a recursos compartidos SMB/CIFS y operar sobre ellos, como si fuera un cliente de Windows.

Al acceder al recurso **backup**, descargamos el archivo que contiene más información útil, incluidos **hashes de usuario**.

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

El archivo contiene los **hashes NTLM** de varios usuarios. El **hash NTLM** es una representación cifrada de la contraseña de un usuario, que puede ser utilizada para realizar ataques de **Pass-the-Hash**.

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

Separar los usuarios de los hashes NTLM en archivos distintos facilita el proceso de análisis y explotación posterior.

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

## Pass-the-hash & administrator shell

**Pass-the-Hash** es un ataque en el que se utiliza un hash NTLM en lugar de la contraseña en texto claro para autenticar a un usuario. Esto permite a un atacante obtener acceso a un sistema sin necesidad de conocer la contraseña real.\
El resultado **!Pwned** indica que el hash ha sido validado correctamente y que se ha obtenido acceso.

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

Usamos **evil-winrm**, una herramienta que permite ejecutar comandos de manera remota a través de **WinRM** (Windows Remote Management). Con ello, obtenemos una **shell interactiva** y privilegios elevados en el sistema.

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

Podemos acceder al escritorio del usuario **Administrator** y leer la **flag final**.

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

***

## Conclusión

La explotación de esta máquina demuestra cómo un atacante puede escalar privilegios progresivamente mediante técnicas bien conocidas y herramientas estándar. A partir de un simple escaneo de puertos y un acceso básico a recursos SMB, fue posible enumerar usuarios, realizar ataques de password spraying, extraer hashes sensibles y finalmente comprometer por completo el sistema con acceso como administrador.&#x20;
