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

# Upload

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

**1. Descarga:**

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

Utilizamos la herramienta `7z` para extraer los archivos:

```bash
7z x upload.zip
```

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

**3. Ejecución:**

Desplegamos el entorno con el script proporcionado:

```bash
bash auto_deploy.sh upload.tar
```

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

***

#### **Reconocimiento:**

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

Realizamos un `ping` para confirmar que la máquina está activa:

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

<figure><img src="/files/wXdNgq7zGh90tsbcy9KI" 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
```

Encontramos el puerto **80** abierto, ejecutando un servicio HTTP.

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

**3. Análisis Detallado:**

Realizamos un escaneo más exhaustivo del puerto abierto:

```bash
nmap -p80 -sCV 172.17.0.2 -oN targeted
```

Identificamos que se trata de un servidor Apache 2.4.52 en Ubuntu, mostrando una página titulada "Upload here your file".

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

**4. Enumeración Web:**

Al acceder al puerto 80 a través del navegador, observamos un formulario para subir archivos:

```
http://172.17.0.2/
```

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

**5. Fuerza Bruta de Directorios:**

Realizamos un ataque de fuerza bruta para encontrar directorios y archivos ocultos:

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

Entre los resultados, el directorio más relevante es `/uploads`.

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

***

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

**1. Preparación de una Reverse Shell:**

Utilizamos [revshells.com](https://www.revshells.com/) para generar un código PHP de reverse shell (PentestMonkey) y lo guardamos en un archivo en nuestra máquina.

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

**2. Subida del Archivo Malicioso:**

Subimos el archivo PHP con la reverse shell a través del formulario web.

El sistema nos confirma que el archivo se ha subido correctamente.

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

**3. Acceso al Directorio de Subidas:**

Accedemos al directorio donde se almacenan los archivos subidos:

```
http://172.17.0.2/uploads/
```

Allí vemos nuestro archivo malicioso.

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

**4. Ejecución de la Reverse Shell:**

Preparamos nuestro listener con `netcat`:

```bash
nc -nvlp 123
```

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

Al hacer clic en nuestro archivo PHP en el navegador, la página se queda cargando, pero recibimos una conexión en nuestro listener, obteniendo así una shell en el sistema.

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

***

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

**1. Verificación de Privilegios Sudo:**

Ejecutamos `sudo -l` para verificar qué privilegios tenemos.

**Resultado:**

```bash
(root) NOPASSWD: /usr/bin/env
```

Podemos ejecutar `/usr/bin/env` como `root` sin necesidad de contraseña.

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

**2. Explotación con GTFOBins:**

Consultamos [GTFOBins](https://gtfobins.github.io/gtfobins/env/) y encontramos la siguiente forma de escalar privilegios:

```bash
sudo env /bin/sh
```

Al ejecutar este comando, obtenemos una shell como `root`, completando así la explotación de la máquina.

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