
Este repositorio contiene un kit de herramientas práctico de investigación y validación para CVE-2025-4396, una inyección SQL ciega basada en tiempo no autenticada que afecta al plugin Relevanssi de WordPress a través del parámetro `cats`.
Este repositorio contiene un kit práctico de investigación y validación para CVE-2025-4396, una Inyección SQL Ciega Basada en Tiempo sin autenticación que afecta al plugin Relevanssi de WordPress a través del parámetro cats.
El proyecto fue creado para ejercicios autorizados de Purple Team con el fin de:
El repositorio incluye:
Aviso legal
Este proyecto se proporciona únicamente con fines educativos, validación defensiva y pruebas de seguridad autorizadas.
No lo utilice contra sistemas que no posea o para los que no tenga permiso explícito por escrito para evaluar.
CVE-2025-4396 es una vulnerabilidad de Inyección SQL que afecta a la funcionalidad de búsqueda de Relevanssi en WordPress.
En el escenario probado, el problema es accesible a través del flujo de búsqueda y, más específicamente, a través del parámetro cats. La ruta de código vulnerable permite que la entrada controlada por el atacante influya en la consulta SQL generada por el plugin.
Debido a que el punto final vulnerable es accesible sin autenticación previa, la falla puede ser explotada por un atacante remoto para realizar una inyección SQL sin autenticación.
El impacto práctico incluye:
La vulnerabilidad existe porque la entrada controlada por el usuario proveniente de un parámetro relacionado con la búsqueda no se maneja de forma segura antes de incorporarse a una consulta SQL.
En la práctica, esto significa que un atacante puede inyectar expresiones SQL en la lógica de consulta del backend y forzar a la base de datos a evaluar condiciones adicionales.
La vulnerabilidad se explota en modo ciego, lo que significa que la aplicación no muestra directamente errores SQL ni resultados sin procesar de la base de datos.
En lugar de leer la salida de la consulta desde la página, el atacante le hace a la base de datos una serie de preguntas de verdadero/falso y observa un efecto secundario:
La explotación se basa en funciones SQL como SLEEP() para crear una diferencia medible en el tiempo de respuesta del servidor.
Esto permite a un atacante inferir datos sin verlos directamente.
Por ejemplo, el atacante puede hacer preguntas como:
$?"Al repetir este proceso, el atacante puede reconstruir un hash completo carácter por carácter.
El enfoque estándar itera a través de un conjunto de caracteres conocido y prueba cada candidato uno por uno.
Para cada posición en el hash objetivo:
Este método es simple y confiable, pero relativamente lento porque puede requerir muchas solicitudes por carácter.
El enfoque más rápido utiliza una búsqueda binaria sobre el valor ASCII de cada carácter.
En lugar de preguntar:
a?"b?"c?"pregunta:
Esto divide el espacio de búsqueda a la mitad en cada solicitud y reduce drásticamente el número de peticiones HTTP.
El ataque permite al operador extraer el valor user_pass de wp_users, típicamente para un ID de usuario de WordPress elegido, como:
1 para el administrador predeterminado,En versiones recientes de WordPress, este valor puede usar el nuevo pipeline de contraseñas de WordPress 6.8+, que combina:
CVE_2025_4396.pyEste es el script de extracción estándar.
Realiza una Inyección SQL Ciega Basada en Tiempo clásica y extrae el hash objetivo carácter por carácter mediante una búsqueda lineal sobre un conjunto de caracteres fijo.
Para cada posición de carácter:
python3requestsurllib3pip3 install requests urllib3
python3 CVE_2025_4396.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v
Argumentos :
-t, --target : URL objetivo vulnerable incluyendo el parámetro inyectable
-u, --userid : ID de usuario de WordPress al que apuntar
-s, --sleep : umbral de sueño en segundos
-v, --verbose : habilita el registro de depuración
CVE_2025_4396_Stealth.pyEsta es la edición de búsqueda binaria.
Realiza el mismo objetivo de extracción que el script estándar, pero reemplaza la búsqueda lineal carácter por carácter con una búsqueda binaria sobre valores ASCII.
Para cada posición:
python3requestsurllib3pip3 install requests urllib3
python3 CVE_2025_4396_Stealth.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v