
Exploit di SQL injection blind basata sul tempo multi-thread per CVE-2026-14762 che ha come target Hotel & Tourism Reservation 1.0. Enumera database, tabelle e colonne; legge file tramite LOAD_FILE; scrive webshell PHP per RCE. Supporta proxy, scansione batch e shell SQL interattiva.
Exploit di SQL injection blind time‑based, multi‑thread e completo per CVE‑2026‑14762.
Prende di mira l'endpoint /admin/rooms.php dell'applicazione Code‑Projects Hotel & Tourism Reservation (versione 1.0).
Consente l'enumerazione completa del database, la lettura del file system (LOAD_FILE) e la scrittura arbitraria di file (INTO OUTFILE / DUMPFILE) – portando all'esecuzione remota di codice tramite il deploy di una webshell.

requestsurllib3colorama (opzionale – per output colorato nel terminale)Installa tutte le dipendenze con:
git clone https://github.com/tc4dy/CVE-2026-14762-PoC-Exploit.git
cd CVE-2026-14762-PoC-Exploit
chmod +x exploit.py or basic_exploit.py
git clone https://github.com/tc4dy/CVE-2026-14762-PoC-Exploit.git
cd CVE-2026-14762-PoC-Exploit
chmod +x exploit.py or basic_exploit.py
Il parametro delete viene iniettato con:
150' AND IF(<condition>, SLEEP(<delay>), 0) AND '1'='1
La funzione IF() valuta la condizione; se vera, il database rimane in attesa per secondi. Estrazione dei caratteri tramite ricerca binaria
Per ogni posizione del carattere, una ricerca binaria sull'intervallo ASCII (32–126) determina il carattere corretto utilizzando i confronti > e =. Ciò riduce le richieste da 95 per carattere a ~7–8, rendendo l'estrazione estremamente efficiente. Enumerazione dei metadati
Nome del database: SELECT DATABASE()
Tabelle: SELECT table_name FROM information_schema.tables WHERE table_schema='<db>' LIMIT n,1
Colonne: SELECT column_name FROM information_schema.columns WHERE table_schema='<db>' AND table_name='<table>' LIMIT n,1
Esfiltrazione dei dati
SELECT <col> FROM <table> LIMIT row,1 – estrae riga per riga
Ogni cella viene estratta carattere per carattere utilizzando la stessa tecnica di ricerca binaria
Interazione con il file system
Lettura: LOAD_FILE('/path/to/file') – richiede che secure_file_priv sia vuoto o punti alla directory di destinazione
Scrittura: SELECT '<content>' INTO OUTFILE '/path/to/shell.php' – richiede il privilegio FILE e che secure_file_priv non sia restrittivo
Questo strumento è fornito esclusivamente per test di sicurezza autorizzati, ricerca educativa e valutazione delle vulnerabilità. L'autore non è responsabile per qualsiasi uso improprio, attività illegali o danni causati da questo software. Ottenere sempre il permesso scritto esplicito dal proprietario del sistema prima di eseguire qualsiasi test.
| Categoria | Capacità |
|---|
| Vulnerabilità | SQL injection blind time‑based (CWE‑89) |
| Vettore d'attacco | GET /admin/rooms.php?delete=<payload> |
| Sfruttamento | Iniezione condizionale SLEEP() con estrazione caratteri tramite ricerca binaria |
| Database | Estrazione del nome del database corrente |
| Schema | Enumerazione di tabelle e colonne tramite information_schema |
| Dump dei dati | Esportazione completa della tabella (JSON) – righe illimitate, limite configurabile |
| Lettura file | LOAD_FILE() – legge qualsiasi file leggibile da MySQL (es. /etc/passwd, file di configurazione) |
| Scrittura file | INTO OUTFILE / DUMPFILE – scrive webshell PHP, backdoor o contenuti arbitrari |
| Shell interattiva | Shell SQL live (estrazione time‑based) per query manuali |
| Query singola | Esegue SQL ad‑hoc e recupera i risultati (limite 512 caratteri) |
| Modalità batch | Scansione multi‑target con thread pool configurabile (ThreadPoolExecutor) |
| Supporto proxy | Proxy HTTP/HTTPS (Burp Suite, mitmproxy, ecc.) |
| Logging verboso | Output colorato con informazioni di debug con timestamp |
| Zero dipendenze | Solo requests, urllib3 e colorama (opzionale) |
| Argomento | Breve | Tipo | Predefinito | Descrizione |
|---|
--target | -t | URL | — | URL del singolo target (es. http://192.168.1.100) |
--target-file | -l | File | — | File contenente l'elenco dei target (uno per riga) |
--threads | — | Int | 5 | Numero di thread per la scansione multi-target |
--output | -o | Path | — | File di output (JSON per i dump, testo grezzo per i file) |
--verbose | -v | Flag | False | Abilita il logging di debug verboso |
--proxy | — | URL | — | Proxy HTTP/HTTPS (es. http://127.0.0.1:8080) |
--user-agent | -ua | String | Mozilla/5.0... | Header User-Agent personalizzato |
--delay | — | Float | 5.0 | Tempo di attesa in secondi per l'iniezione blind |
--max-retries | — | Int | 3 | Numero massimo di tentativi di richiesta |
--ssl-verify | — | Flag | False | Abilita la verifica del certificato SSL |
--webroot | — | Path | /var/www/html | Webroot per la scrittura di webshell tramite INTO OUTFILE |
--dump-db | — | Flag | False | Esegue il dump di tutte le tabelle del database corrente |
--tables | — | Flag | False | Elenca solo i nomi di tutte le tabelle |
--dump-table | — | Table | — | Esegue il dump di una tabella specifica (es. --dump-table users) |
--read | — | Path | — | Legge un file tramite LOAD_FILE() |
--write-shell | — | Flag | False | Scrive una webshell PHP (shell.php) nella webroot |
--sql | — | Query | — | Esegue una singola query SQL (restituisce al massimo 512 caratteri) |
--interactive | -i | Flag | False | Avvia una shell SQL interattiva dopo lo sfruttamento |