> 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

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

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

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

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

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F9e8sceQeRYtw1lSE0v5b%2FPasted%20image%2020250713145208.png?alt=media&amp;token=586c5da2-d9bd-4c52-aac9-733e4b5dc041" alt=""><figcaption></figcaption></figure>

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

Desplegamos el entorno con el script proporcionado:

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FIWkjy3fSeZwWGcrDU8eH%2FPasted%20image%2020250713145235.png?alt=media&amp;token=ea8f72a2-ffe2-4555-a570-761a2e4e30ca" alt=""><figcaption></figcaption></figure>

### **2. Reconocimiento**

#### **2.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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Furt7FFo0WdGwzHNsDu6Q%2FPasted%20image%2020250713145316.png?alt=media&amp;token=2bdf06b5-b45d-4689-8b24-0d30771867a9" 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
```

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FqnfI4a2txV6y7XBNnWlS%2FPasted%20image%2020250713145422.png?alt=media&amp;token=9d8cf17b-b1cd-44e1-9e9f-cda767808eac" alt=""><figcaption></figcaption></figure>

#### **2.3. Escaneo 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FMvhu84lAKpnxfPAaG4RE%2FPasted%20image%2020250713145355.png?alt=media&amp;token=77c17901-8745-4b2a-8126-10f6356d0f80" alt=""><figcaption></figcaption></figure>

#### **2.4. Enumeración web**

Al acceder al puerto 80 a través del navegador (`http://172.17.0.2/`), observamos un formulario para subir archivos.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FXz9sJVTii0yhkeUttPAT%2FPasted%20image%2020250713145455.png?alt=media&amp;token=727dd1a2-3b88-48bc-a983-8d49047fb43b" alt=""><figcaption></figcaption></figure>

#### **2.4.1. Enumeración de directorios y archivos**

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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FoisPmlgBv3ifr1vrC82s%2FPasted%20image%2020250713145626.png?alt=media&amp;token=7d9b1945-6919-42b5-9879-d22a385b8719" alt=""><figcaption></figcaption></figure>

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

#### **3.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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fu3UAWHnCPMmZeR99yseL%2FPasted%20image%2020250713145809.png?alt=media&amp;token=d0183d7f-7856-4dc4-92cf-fa714e8eceac" alt=""><figcaption></figcaption></figure>

#### **3.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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FWnuWqqcbcW6uSJfOlaeq%2FPasted%20image%2020250713145831.png?alt=media&amp;token=eb726d22-7ac1-4260-81c1-2b2f653ea269" alt=""><figcaption></figcaption></figure>

#### **3.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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F1d8aqlAflbylCW7u0dSg%2FPasted%20image%2020250713145851.png?alt=media&amp;token=858850f5-23c0-43c6-a260-038bafe1d84d" alt=""><figcaption></figcaption></figure>

#### **3.4. Ejecución de la reverse shell**

Preparamos nuestro listener con `netcat`:

```bash
nc -nvlp 123
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FboioPwfU5j9WPUQQOXFu%2FPasted%20image%2020250713145907.png?alt=media&amp;token=ce5e41c0-bca3-4c79-965d-bc9e0771286a" 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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FB1opJMxYN1GiHmKwgx6R%2FPasted%20image%2020250713145927.png?alt=media&amp;token=128216b4-344e-48e1-aa4c-1678bce6b336" alt=""><figcaption></figcaption></figure>

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

#### **4.1. Verificación de privilegios**

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

**Resultado:** Podemos ejecutar `/usr/bin/env` como `root` sin necesidad de contraseña:

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FnWGtlTZFcaJibhTKacbd%2FPasted%20image%2020250713150142.png?alt=media&amp;token=375d4658-117e-42fd-be10-0d0e4e6e0cf5" alt=""><figcaption></figcaption></figure>

#### **4.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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FRGPVcj3Fm2eDHJXiCuat%2FPasted%20image%2020250713150209.png?alt=media&amp;token=96e4527e-f470-4162-955f-6de6a77f0ca2" alt=""><figcaption></figcaption></figure>
