> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/writes-ups/the-hacker-labs/principiante/academy.md).

# Academy

## Información de la máquina

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

Academy es una máquina linux de dificultad fácil con un CMS WordPress donde nuestra tarea principal fue identificar y explotar vulnerabilidades dentro del sistema. Utilizando herramientas como WPScan y técnicas de explotación manual, logramos identificar varios puntos débiles en el core de WordPress y en plugins específicos, particularmente en el plugin **File Manager**. A lo largo de la práctica, seguimos un proceso estructurado de reconocimiento, enumeración de usuarios, explotación de vulnerabilidades y escalada de privilegios, con el objetivo de obtener acceso total al sistema y comprender las implicaciones de seguridad asociadas a un entorno WordPress mal configurado.

***

## Reconocimiento

La fase de **reconocimiento** es el primer paso a la hora de resolver una máquina. Su objetivo es recopilar la mayor cantidad de información posible sobre el sistema objetivo, permitiendo entender su estructura, tecnología y posibles vectores de ataque.&#x20;

Para detectar la IP de la máquina victima, haremos un escaneo a nivel local con arp-scan:

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

Teniendo ya la IP, hacemos un ping a la máquina víctima para ver si está encendida y ante que nos enfrentamos.

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

Si recibimos respuesta, significa que la máquina está en línea. Además, observamos que el **TTL** (Time To Live) es 64, lo que indica que es un sistema Linux (normalmente, los sistemas Windows tienen un TTL de 128).&#x20;

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

**1. `-p-` → Escaneo de todos los puertos (1-65535)**

Por defecto, `nmap` solo escanea los **1000 puertos más comunes**.\
Con `-p-`, forzamos a que escanee **los 65,535 puertos** de la máquina objetivo, lo que puede ser útil para encontrar servicios que corren en puertos poco convencionales.

**2. `--open` → Filtrar solo los puertos abiertos**

Cuando escaneamos un sistema, muchos puertos pueden estar cerrados o filtrados por un firewall.\
Este parámetro hace que `nmap` **solo muestre los puertos abiertos**, reduciendo el ruido y facilitando el análisis.

**3. `-sS` → Stealth Scan (Escaneo Sigiloso con SYN)**

Es conocido como **"TCP SYN Scan"**, y funciona de la siguiente manera:

* `nmap` envía un paquete **SYN** (solicitud de conexión).
* &#x20;Si el puerto está abierto, el servidor responde con **SYN-ACK**.
* En lugar de completar la conexión con un **ACK**, `nmap` responde con un **RST (Reset)**, interrumpiendo la comunicación.

**4. `--min-rate 5000` → Velocidad mínima de paquetes (5000 por segundo)**

Por defecto, `nmap` ajusta dinámicamente la velocidad de los paquetes según la respuesta de la red.\
Con `--min-rate 5000`, obligamos a `nmap` a **no enviar menos de 5000 paquetes por segundo**, acelerando el escaneo.

**5. `-n` → Deshabilitar resolución DNS**

Normalmente, `nmap` intenta resolver el nombre de dominio de las IPs escaneadas (DNS lookup).\
Con `-n`, evitamos esta resolución de nombres, lo que **acelera el escaneo** y evita que los servidores DNS registren nuestra actividad.

**6. `-Pn` → Omitir detección de host (Host Discovery Off)**

Por defecto, `nmap` envía paquetes ICMP (ping) para ver si un host está activo antes de escanearlo.\
Si un firewall bloquea los pings, `nmap` puede marcarlo como "host down" y no escanearlo.

**7. `-oG`** **→ Exportar el contenido en formato grepeable**

Todo el resultado del escaneo lo exportaremos en un archivo llamado **`puertos` .**

El escaneo revela que los puertos **22 (SSH)** y 80 **(HTTP)** están abiertos. Ahora realizamos un escaneo más detallado:

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

**1. `-p22,80` → Escaneo de puertos específicos**

Con `-p22,80`, le indicamos que **solo** escanee los puertos **22 (SSH)** y **80 (HTTP)**

**2. `-sCV` → Escaneo de versiones y scripts básicos**

Este parámetro en realidad es **dos combinaciones en una**:

* **`-sC`** → Activa los **NSE scripts por defecto** en `nmap` (similar a usar `--script=default`).\
  Ejecuta scripts básicos para enumerar información del servicio detectado, como banners, versiones, etc.
* **`-sV`** → Realiza **fingerprinting de versiones**, intentando identificar la versión exacta del software en cada puerto abierto.

**3. `-oN` → Guardar el resultado en formato Normal**

