
Инструмент для эксплуатации SQL-инъекций
#BBQSQL# Инструмент для эксплуатации слепой SQL-инъекции
Слепая SQL-инъекция может быть настоящей болью при эксплуатации. Когда доступные инструменты работают, они работают хорошо, но когда они не работают, приходится писать что-то своё. Это отнимает много времени и утомительно. BBQSQL может помочь вам решить эти проблемы.
BBQSQL — это фреймворк для слепой SQL-инъекции, написанный на Python. Он чрезвычайно полезен при атаке на сложные уязвимости SQL-инъекции. BBQSQL также является полуавтоматическим инструментом, допускающим значительную настройку для тех сложных случаев SQL-инъекции. Инструмент спроектирован как независимый от СУБД и очень универсален. Он также имеет интуитивно понятный пользовательский интерфейс, значительно упрощающий настройку атак. Кроме того, реализована библиотека Python gevent, что делает BBQSQL чрезвычайно быстрым.
Мы постарались написать инструмент так, чтобы настройка атаки в интерфейсе была очень понятной. Однако для полноты мы включили подробный Readme, который должен дать вам дополнительное понимание особенностей каждой опции конфигурации. Стоит отметить, что каждая опция конфигурации в интерфейсе имеет своё описание, так что если вы решите запустить инструмент без прочтения этой страницы, вы всё равно сможете пробиться через атаку.
Как и другие инструменты SQL-инъекции, вы предоставляете определённую информацию о запросе.
Необходимо предоставить обычную информацию:
Затем укажите, куда будет вставляться инъекция и какой синтаксис мы инжектируем. Читайте далее для подробностей.
Это должно быть просто, но что есть. Попробуйте выполнить:
sudo pip install bbqsql
Если это не сработает, вы можете установить из исходников. Инструмент требует gevent и requests.
В меню вы увидите место для параметров BBQSQL. Здесь вы указываете следующие опции:
Это описано более подробно ниже в обзоре синтаксиса запросов.
Имя файла для вывода результатов. Оставьте это поле пустым, если не хотите выводить в файл.
BBQSQL использует два метода при проведении атаки слепой SQL-инъекции. Первый и используемый по умолчанию метод — binary_search. См. Википедию для получения дополнительной информации.
Второй метод, который вы можете использовать — frequency_search. Поиск по частоте основан на анализе английского языка для определения частоты, с которой встречается буква. Этот метод поиска очень быстр для неэнтропийных данных, но может быть медленным для неанглийских или запутанных данных.
Вы можете указать либо binary_search, либо frequency_search в качестве значения для этого параметра.
Этот параметр определяет тип SQL-инъекции, которую вы обнаружили. Здесь вы можете установить, какой атрибут HTTP-ответа BBQSQL должен анализировать для определения true/false.
Вы можете указать: status_code, url, time, size, text, content, encoding, cookies, headers или history
Если вы обнаружили SQL-инъекцию, которая приводит к разному коду статуса сервера, установите здесь 'status_code'. Если отличается cookie — установите 'cookie'. Если отличается размер ответа — установите 'size'. Вы поняли суть.
Concurrency основан на библиотеке gevent в Python. Функционально это выглядит как многопоточность, но подробности работы можно увидеть в нашем докладе на DefCon [ссылка вставлена]. Эта настройка управляет степенью параллелизма при выполнении атаки. Это полезно для регулирования запросов и ускорения времени атаки. Для действительно производительных веб-серверов, таких как nginx, мы смогли установить concurrency на 75. По умолчанию установлено значение '30'.
Если вы столкнулись с уязвимостью SQL-инъекции, имеющей некоторые странные особенности (например, нельзя включать определённые символы или такие функции, как ASCII/CHAR, не работают), вы, вероятно, оказывались в ситуации, когда писали какой-то скрипт с собственным синтаксисом инъекции. BBQSQL устраняет необходимость написания скриптов и предоставляет способ вставить ваш собственный синтаксис запроса и легко эксплуатировать уязвимость.
Поле ввода запроса — это место, где вы будете строить запрос для извлечения информации из базы данных. Предполагается, что вы уже обнаружили SQL-инъекцию на уязвимом параметре и протестировали запрос, который работает.
Ниже приведён пример запроса, который вы можете использовать для построения своего запроса.
В этом примере атакующий хочет выбрать версию базы данных:
vulnerable_parameter'; if(ASCII(SUBSTRING((SELECT @@version LIMIT 1 OFFSET ${row_index}) , ${char_index} ,1))) ${comparator:>}ASCII(${char_val}) WAITFOR DELAY '0\:0\:0${sleep}'; --
Синтаксис запроса основан на заполнителях, которые сообщают BBQSQL, как выполнять атаку.
Вам необходимо указать следующие заполнители, чтобы атака сработала. Как только вы поместите их в свой запрос, BBQSQL сделает всё остальное:
${row_index}: Указывает BBQSQL перебирать строки здесь. Поскольку мы используем LIMIT, мы можем просмотреть n-ное количество строк в зависимости от значения ${row_index}.
${char_index}: Указывает BBQSQL, какой символ из подзапроса нужно запрашивать.
${char_val}: Указывает BBQSQL, с чем сравнивать результаты из подзапроса для проверки результата.
${comparator}: Это способ указать BBQSQL, как сравнивать ответы, чтобы определить, истинен результат или нет. По умолчанию используется символ >.
${sleep}: Это необязательный параметр, указывает BBQSQL, куда вставлять количество секунд задержки при выполнении временной SQL-инъекции.
Не все эти заполнители обязательны. Например, если вы обнаружили полу-слепую логическую SQL-инъекцию, вы можете опустить параметр ${sleep}.
BBQSQL имеет множество HTTP-параметров, которые вы можете настроить при подготовке атаки. Как минимум, вы должны указать URL, куда должен быть вставлен запрос инъекции, и метод. Можно задать следующие опции:
Вы указываете, куда нужно вставить запрос инъекции, используя шаблон ${injection}. Без шаблона инъекции инструмент не будет знать, куда вставлять запрос.
Укажите файлы, которые будут отправлены с запросом. Установите значение пути, и BBQSQL позаботится об открытии/включении файла.
HTTP-заголовки, которые будут отправлены с запросами. Это может быть строка или словарь. Например:
{"User-Agent":"bbqsql"}
или
"User-Agent: bbqsql"
Словарь или строка куки, которые будут отправлены с запросом. Например:
{"PHPSESSIONID":"123123"}
или
PHPSESSIONID=123123;JSESSIONID=foobar
Укажите URL, на который должны отправляться запросы.
Это логическое значение, определяющее, будут ли следовать HTTP-перенаправлениям при выполнении запросов.
Укажите HTTP-прокси для запроса в виде словаря. Например:
{"http": "10.10.1.10:3128","https": "10.10.1.10:1080"}