
Escáner de seguridad asíncrono para WordPress con evasión de WAF mediante navegador headless. Enumera plugins, temas, usuarios e instalaciones multisitio con huella digital sigilosa e integración de vulnerabilidades de WPScan.
█ █░ ██▓███ ▒██ ██▒ ██▀███ ▄▄▄ ▓██ ██▓
▓█░ █ ░█░▓██░ ██▒ ▒▒ █ █ ▒░▓██ ▒ ██▒▒████▄ ▒██ ██▒
▒█░ █ ░█ ▓██░ ██▓▒ ░░ █ ░▓██ ░▄█ ▒▒██ ▀█▄ ▒██ ██░
░█░ █ ░█ ▒██▄█▓▒ ▒ ░ █ █ ▒ ▒██▀▀█▄ ░██▄▄▄▄██ ░ ▐██▓░
░░██▒██▓ ▒██▒ ░ ░ ▒██▒ ▒██▒░██▓ ▒██▒ ▓█ ▓██▒ ░ ██▒▓░
░ ▓░▒ ▒ ▒▓▒░ ░ ░ ▒▒ ░ ░▓ ░░ ▒▓ ░▒▓░ ▒▒ ▓▒█░ ██▒▒▒
▒ ░ ░ ░▒ ░ ░░ ░▒ ░ ░▒ ░ ▒░ ▒ ▒▒ ░▓██ ░▒░
░ ░ ░░ ░ ░ ░░ ░ ░ ▒ ▒ ▒ ░░
░ ░ ░ ░ ░ ░░ ░
░ ░
WPX — Escáner de Rayos X de WordPress | Bypass de WAF
WPX (WordPress X-Ray) es un escáner de seguridad que utiliza Camoufox para resolver desafíos de Cloudflare y WAF. Refleja esas sesiones para realizar un descubrimiento rápido y asíncrono de plugins y temas, enumeración de usuarios y detección de multisitios.
Nota: WPX descarga los metadatos de escaneo necesarios (huellas, reglas de detección) desde data.wpscan.org.
asyncio y curl_cffi para una enumeración rápida.wpscan.La forma más fácil de ejecutar WPX — sin necesidad de Python ni dependencias.
docker run ghcr.io/greg-randall/wpx -u https://example.com
docker run -v $(pwd):/output ghcr.io/greg-randall/wpx -u https://example.com -o /output/results.txt
Sin un volumen, WPX vuelve a descargar metadatos en cada ejecución. Monta un volumen con nombre para evitarlo:
docker run -v wpx-data:/app/.wpx_data ghcr.io/greg-randall/wpx -u https://example.com
Actualiza los metadatos manualmente cuando sea necesario:
docker run -v wpx-data:/app/.wpx_data ghcr.io/greg-randall/wpx --update
git clone https://github.com/greg-randall/wpx.git
cd wpx
pip install .
python3 -m camoufox fetch
python3 wpx.py -u https://example.com
python3 wpx.py -u https://example.com --api-key YOUR_API_KEY
Escanea un número específico de los plugins mejor clasificados (ej., los 500 mejores):
python3 wpx.py -u https://example.com --plugins-limit 500
Escanea todos los plugins jamás creados. WPX puede recorrer toda la biblioteca histórica de ~110,000 plugins (incluyendo ~55,000 actualmente activos) para encontrar cada rastro de software en el objetivo. Advertencia: Esto realiza una cantidad masiva de solicitudes y puede tardar varias horas en completarse dependiendo de tu número de hilos y la capacidad de respuesta del objetivo.
python3 wpx.py -u https://example.com --full-scan
La enumeración de usuarios se ejecuta automáticamente. Para limitar el rango de sondeo de ID de autor o deshabilitarlo por completo:
python3 wpx.py -u https://example.com --users-limit 20
python3 wpx.py -u https://example.com --enum-users-disable
Ejecuta un escaneo en silencio y guarda los resultados en un archivo sin códigos de color ANSI:
python3 wpx.py -u https://example.com --quiet --output results.txt
Para actualizar las listas de plugins y clasificarlas por popularidad:
python3 data/wpx_fetch_plugins.py --sort-by score
Genera data/plugins_active.txt (por defecto los 5000 mejores) y data/plugins_dead.txt (por defecto los 2500 mejores).
Para cambiar los límites:
python3 data/wpx_fetch_plugins.py --active-limit 10000 --dead-limit 5000
El directorio data/ contiene los conjuntos de datos de plugins procesados y herramientas de mantenimiento:
data/plugins_active.txt: Slugs de plugins activos mejor clasificados por puntuación de popularidad (media geométrica de instalaciones × descargas).data/plugins_dead.txt: Slugs de plugins cerrados/eliminados mejor clasificados por recuento histórico de instalaciones (obtenido de ejecuciones anteriores del catálogo o instantáneas de Archive.org).data/plugins_catalog.json: Metadatos en caché de plugins activos.data/plugins_dead.jsonl: Caché de solo adición de metadatos de plugins eliminados, incluyendo los últimos recuentos de instalaciones conocidos. Las nuevas entradas sobrescriben las antiguas al cargar (última escritura gana).data/archive.org-cache/: Instantáneas HTML sin procesar de Wayback Machine, utilizadas para recuperar recuentos históricos de instalaciones de plugins cerrados antes de la primera ejecución del catálogo.data/wpx_fetch_plugins.py: Obtenedor que combina la API de WordPress.org, el repositorio SVN y Archive.org para construir y enriquecer las listas de plugins.wpx.py)data/wpx_fetch_plugins.py)Esta herramienta es solo para pruebas de seguridad autorizadas. Los desarrolladores no se hacen responsables por mal uso o daños.
| Bandera | Descripción |
|---|
-u, --url | URL objetivo de WordPress (requerido). |
--api-key | Clave API de la Base de Datos de Vulnerabilidades de WPScan. |
-t, --threads | Hilos concurrentes para el escaneo (Por defecto: 20). |
--plugins-limit | Limitar el número de plugins a escanear (ej. 500, 5000). |
--full-scan | Escanea todos los slugs de plugins disponibles (hasta 50k+). |
--update | Forzar la actualización de los archivos de metadatos de WPScan. |
--no-browser | Omitir el bypass de WAF de Camoufox y conectar directamente. |
--enum-users-disable | Omitir la enumeración de usuarios. |
--users-limit N | Número de IDs de autor a sondear mediante ?author=N (por defecto: 10). |
--stealth [N] | Agregar retrasos aleatorios entre solicitudes. Mínimo 1s, máximo 2×N segundos (por defecto cuando se establece la bandera: 1.5 → 1–3s). También limita los hilos a 3. |
--idle-timeout N | Abortar si no se recibe respuesta del servidor durante N segundos (por defecto: 60, 0 = deshabilitado). |
-q, --quiet | Suprimir banner, estado y progreso — mostrar solo hallazgos. |
-o, --output FILE | Escribir la salida en FILE (texto plano, sin códigos ANSI). |
| Bandera | Descripción |
|---|
--sort-by | Cómo clasificar los plugins activos: score (por defecto), active_installs, downloaded. |
--active-limit N | Número de slugs activos a escribir en plugins_active.txt (por defecto: 5000, 0 = todos). |
--dead-limit N | Número de slugs eliminados a escribir en plugins_dead.txt (por defecto: 2500, 0 = todos). |
--force | Volver a obtener todo incluso si el catálogo ya existe. |
--fetch-limit N | Detenerse después de obtener N plugins activos de la API (0 = todos). |
--max-age HOURS | Omitir la obtención de la API si el catálogo es más reciente que N horas (por defecto: 24). |