Por defecto, `nmap` muestra los resultados en pantalla, pero con **`-oN targeted`**, guardamos el resultado en un archivo en **formato legible para humanos**.

Pasamos a ver la página web y vemos lo siguiente

<figure><img src="/files/0Gfg4IJPhlDnwGGe6xOp" alt=""><figcaption></figcaption></figure>

***

## Enumeración y búsqueda de vulnerabilidades

Para encontrar directorios y archivos, usamos **GoBuster**:

{% hint style="success" %}
Gobuster es una herramienta de software escrita en el lenguaje de programación Go para encontrar directorios y archivos ocultos en sitios web, lo hace realizando ataques de fuerza bruta.
{% endhint %}

<figure><img src="/files/9tuH0bfH7a626tTdfAw7" alt=""><figcaption></figcaption></figure>

Vemos que hay un directorio llamado `wordpress`, lo que indica que probablemente estamos ante un CMS WordPress.

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

Como primer paso, intentamos identificar posibles plugins vulnerables mediante WPScan utilizando detección agresiva.

```bash
❯ wpscan --url http://192.168.1.195/wordpress -e vp --api-token "xUPg...SwhY0" --plugins-detection aggressive
```

```java
 | [!] 3 vulnerabilities identified:
 |
 | [!] Title: WordPress < 6.5.5 - Contributor+ Stored XSS in HTML API
 |     Fixed in: 6.5.5
 |     References:
 |      - https://wpscan.com/vulnerability/2c63f136-4c1f-4093-9a8c-5e51f19eae28
 |      - https://wordpress.org/news/2024/06/wordpress-6-5-5/
 |
 | [!] Title: WordPress < 6.5.5 - Contributor+ Stored XSS in Template-Part Block
 |     Fixed in: 6.5.5
 |     References:
 |      - https://wpscan.com/vulnerability/7c448f6d-4531-4757-bff0-be9e3220bbbb
 |      - https://wordpress.org/news/2024/06/wordpress-6-5-5/
 |
 | [!] Title: WordPress < 6.5.5 - Contributor+ Path Traversal in Template-Part Block
 |     Fixed in: 6.5.5
 |     References:
 |      - https://wpscan.com/vulnerability/36232787-754a-4234-83d6-6ded5e80251c
 |      - https://wordpress.org/news/2024/06/wordpress-6-5-5/
[i] The main theme could not be detected.
[+] Enumerating Vulnerable Plugins (via Aggressive Methods)
 Checking Known Locations - Time: 00:00:05 <=====================================================================================================> (7343 / 7343) 100.00% Time: 00:00:05
[+] Checking Plugin Versions (via Passive and Aggressive Methods)
[i] Plugin(s) Identified:
[+] file-manager
 | Location: http://192.168.1.195/wordpress/wp-content/plugins/file-manager/
 | Last Updated: 2025-03-19T09:37:00.000Z
 | Readme: http://192.168.1.195/wordpress/wp-content/plugins/file-manager/readme.txt
 | [!] The version is out of date, the latest version is 6.7
 | [!] Directory listing is enabled
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - http://192.168.1.195/wordpress/wp-content/plugins/file-manager/, status: 200
 |
 | [!] 3 vulnerabilities identified:
 |
 | [!] Title: Bit File Manager 6.0 - 6.5.5 - Unauthenticated Remote Code Execution via Race Condition
 |     Fixed in: 6.5.6
 |     References:
 |      - https://wpscan.com/vulnerability/9d927ee2-26ec-4451-8b3b-2137281947c5
 |      - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-7627
 |      - https://www.wordfence.com/threat-intel/vulnerabilities/id/5f29de7a-3f15-4b6d-aad7-6a08151e2113
 |
 | [!] Title: Bit File Manager – 100% Free & Open Source File Manager and Code Editor for WordPress < 6.5.6 - Authenticated (Subscriber+) Arbitrary File Upload
 |     Fixed in: 6.5.6
 |     References:
 |      - https://wpscan.com/vulnerability/be7c1e8c-a43c-4c33-87be-3a86d8474b1d
 |      - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-7770
 |      - https://www.wordfence.com/threat-intel/vulnerabilities/id/9cae7702-e531-45b9-9131-42edbc073a07
 |
 | [!] Title: Bit File Manager – 100% Free & Open Source File Manager and Code Editor for WordPress < 6.5.8 - Authenticated (Subscriber+) Limited JavaScript File Upload
 |     Fixed in: 6.5.8
 |     References:
 |      - https://wpscan.com/vulnerability/10a3b033-5cad-426b-8c0a-c2aabca81302
 |      - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-8743
 |      - https://www.wordfence.com/threat-intel/vulnerabilities/id/314520d5-bd9d-46c1-b903-5e5cb3bb3417
 |
 | Version: 6.5.1 (80% confidence)
 | Found By: Readme - Stable Tag (Aggressive Detection)
 |  - http://192.168.1.195/wordpress/wp-content/plugins/file-manager/readme.txt
[+] WPScan DB API OK
 | Plan: free
 | Requests Done (during the scan): 3
 | Requests Remaining: 22
[+] Finished: Thu Apr 10 11:07:43 2025
[+] Requests Done: 7357
[+] Cached Requests: 30
[+] Data Sent: 2.116 MB
[+] Data Received: 1.021 MB
[+] Memory used: 220.348 MB
[+] Elapsed time: 00:00:08
```

