Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
xss2shell — Escáner de WordPress para CVE-2026-64638 basado en comportamiento que utiliza sondeos de inicio de sesión benignos; clasifica el comportamiento del saneador y genera PoCs de solo alerta para uso autorizado. | Kitploit
Herramientas/GitHubGitHub/0xlipon/xss2shell
Herramientas DefensivasReconocimientoEscáneres de VulnerabilidadesEscáneres de Vulnerabilidades WebGeneración de PayloadsAnálisis de VulnerabilidadesExplotación de Aplicaciones WebSeguridad WebPruebas de Penetración
GitHub0xlipon/xss2shell

xss2shell

Escáner de WordPress para CVE-2026-64638 basado en comportamiento que utiliza sondeos de inicio de sesión benignos; clasifica el comportamiento del saneador y genera PoCs de solo alerta para uso autorizado.

3hace 11 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver RepositorioSitio web

CVE-2026-64638 CVSS 8.9 pwn.ai Python 3.8+

🔥 XSS2Shell — Escáner y kit de PoC para CVE-2026-64638

Escáner masivo basado en el comportamiento y generador de PoC de calidad probatoria para la cadena XSS a RCE sin autenticación previa de WordPress que afecta a más de 500 millones de sitios web.
Solo detección. Sin weaponización. Diseñado para programas de bug bounty y equipos azules.

Verificador oficial: https://pwn.ai/xss2shell-checker.html

¿Qué es esto? • Inicio rápido • Dorks de Shodan • Uso • Matriz de decisión • Detección • FAQ


🔎 Dorks de Shodan

Busca instancias de WordPress potencialmente vulnerables en Internet antes de escanear:

Descubrimiento básico de WordPress

root@kitploit:~
http.component:"wordpress" -http.title:"Just a moment"

Encuentra sitios WordPress excluyendo el modo "I'm Under Attack" de Cloudflare / las páginas de protección contra bots que bloquean o desafían las solicitudes automatizadas.

Acotar a páginas de inicio de sesión

root@kitploit:~
http.component:"wordpress" http.title:"Log In"

Devuelve solo las páginas de inicio de sesión de WordPress: la superficie de ataque exacta para CVE-2026-64638.

Búsqueda por versión específica

root@kitploit:~
http.component:"wordpress" "wp-content" "?ver=7.0" -"?ver=7.0.3"

Señala instancias de WordPress 7.0.x sin el parche 7.0.3 mediante el fingerprinting de versiones de activos.

Ampliar la superficie

root@kitploit:~
http.component:"wordpress" http.html:"wp-login.php"

Detecta sitios donde wp-login.php es accesible pero puede no ser la página actual: mayor cobertura.

Exclusiones de Cloudflare (combinadas)

root@kitploit:~
http.component:"wordpress" -http.title:"Just a moment" -http.title:"Attention Required" -org:"Cloudflare"

Filtro agresivo que descarta la mayoría de los objetivos detrás de Cloudflare. Úsalo al escanear a gran escala con --active: Cloudflare limitará la tasa o bloqueará la solicitud de la sonda.

Consejo: exporta los resultados de Shodan con shodan download y canaliza los nombres de host directamente a xss2shell_mass.py -i.


🚨 ¿Qué es CVE-2026-64638?

El 7 de agosto de 2026, pwn.ai reveló CVE-2026-64638 (XSS2Shell) — una vulnerabilidad crítica de cross-site scripting sin autenticación previa en el núcleo de WordPress que encadena hasta la ejecución remota de código en el servidor. [citation:pwn.ai blog]

El fallo explota una discrepancia entre los analizadores de strip_tags() de PHP y wp_kses_post() de WordPress:

  • strip_tags() utiliza < seguido inmediatamente de una letra para identificar etiquetas HTML. < area id=...> (con un espacio) se trata como texto — sobrevive.
  • wp_kses_post() (KSES) reconoce < area como un elemento <area> válido — y <area> está en la lista blanca de KSES. [citation:pwn.ai blog]

Un inicio de sesión fallido con un nombre de usuario especialmente diseñado < area id=ajaxurl href=/?rest_route=/&_method=GET&_jsonp=alert>... omite ambos saneadores, se renderiza como DOM vivo en la página de inicio de sesión, secuestra el script user-profile.js de WordPress mediante DOM clobbering y dispara alert() en el origen de WordPress — cero clics, cero autenticación, cero cookies requeridas. [citation:pwn.ai blog]

