
Script de explotación para CVE-2026-5147, que realiza inyección SQL ciega basada en booleanos y en tiempo contra interfaces MySQL para extraer versión, base de datos, esquema y datos. Incluye calibración, subcomandos de volcado y payloads configurables.
Orientado a la validación de vulnerabilidades autorizada y prácticas en entornos de laboratorio: realiza inyección SQL Boolean-based blind (EXP / INSTR o ASCII) y Time-based blind (if + ascii + sleep) sobre interfaces con inyección SQL en MySQL, con opción de extraer versión, nombre de base de datos, estructura de tablas y datos (comportamiento similar al --dump de sqlmap).
No lo utilice en sistemas no autorizados.
pip install requests
CURRENT_USER + INSTR al punto de inyección, usando el campo de negocio del JSON de respuesta (por defecto code) para distinguir las ramas «verdadero / falso».-p instr o ascii).--skip-calibrate: omite la calibración anterior; aún así resuelve mediante booleano + campo JSON, sin cambio automático a tiempo (adecuado para depuración local).El nombre del campo JSON que determina «verdadero» y su valor se pueden ajustar mediante --json-code-field y --json-code-true (deben coincidir con la API objetivo).
# Solo dominio: se concatena la ruta predeterminada (ver DEFAULT_API_PATH en el script)
python cve-2026-5147.py -u target.example.com
# Especificar HTTPS, ruta personalizada y nombre del parámetro de inyección
python cve-2026-5147.py -u target.example.com --https --path /api/foo --param id
# Dump completo de la base de datos (volumen de solicitudes extremadamente alto, usar con precaución)
python cve-2026-5147.py -u target.example.com dump
# Solo extraer nombres de tablas, sin exportar datos
python cve-2026-5147.py -u target.example.com dump --schema-only
El progreso y la información de diagnóstico se envían a stderr; el resumen final va a stdout.
| Parámetro | Descripción |
|---|---|
-u / --url | Objetivo (dominio, host:puerto o URL completa), obligatorio |
--path | Ruta que se concatena tras el host cuando no se proporciona una (ruta de interfaz de tipo tenant por defecto) |
--https | Usa https cuando no hay esquema (por defecto añade http://) |
--param | Nombre del parámetro de inyección (por defecto website) |
-p / --payload | Fragmento booleano: instr o ascii (la inyección basada en tiempo usa fijo if+ascii+sleep) |
--timeout | Tiempo de espera HTTP (segundos); al entrar en modo tiempo, automáticamente no será inferior a sleep+5 |
--sleep | Segundos de sleep() para inyección basada en tiempo |
--time-floor | Determina verdadero: tiempo total ≥ este valor (segundos); por defecto aproximadamente sleep - 1 |
--json-code-field / --json-code-true | Campo JSON leído por el canal lateral booleano y su valor «verdadero» |
--skip-calibrate | Omite la calibración con sondas |
--only | version / database / both: extraer solo versión, solo nombre de base de datos o ambos |
-H / -P | Cabeceras de solicitud adicionales, parámetros de consulta extra, repetibles |
El subcomando dump también admite --schema-only, --dump-out, --dump-row-limit, --dump-select, etc.; consulte python cve-2026-5147.py -h.
| Subcomando | Significado |
|---|---|
info (predeterminado) | Extrae VERSION(), nombre de la base de datos actual DATABASE() (afectado por --only) |
dump | Además extrae nombres de tablas de la base de datos actual, nombres de columnas por tabla y datos de filas (o solo esquema, ver --schema-only) |
main() primero se ejecuta calibrate_sqli_oracle; si falla, effective_detect = "time" y bind_time_payload; en modo tiempo se ejecuta calibrate_time_oracle.--json-code-field (ya no está fijado code).command se ha corregido: el subcomando predeterminado es info, no dump.El script es solo para investigación de seguridad y pruebas autorizadas. El usuario es responsable de garantizar el cumplimiento de las leyes locales y el alcance de autorización del entorno objetivo.