Aunque identificamos varias vulnerabilidades, al intentar explotarlas directamente no obtuvimos resultados. A continuación, pasamos a enumerar posibles usuarios del sitio.

```bash
wpscan --url http://192.168.1.195/wordpress --enumerate u
```

Se identificó un usuario llamado **dylan**.

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

Procedemos a realizar un ataque de fuerza bruta sobre este usuario con la lista `rockyou.txt`, logrando obtener una contraseña válida.

```bash
❯ wpscan --url http://192.168.1.195/wordpress/ -P /usr/share/wordlists/rockyou.txt -U dylan --force
```

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

Antes de iniciar sesión en el panel `wp-admin`, fue necesario añadir una entrada en el archivo `/etc/hosts/`, ya que la aplicación realiza redirecciones hacia un dominio específico.

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

Una vez configurado el host y proporcionadas las credenciales, logramos acceder al panel de administración de WordPress.

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

***

## Explotación de las vulnerabilidades

Dentro del panel, encontramos la sección del plugin **Bit File Manager**, desde donde es posible visualizar todos los archivos y directorios del sitio.

Además, esta interfaz permite subir archivos directamente al servidor.

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

Creamos un archivo llamado `cmd.php` con código que permite ejecutar comandos del sistema a través de un parámetro `cmd`.

<figure><img src="/files/8SSJp9hjo1PL7xhUgONS" alt=""><figcaption></figcaption></figure>

Subimos este archivo y, al acceder a él desde el navegador, comprobamos que podemos ejecutar comandos en el servidor.

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

Modificamos el código para cargar una reverse shell. Luego nos pusimos en escucha por el puerto 443.

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

Al ejecutar el script, conseguimos una conexión reversa y acceso interactivo a la máquina.

<figure><img src="/files/3QDOq3j67YPjYsjX4l5d" alt=""><figcaption></figcaption></figure>

Ya tenemos acceso a la máquina.

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

***

## Post Explotación y escalada de privilegios

Durante la enumeración del sistema, encontramos un archivo llamado `backup.py`, el cual pertenece al usuario con el que tenemos acceso.

<figure><img src="/files/8pIPKWVInAXUVDjcrRtf" alt=""><figcaption></figcaption></figure>

El archivo en sí no contiene funciones interesantes, pero observamos que importa la librería `paramiko` lo que podemos estar ante un Library Python Hijacking.

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

Verificamos que tenemos permisos de escritura en el directorio `/opt/`. Sin embargo, al intentar realizar el hijacking, no obtuvimos éxito.

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

Utilizamos la herramienta `pspy64` para monitorizar tareas cron ejecutadas por el sistema. Descargamos `pspy64` en nuestra máquina real, iniciamos un servidor con Python y lo transferimos con `wget`.

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

Al ejecutar `pspy64`, descubrimos que existe una tarea cron ejecutada por root que llama al script `/opt/backup.sh`, pero este archivo no existe.

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

Dado que tenemos permisos de escritura en `/opt/`, creamos ese archivo e insertamos un comando que asigna el bit SUID a `/bin/bash`.

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

Para monitorizar cuándo se aplican los nuevos permisos, utilizamos:

```
watch -n 0 ls -l /bin/bash
```

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

Una vez que el bit SUID está activo, ejecutamos el comando `bash -p`

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

Esto nos otorga una shell con privilegios de root.

***

## Conclusión

Academy demostró la importancia de realizar un reconocimiento adecuado en entornos WordPress, especialmente en lo que respecta a plugins desactualizados y configuraciones inseguras. A través de la explotación de vulnerabilidades conocidas, como la ejecución remota de código y la subida de archivos arbitrarios, conseguimos obtener acceso al sistema. Posteriormente, al aprovechar tareas cron mal configuradas y permisos de escritura en directorios críticos, logramos escalar nuestros privilegios hasta obtener control total sobre la máquina.