¿Escalado a un administrador con sesión iniciada? La misma primitiva roba contraseñas de aplicación mediante Same Origin Method Execution (SOME), sube un plugin malicioso y ejecuta PHP como www-data. [citation:pwn.ai blog] [citation:hadrian.io blog]

Afectado: WordPress 6.4 hasta 7.0.2 — parcheado en 7.0.3 con backports para 4.7+.
Impacto: ~500 millones de sitios web en el momento de la divulgación. [citation:pwn.ai blog]

📰 Recursos clave


⚡ Qué hace este kit de herramientas

Este es un kit de herramientas de solo detección. No weaponiza la vulnerabilidad: ofrece a investigadores de seguridad, cazadores de bug bounty y equipos azules todo lo necesario para:

  1. Escanear masivamente cientos de hosts de WordPress en minutos con precisión basada en el comportamiento
  2. Generar páginas PoC de calidad probatoria para demostrar que el XSS se dispara (solo alert())
  3. Clasificar hallazgos con niveles de confianza precisos — sin falsos positivos por coincidencia de versión

🔑 ¿Por qué basado en el comportamiento?

"Una cadena de versión indica cuál debería ser el nivel de parche del código.
Solo el comportamiento del saneador de la página de inicio de sesión indica si el fallo se dispara."

Los hosts administrados aplican backports de parches de seguridad silenciosamente sin cambiar las cadenas de versión. Los plugins de endurecimiento del inicio de sesión reemplazan el mensaje de error por completo, eliminando el canal de reflexión incluso en versiones inseguras. Los escáneres basados solo en versión producen falsos positivos y falsos negativos. Este escáner envía una única sonda benigna y clasifica el comportamiento real del saneador.


🚀 Inicio rápido

Instalación

root@kitploit:~
git clone https://github.com/jakestone/xss2shell.git
cd xss2shell
pip install -r requirements.txt

Escaneo en 5 minutos

root@kitploit:~
# Passive — no probes sent to target, version + endpoint fingerprinting only
python3 xss2shell_mass.py -i domains.txt -o results

# Active — sends ONE benign failed-login per host (authorized assets only!)
python3 xss2shell_mass.py -i domains.txt -o results --active --workers 80

Generar PoCs de evidencia

root@kitploit:~
# Single target
python3 make_poc.py --target https://blog.example.com

# Batch from scanner output
python3 make_poc.py --from-results results.csv -o pocs/

Abre el .poc.html generado en tu navegador mientras grabas un video → si se dispara alert(), has capturado evidencia de XSS sin autenticación previa.


📖 Uso

Escáner masivo (xss2shell_mass.py)

root@kitploit:~
usage: xss2shell_mass.py [-h] -i INPUT [-o OUTPUT]
                         [--active] [--workers WORKERS]
                         [--timeout TIMEOUT] [--quiet]

Evidencia de escaneo pasivo (sin sonda activa, siempre recopilada)

  1. Página principal → huella de WordPress (meta generator, parámetros ?ver= de activos, referencias a wp-content)
  2. Página de inicio de sesión → accesibilidad, detección del formulario de inicio de sesión estándar, gadget user-profile.js encolado, versiones de activos del núcleo
  3. Prueba de humo REST JSONP → GET inofensivo en /?rest_route=/&_method=GET&_jsonp=<random> — ¿está abierta la vía JSONP?
  4. Respaldo Feed/Readme → extracción de versión si falta la huella de la página principal

Sonda activa (un POST, bandera --active)

Envía un único inicio de sesión fallido con el nombre de usuario < area id=<RANDOM> href=/x2s> y clasifica la respuesta HTML:

  • bypass — el elemento <area> real con nuestro marcador sobrevivió → desajuste strip_tags/KSES CONFIRMADO
  • escaped — marcador presente pero codificado como entidad → parche o endurecimiento presente
  • stripped — se muestra el error predeterminado de WP, etiquetas eliminadas → acevomod o parcheado
  • closed — sin reflexión del nombre de usuario en absoluto → plugin de endurecimiento del inicio de sesión instalado

Generador de PoC (make_poc.py)

root@kitploit:~
usage: make_poc.py [-h] [--target TARGET] [--from-results FROM_RESULTS]
                   [-o OUTDIR]

