> 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/dockerlabs/easy/findyourstyle.md).

# FindYourStyle

## Información de la máquina

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

FindYourStyle es una máquina linux basada en **Drupal**, plataforma conocida por haber presentado vulnerabilidades críticas en versiones anteriores. Comenzaremos con una fase de reconocimiento activa, utilizando herramientas como **Nmap** para detectar puertos, servicios y tecnologías expuestas. Posteriormente, realizaremos una enumeración más precisa sobre el servicio web encontrado, confirmando que se trata de un **Drupal 8**, lo que nos orientará a buscar posibles exploits públicos para esa versión.

Una vez conseguido el acceso inicial, abordaremos técnicas para estabilizar la shell obtenida, y pasaremos a la fase de **post-explotación**, donde extraeremos credenciales y analizaremos configuraciones sensibles. Finalmente, aprovecharemos las capacidades `sudo` mal configuradas para **escalar privilegios hasta root**, consiguiendo el control total del sistema.

***

## Reconocimiento

La fase de **reconocimiento** es el primer paso a la hora de resolver una máquina. Su objetivo es recopilar la mayor cantidad de información posible sobre el sistema objetivo, permitiendo entender su estructura, tecnología y posibles vectores de ataque.&#x20;

Empezaremos haciendo un ping a la máquina víctima para ver si está encendida y ante que nos enfrentamos.

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

Si recibimos respuesta, significa que la máquina está en línea. Además, observamos que el **TTL** (Time To Live) es **64**, lo que indica que es un sistema **Linux** (normalmente, los sistemas Windows tienen un TTL de 128).&#x20;

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

El escaneo revela que el puerto 80 está abierto. Ahora realizamos un escaneo más detallado:

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

**1. `-p80` → Escaneo de puertos específicos**

Con `-p80`, le indicamos que **solo** escanee los puertos 80 **(HTTP)**

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

Al parecer tenemos una web por el puerto 80, por lo que vamos a visitarla:

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

Estamos ante un Drupal.

***

## Enumeración y búsqueda de vulnerabilidades

A partir del escaneo realizado con Nmap, observamos que el archivo `robots.txt` se encuentra accesible, por lo que procedemos a revisarlo en busca de rutas ocultas que puedan revelarnos información útil sobre la estructura del sitio web.

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

Además, llevamos a cabo un análisis con **Droopescan** con el objetivo de identificar la versión de Drupal en uso, así como posibles plugins instalados o rutas relevantes. En el escaneo inicial ya habíamos detectado que se trata de un **Drupal 8**.

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

Como el escaneo no aporta información adicional significativa, decidimos buscar posibles vulnerabilidades conocidas que afecten a esta versión específica de Drupal.

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

Investigando un poco, localizamos un exploit público compatible con la versión detectada, por lo que analizamos su funcionamiento para comprobar su viabilidad.

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

***

## Explotación de las vulnerabilidades

Clonamos el repositorio donde se encuentra alojado el exploit.

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

Seguimos las instrucciones proporcionadas para llevar a cabo la ejecución.

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

Al ejecutar el exploit, conseguimos acceso inicial a la máquina víctima con una **shell remota limitada** bajo el usuario `www-data`.

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

Para obtener una sesión más estable e interactiva, generamos una reverse shell y la codificamos en base64 para facilitar su ejecución en la máquina objetivo.

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

Una vez codificada, decodificamos la cadena directamente en la máquina víctima, añadiendo `bash` al final del comando para que este sea interpretado correctamente y se establezca la conexión de vuelta. Previamente, nos ponemos a la escucha en nuestra máquina en el puerto 443.

<figure><img src="/files/9ZEk7hPjh4AskDD7ulC7" alt=""><figcaption></figcaption></figure>

Al ejecutar el comando codificado, obtenemos una shell interactiva bajo el usuario `www-data`, sobre la que realizamos un tratamiento adecuado de la [**TTY** ](/4lec4st/docs/tratamiento-de-la-tty.md)para mejorar su usabilidad.

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

***

## Post Explotación y escalada de privilegios

Sabemos que en instalaciones de Drupal suele encontrarse el archivo `settings.php`, el cual contiene configuraciones sensibles como usuarios y contraseñas. Lo inspeccionamos en busca de credenciales.

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

Al revisar el archivo, encontramos una contraseña interesante: `ballenitafeliz`. También identificamos que existe un usuario llamado `ballenita`.

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

Utilizamos la contraseña obtenida para cambiar al usuario `ballenita`, logrando así una nueva sesión con mayores privilegios.

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

Dentro de esta nueva sesión, comprobamos los permisos **sudo** disponibles para el usuario, y observamos que puede ejecutar tanto `/bin/ls` como `/bin/grep` sin necesidad de contraseña.

<figure><img src="/files/2T4DtykA76bQNtS9wYQy" alt=""><figcaption></figcaption></figure>

Con estos binarios, listamos el contenido del directorio `/root/` y descubrimos un archivo `.txt` que llama nuestra atención.

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

Usando `grep`, visualizamos el contenido de ese archivo, el cual resulta ser una posible contraseña de root.

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

Probamos a cambiar a root utilizando esta cadena como credencial, y logramos acceder satisfactoriamente.

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

Finalmente, obtenemos acceso como **root**, alcanzando así el control total sobre la máquina comprometida.

***

## Conclusión

Esta máquina nos ha permitido repasar varias fases esenciales en el hacking ético: desde la **enumeración de servicios web y análisis de CMS**, hasta la **explotación remota de una vulnerabilidad conocida en Drupal 8**. Tras comprometer el sistema como `www-data`, aplicamos técnicas básicas para estabilizar la sesión y facilitar el trabajo en entorno shell. La post-explotación nos llevó a descubrir credenciales dentro del archivo `settings.php`, lo que nos permitió cambiar de usuario y, finalmente, escalar privilegios mediante binarios permitidos en `sudo`.
