← Blog

WPScan — Enumeración y Fuerza Bruta de WordPress

Escaneo de WordPress con WPScan: enumeración de plugins/usuarios, detección agresiva de plugins, uso de la API WPScan y ataque de contraseñas sobre wp-login.

1. Operational Scope & Technical Objective

wpscan es el escáner específico de WordPress: enumera la versión del core, plugins, temas y usuarios, cruza los hallazgos con la base de datos de vulnerabilidades de WPScan y permite atacar wp-login.php con fuerza bruta. El uso táctico: enumeración dirigida de plugins (fuente de CVEs conocidos) con detección pasiva/agresiva, y password attack sobre usuarios confirmados. La clave de la eficacia es no escanear el sitio entero si solo se necesita confirmar una versión o un plugin concreto, y alimentar la enumeración de plugins/usuarios con la API (aunque funcione sin token, el token eleva el detalle y la velocidad).

2. High-Impact Syntax & Command Cheatsheet

# Enumeración de TODOS los plugins con detección agresiva (forzar su verificación)
wpscan --url http://10.10.10.88/webservices/wp/ \
  --enumerate ap \
  --plugins-detection aggressive \
  --force \
  --api-token <API-TOKEN>
#   --enumerate ap        -> enumera todos los plugins (a = all, p = plugins)
#   --plugins-detection aggressive -> fuerza peticiones al plugin aunque la app las oculte
#   --force               -> ignora el "este sitio puede no ser WP" y continúa
#   --api-token           -> token de la API WPScan (datos de CVEs por versión)
#   (usa el token de tu cuenta WPScan; no lo expongas en repos públicos)

# Fuerza bruta de login (wp-login.php)
wpscan --usernames tom \
  -P /usr/share/wordlists/rockyou.txt \
  --force \
  --password-attack wp-login \
  --url http://192.168.137.131/prehistoricforest/ \
  --no-update
#   --usernames tom          -> usuario(s) a atacar
#   -P <wordlist>            -> lista de contraseñas
#   --password-attack wp-login -> tipo de ataque sobre el formulario de login
#   --no-update              -> no comprobar actualizaciones (menos ruido, más rápido)

# Enumeración de usuarios (previa al password attack)
wpscan --url http://target/ --enumerate u

# Enumerar solo temas o plugins vulnerables según la API
wpscan --url http://target/ --enumerate vt   # v = vulnerable, t = temas

3. Real-World Offensive/Defensive Scenarios

De plugin a CVE. --enumerate ap --plugins-detection aggressive descubre plugins instalados (muchas veces ocultos en el HTML); con la versión y el token, WPScan correlaciona CVEs conocidos (p. ej. plugins con upload sin autenticación o LFI) que llevan directos a RCE o a un fichero legible del servidor.

Password attack tras enumerar usuarios. WordPress confirma el nombre de usuario en el login ("Unknown username" vs "incorrect password"): enumerar --enumerate u y atacar solo cuentas reales con --password-attack wp-login es más eficaz y deja menos ruido que un spray a ciegas. La limitación: sin control de CAPTCHA/rate-limit en el objetivo, la fuerza bruta puede bloquear cuentas (lockout) o ser detectada por los plugins de seguridad.

Defensa. Las mitigaciones efectivas contra WPScan son la ocultación real (no solo X-Powered-By): eliminar plugins/temas no usados (la superficie que WPScan enumera), actualizar core+plugins (cerrar los CVEs que el escáner correlaciona), usar plugins de hardening (rate-limit en wp-login, CAPTCHA, bloqueo por IP) y desactivar la enumeración de usuarios vía REST/?author= que WPScan explota para el password attack.