Genera la página PoC publicada por pwn.ai para cada objetivo: el formulario HTML exacto que dispara alert() en un WordPress sin parchear. Se incluyen tres variantes de payload en los comentarios:


🧠 Matriz de decisión

El motor de decisión del escáner combina la clasificación de versión (de la API stable-check de WordPress.org) con evidencia de comportamiento para producir 10 veredictos distintos:

Formato de salida

Columnas del CSV: host, url, status, checker_status, wp_version, branch_status, evidence, http, ms, error

La columna checker_status se corresponde con el vocabulario del verificador público de pwn.ai (vulnerable / patched / not_wordpress / unreachable / inconclusive / error) para una correlación directa.


🔍 Firmas de detección (Blue Team / SOC)

Si estás del lado defensor, estas son las señales forenses que deja esta vulnerabilidad:

Lado del servidor (registros del servidor web / WAF)

root@kitploit:~
# Primary signal: encoded '<' in the log parameter
POST /wp-login.php  →  log=%3C...  (URL-encoded < in username field)

# Higher confidence: paired with REST pivoting
GET /?rest_route=/&_method=GET&_jsonp=...     # JSONP callback
GET /wp-json/wp/v2/statuses/publish?_jsonp=...  # WAF-bypass variant

# Escalation stage indicators
GET /wp-admin/authorize-application.php?success_url=<off-origin>
POST /wp-admin/update.php?action=upload-plugin
GET /wp-content/plugins/<random>/shell.php

Regla de bloqueo en el borde / WAF

Bloquea POST /wp-login.php cuando el parámetro log contenga %3C (< codificado en URL). Los nombres de usuario válidos de WordPress nunca contienen corchetes angulares. No limites la regla a etiquetas específicas: KSES permite tabulaciones, nuevas líneas y retornos de carro después de <, así como cualquier etiqueta de la lista blanca, por lo que una regla específica de etiquetas se evade trivialmente. [citation:hadrian.io blog]

Dato clave para los defensores

El callback _jsonp= de la fase de escalada utiliza puntos para recorrer propiedades (p. ej., window.opener.approve.click). Marca las solicitudes REST con callbacks JSONP con puntos como indicadores sólidos de explotación. [citation:hadrian.io blog]


⚖️ Uso legal y ético

root@kitploit:~
THIS TOOL IS DETECTION-ONLY. IT DOES NOT:
  ✗ Weaponize the JSONP callback beyond the public alert()
  ✗ Include admin-lure pages or Application Password capture
  ✗ Include REST abuse, plugin upload, or PHP shell code
  ✗ Execute more than one failed login per target per scan

YOU MUST:
  ✓ Only scan assets you own or have written authorization to test
  ✓ Only generate PoCs for your own browser on your own server
  ✓ Never send PoC links to site admins/users
  ✓ Never escalate past alert() without program written approval
  ✓ Follow the bug bounty program scope and rules

This toolkit exists for authorized security research, bug bounty
programs, and defensive detection engineering. Misuse is your
responsibility.

📁 Estructura del repositorio

root@kitploit:~
xss2shell/
├── README.md                  ← You are here
├── xss2shell_mass.py          ← Behavior-first mass scanner (v1.1.0)
├── make_poc.py                ← Evidence-grade PoC page generator
├── requirements.txt           ← Python dependencies (just `requests`)
├── .gitignore                 ← Ignores scan outputs and cache
└── example/
    ├── domains.txt            ← Example input file
    └── example_output.csv     ← Example scan output

❓ FAQ

P: ¿Por qué no comprobar simplemente la cadena de versión de WordPress?
R: Los hosts administrados (WP Engine, Kinsta, Pantheon, etc.) aplican con frecuencia backports de parches de seguridad sin cambiar la versión. Los plugins de endurecimiento del inicio de sesión reemplazan el mensaje de error por completo. Ambos casos producen falsos positivos en escáneres basados solo en versión y falsos negativos para versiones ocultas. Este escáner prueba el comportamiento real del saneador.

P: ¿Es peligrosa la sonda --active?
R: No. Envía exactamente un inicio de sesión fallido con un nombre de usuario marcador benigno. No intenta ejecutar JavaScript, no enumera nombres de usuario válidos y no dispara ningún exploit real. Es menos intrusiva que un intento de inicio de sesión estándar.

