
Script d'exploitation pour CVE-2026-5147, réalisant une injection SQL aveugle booléenne et temporelle contre les interfaces MySQL afin d'extraire la version, la base de données, le schéma et les données. Inclut l'étalonnage, des sous-commandes de dump et des payloads configurables.
Destiné à la validation de vulnérabilités autorisées et aux exercices en environnement contrôlé : exploitation d'injection SQL sur des interfaces vulnérables via blind SQL injection booléenne MySQL (EXP / INSTR ou ASCII) et blind SQL injection temporelle (if + ascii + sleep), avec extraction optionnelle de la version, des noms de bases, des structures de tables et des données (comportement similaire à --dump de sqlmap).
Ne pas utiliser sur des systèmes non autorisés.
pip install requests
CURRENT_USER + INSTR au point d'injection, en utilisant le champ métier de la réponse JSON (par défaut code) pour distinguer les branches « vrai / faux ».-p instr ou ascii).--skip-calibrate : ignore la calibration ci-dessus ; la résolution reste basée sur le booléen + champ JSON, sans bascule automatique vers le temporel (adapté au débogage local).Le nom du champ JSON et la valeur considérée comme « vrai » peuvent être ajustés via --json-code-field et --json-code-true (doivent correspondre à l'API cible).
# Domaine uniquement : concaténation avec le chemin par défaut (voir DEFAULT_API_PATH dans le script)
python cve-2026-5147.py -u target.example.com
# Spécifier HTTPS, un chemin personnalisé et le nom du paramètre injectable
python cve-2026-5147.py -u target.example.com --https --path /api/foo --param id
# Dump complet de la base (volume de requêtes très élevé, à utiliser avec prudence)
python cve-2026-5147.py -u target.example.com dump
# Récupérer uniquement les noms de tables, sans exporter les données
python cve-2026-5147.py -u target.example.com dump --schema-only
La progression et les diagnostics sont envoyés sur stderr, le récapitulatif final sur stdout.
| Paramètre | Description |
|---|---|
-u / --url | Cible (domaine, host:port ou URL complète), obligatoire |
--path | Chemin ajouté après l'hôte si aucune URL complète n'est fournie (chemin d'interface locataire par défaut) |
--https | Utilise https en l'absence de schéma (préfixe http:// par défaut) |
--param | Nom du paramètre injectable (par défaut website) |
-p / --payload | Fragment booléen : instr ou ascii (le temporel utilise fixement if+ascii+sleep) |
--timeout | Délai d'expiration HTTP (secondes) ; en mode temporel, automatiquement au moins sleep+5 |
--sleep | Durée de sleep() pour le blind SQL injection temporel |
--time-floor | Seuil de « vrai » : temps total ≥ cette valeur (secondes) ; par défaut environ sleep - 1 |
--json-code-field / --json-code-true | Champ JSON lu pour le canal booléen et sa valeur « vrai » |
--skip-calibrate | Ignore la calibration par sondes |
--only | version / database / both : récupérer uniquement la version, uniquement le nom de base, ou les deux |
-H / -P | En-têtes HTTP supplémentaires, paramètres de requête additionnels, répétables |
Sous la sous-commande dump, on trouve également --schema-only, --dump-out, --dump-row-limit, --dump-select, etc. Voir python cve-2026-5147.py -h.
| Sous-commande | Signification |
|---|---|
info (par défaut) | Récupère VERSION(), le nom de la base courante DATABASE() (influencé par --only) |
dump | Récupère en plus les noms de tables de la base courante, les colonnes de chaque table et les données des lignes (ou uniquement le schéma, voir --schema-only) |
main(), calibrate_sqli_oracle est d'abord exécuté ; en cas d'échec, effective_detect = "time" et bind_time_payload sont appliqués ; en mode temporel, calibrate_time_oracle est ensuite exécuté.--json-code-field (plus de valeur codée en dur code).command a été corrigée : la sous-commande par défaut est info, et non dump.Ce script est destiné uniquement à la recherche en sécurité et aux tests autorisés. L'utilisateur est seul responsable de la conformité avec les lois locales et du périmètre d'autorisation de l'environnement cible.