
Script di exploit per CVE-2026-5147, che esegue SQL injection blind boolean e basata sul tempo contro interfacce MySQL per estrarre versione, database, schema e dati. Include calibrazione, sottocomandi di dump e payload configurabili.
Per la verifica delle vulnerabilità autorizzata e l'esercitazione in lab: esegue blind SQL injection MySQL (booleana tramite EXP / INSTR o ASCII e temporale tramite if + ascii + sleep) su endpoint vulnerabili a SQL injection, con opzione per estrarre versione, nomi dei database, struttura delle tabelle e dati (comportamento simile a --dump di sqlmap).
Non utilizzare su sistemi non autorizzati.
pip install requests
CURRENT_USER + INSTR al punto di iniezione, distinguendo i rami «vero / falso» tramite il campo business nel JSON di risposta (predefinito code).-p instr o ascii).--skip-calibrate: salta la calibrazione sopra descritta; continua comunque con la risoluzione booleana + campo JSON, senza passare automaticamente alla temporale (adatto per debug locale).Il nome del campo JSON e il valore che determinano il «vero» possono essere regolati tramite --json-code-field e --json-code-true (devono corrispondere all'API di destinazione).
# Solo dominio: concatenazione del percorso predefinito (vedi DEFAULT_API_PATH nello script)
python cve-2026-5147.py -u target.example.com
# Specifica HTTPS, percorso personalizzato e nome del parametro di iniezione
python cve-2026-5147.py -u target.example.com --https --path /api/foo --param id
# Dump completo del database (volume di richieste molto elevato, usare con cautela)
python cve-2026-5147.py -u target.example.com dump
# Solo nomi delle tabelle, senza esportare i dati
python cve-2026-5147.py -u target.example.com dump --schema-only
Avanzamento e informazioni diagnostiche su stderr, riepilogo finale su stdout.
| Parametro | Descrizione |
|---|---|
-u / --url | Target (dominio, host:porta o URL completo), obbligatorio |
--path | Percorso da concatenare all'host quando non specificato (predefinito: percorso API tenant) |
--https | Usa https quando manca lo schema (predefinito: aggiunge http://) |
--param | Nome del parametro di iniezione (predefinito website) |
-p / --payload | Frammento booleano: instr o ascii (per la temporale è fisso if+ascii+sleep) |
--timeout | Timeout HTTP (secondi); in modalità temporale non scende automaticamente sotto sleep+5 |
--sleep | Secondi di sleep() per la blind SQL injection temporale |
--time-floor | Soglia per «vero»: tempo totale ≥ questo valore (secondi); predefinito circa sleep - 1 |
--json-code-field / --json-code-true | Campo JSON letto dal canale laterale booleano e relativo valore «vero» |
--skip-calibrate | Salta la calibrazione con i probe |
--only | version / database / both: solo versione, solo nome database o entrambi |
-H / -P | Header di richiesta aggiuntivi, parametri di query extra, ripetibili |
Sotto il sottocomando dump sono disponibili anche --schema-only, --dump-out, --dump-row-limit, --dump-select, ecc.; vedi python cve-2026-5147.py -h.
| Sottocomando | Significato |
|---|---|
info (predefinito) | Recupera VERSION(), nome del database corrente DATABASE() (influenzato da --only) |
dump | Recupera inoltre i nomi delle tabelle del database corrente, le colonne di ciascuna tabella e i dati delle righe (o solo lo schema, vedi --schema-only) |
main() viene prima eseguita calibrate_sqli_oracle; in caso di fallimento effective_detect = "time" e bind_time_payload; in modalità temporale viene poi eseguita calibrate_time_oracle.--json-code-field (non più hardcoded code).command è stato corretto: il sottocomando predefinito è info, non dump.Lo script è destinato esclusivamente alla ricerca sulla sicurezza e ai test autorizzati. L'utente è tenuto a garantire la conformità alle leggi locali e all'ambito di autorizzazione dell'ambiente di destinazione.