P: ¿Se puede usar esta herramienta para escanear sin autorización?
R: No. La sonda activa envía un POST HTTP a /wp-login.php, que es una solicitud al servidor objetivo. Úsala solo en activos que poseas o para los que tengas autorización escrita explícita para probar.

P: ¿Cuál es la diferencia entre vulnerable y confirmed_vulnerable?
R: vulnerable significa que la API de WordPress.org indica que la versión es insegura, pero no hemos confirmado el desajuste strip_tags/KSES a nivel de comportamiento. confirmed_vulnerable significa que enviamos una sonda y el elemento <area> sobrevivió a ambos saneadores — la cadena publicada puede dispararse.

P: ¿Puedo usarlo para los informes de mi programa de bug bounty?
R: ¡Sí! La columna checker_status se asigna directamente al vocabulario del verificador público de pwn.ai para una correlación fácil. Combina los resultados del escaneo con la evidencia en video del PoC de make_poc.py para informes completos.

P: ¿Detecta la cadena de RCE?
R: No. Este kit detecta el punto de entrada XSS sin autenticación previa. La cadena RCE completa requiere un administrador con sesión iniciada, Application Passwords habilitadas y permisos de subida de plugins — condiciones que este escáner no evalúa. El escáner se centra en lo que es observable externamente: la omisión del saneador.


🏆 Créditos y referencias

  • Descubrimiento y divulgación: pwn.ai — descubierto de forma autónoma por un sistema de IA multiagente
  • Fundamento de la técnica SOME: Paulos Yibelo — investigación de 2022 nominada a Top Web Hacking Techniques
  • Análisis técnico: Hadrian — guía integral de detección y mitigación
  • CVE: CVE-2026-64638 / GHSA-52p2-r8wf-jcrf
  • Parche: WordPress 7.0.3

Construido por 0xlipon • Solo detección • Solo para uso autorizado

Descargar herramienta
RecursoEnlace
Divulgación original (pwn.ai)pwn.ai/blog/xss2shell
Análisis técnico de Hadrianhadrian.io/blog/wordpress-xss2shell
Aviso de WordPress (GHSA)GHSA-52p2-r8wf-jcrf
Investigación sobre ataques SOME (2022)pwn.ai/blog/bypass-csp-using-wordpress
Lanzamiento de WordPress 7.0.3wordpress.org/news/2026/08/wordpress-7-0-3-release
BanderaDescripción
-i, --inputArchivo con un host por línea (dominio simple o URL completa)
-o, --outputRuta base para los archivos de salida (genera .csv + .json)
--activeHabilita la sonda de comportamiento: un inicio de sesión fallido por host
--workersTamaño del pool de hilos (predeterminado: 50, máximo ~200 para conexiones buenas)
--timeoutTimeout HTTP en segundos (predeterminado: 10)
--quietSolo imprime confirmed_vulnerable, vulnerable y likely_vulnerable
VarianteValor de hrefCuándo usarla
Predeterminada/?rest_route=/&_method=GET&_jsonp=alertWordPress estándar
Envelope/?rest_route=/&_method=GET&_envelope=1&_jsonp=alertREST devuelve 401 (lo envuelve en 200)
Pivote WAF/wp-json/wp/v2/statuses/publish?_jsonp=alert&_method=GET?rest_route= bloqueado por el WAF
VeredictoCondiciones
confirmed_vulnerable 🔴La versión es insegura Y el marcador de la sonda sobrevivió como elemento <area> Y el gadget user-profile.js está presente
vulnerable 🔴La versión es insegura según wordpress.org; sonda de comportamiento NO ejecutada (vuelve a ejecutarla con --active)
likely_vulnerable 🟠El marcador de la sonda sobrevivió PERO user-profile.js no está encolado (falta el gadget de auto-disparo publicado)
mitigated 🟣La versión es insegura PERO el marcador de la sonda fue escapado/eliminado/cerrado (backport silencioso o endurecimiento)
likely_patched 🟢Versión oculta/desconocida PERO el marcador de la sonda fue escapado/eliminado
patched 🟢La versión es latest o outdated (tiene backports de seguridad)
not_wordpress ⚫No se detectó huella de WordPress
unreachable ⚫Error de conexión (timeout, SSL, DNS)
inconclusive 🟡Bloqueo del WAF, challenge de Cloudflare, versión oculta sin sonda o ausencia de la página de inicio de sesión
error 🟡Fallo inesperado durante el escaneo