Що нового?

Article Blind SQL Injection - Методы Автоматизации

Vander 0

Vander

Команда форуму
10 Лис 2019
498
1,162
Приветствую уважаемую аудиторию форума protey.net

blind-sql-injection (1).png

В этой статье мы поговорим о Blind SQL Injections и способах автоматизации их эксплуатации.

Что такое SQL-инъекция?
  • Данные, предоставленные клиентом, передаются в приложение без соответствующей проверки (фильтрации)
  • Обработка этих данных как команд для базы данных
Часто используется для:
  • Выполнения операций с базой данных
  • Обхода механизмов аутентификации
  • Получения недоступной иным образом информации из базы данных
  • Запись в базу данных такой информации, как новые учетные записи пользователей
Три формы SQL-инъекции:

Существует три основных формы SQL-инъекций, используемых для чтения информации из базы данных.
  • Перенаправление и изменение формы запроса
  • На основе сообщения об ошибках
  • Слепая инъекция
Blind SQL Injection
  • Методы слепой инъекции SQL могут включать формирование запросов, приводящих к логическим значениям, и интерпретации исходящих HTML-страниц
  • SQL-инъекция может привести к серьезной утечке данных и / или атакам модификации данных
  • Слепые атаки, по сути, представляют игру с 20-ю запросами к веб-серверу
Зачем сосредотачиваться на слепых инъекциях?
  • Слепые инъекции так же распространены, как и любые другие инъекции
  • Такие дыры в системах связаны с ложным чувством безопасности на хостах
  • Требуется больше времени для выполнения ручного проникновения
Преимущества автоматизированного тестирования:
  • Мы можем задать серверу столько вопросов типа «да / нет», сколько захотим
  • Для поиска первой буквы имени пользователя с помощью двоичного поиска требуется 7 запросов
  • Чтобы найти полное имя пользователя, если оно состоит из 8 символов, требуется 56 запросов
  • Для поиска имени пользователя из 8 символов требуется 6 запросов
  • 62 запроса только на поиск имени пользователя
  • Запросы суммируются
  • Предположим, что каждый запрос занимает 10 секунд
  • Предполагая, что пентестер не ошибается
  • Имя пользователя из 8 символов занимает более десяти минут
  • Что, если нам нужна схема или вся база данных?
Если вы хотите нетривиального проникновения:
  • Имена таблиц
  • Имена столбцов
  • Актуальные данные
Это может занять часы, дни или больше, в зависимости от размера базы данных.

Звучит просто?
Эффективный инструмент сложнее, чем «Несколько сценариев оболочки и netcat»

Пример запроса, переданного через уязвимый к SQL инъекции параметр:

sql.jpg


sql2.jpg


sql3.jpg

Поиск целых чисел:
  • Выберите диапазон (обычно начиная с 0)
  • Увеличивайте значение экспоненциально в два раза, пока не будет обнаружен верхний предел
  • Разделение на полпути между верхним пределом и предыдущим значением
  • Продолжайте делить секции пополам, пока не останется одно значение
Проблема:

Как мы распознаем истинные и ложные страницы с веб-сервера?
  • Мы воспринимаем распознавание паттернов как должное
  • А нельзя просто сравнить строки?
НЕТ!
  • Вся суть веб-приложения в том, чтобы иметь динамический контент.
  • Вполне вероятно, что раздел с указанием истинности / ложности не является единственным динамическим содержанием.
  • Сравнение строк подходит для инъекции на основе ошибок, но не для слепой инъекции
sql4.jpg

Решение первое: поиск по ключевым словам:
  • Требует прямого вмешательства пользователя
  • Взаимодействие с пользователем требует усилий, которые мы стараемся минимизировать.
Решение второе: сумма MD5
  • Веб-приложения разработаны, чтобы быть динамическими
  • MD5 вызывает большие изменения на выходе из небольшого изменения входящих данных
Google vs. Hoogle

sql5.png

Сравнение суммы MD5
  • MD5 плохо обрабатывает изменения
  • Может работать с некоторыми веб-приложениями, но не полностью
Решение третье: механизм распознавания текста
  • Инструменты различения текста предназначены для выделения информационных изменений, которые нас не интересуют.
  • Много усилий тратится на сохранение информации, которая будет просто отброшена.
Решение четвертое: разобрать дерево HTML
  • Представлять текст как HTML-объекты в древовидной структуре данных.
  • Ищите различия в форме деревьев.
  • Если изменяются только данные без разметки, не будет возможности продолжить автоматизацию.
  • Проще реализовать парсер xhtml, чем реалистичный парсер html.
Решение пятое: линейное представление сумм ASCII

small input variation = small output

1599831222979.png

Сравнение подписей

Создание базовых сценариев
  • Потребуются базовые случаи для сравнения неизвестных
  • Мы уже знаем гарантированные истинные / ложные страницы
  • У нас есть несколько вариантов для известных базовых случаев
Самый простой - 1 = 1 против 1 = 0.
Образец набора подписей

sql6.png

Реалистичный набор подписи

1599831452426.png

Сравнение диапазона допусков
  • Незначительные изменения в текстовом содержании приводят к небольшим общим изменениям в сумме
  • Изменения все еще происходят
  • Допускание значений вместо точного сравнения в суммах снижает количество ложноотрицательных результатов
Код:
| Σknown – Σunknown    | / Σknown
Сравнение диапазона допусков

1599831654478.png

Недостатки сравнения диапазона допусков:
  • Работает, но очень много ненужных сравнений
  • Не использует известные мусорные данные
Субтрактивный фильтр
  • Мы можем определить равные суммы между конфликтующими базовыми случаями.
1599831783132.png

Субтрактивный фильтр
  • Это можно комбинировать с диапазоном допуска, чтобы исключить ненужные сравнения

1599831849826.png

Адаптивный фильтр
  • Позволяет профилировать приложение перед тестированием на неизвестные
  • Удаляет ненужные данные, которые могут исказить результаты
  • Требуется несколько базовых случаев
Два «идентичных» образца

1599831940921.png

Применен адаптивный фильтр

1599832016906.png

Преимущества адаптивного фильтра
  • На данном этапе толерантность практически не нужна
  • Удаляет наиболее динамический контент, не связанный с утечкой данных
SQueaL
  • SQueaL был создан параллельно с представляемым исследованием
  • Написан на C # для Windows и Linux.
  • Доступны графические интерфейсы Windows.Forms и Gtk-Sharp.
  • Бесплатно для некоммерческого использования
  • Экспорт данных в формат XML для удобного представления клиентам / PHB.
SQueaL: экспорт данных
  • SQueaL использует собственный формат XML для сохранения данных эксплойтов.
Код:
<SQueaLdata version="0.01a">
<target address="vulnerable.org:8080/test.php" method="GET" ssl="False">
<parameter name="prod_id" value="2" injectable="True" />
</target>

<attackvector name="prod_id" buffer="2" type="BlindTSQLInjection">
<truepage>
<signature-item>3029</signature-item>
<signature-item>3897</signature-item>
<signature-item>572</signature-item>
...
Сбор информации о таблицах:

Начнем с идентификации номера каждой таблицы:

Код:
... AND (SELECT COUNT(name) FROM sysobjects WHERE xtype=char(85)) > search_value


... AND (SELECT MIN(id) FROM sysobjects WHERE id >    prev_table_id AND
xtype=char(85)) > search_value
Дополнительная информация о таблице:

Теперь мы можем получить имя каждой таблицы:

Код:
... AND (SELECT TOP 1 LEN(name) FROM sysobjects WHERE id= table_id AND
xtype=char(85)) > search_value

... AND (SELECT ASCII(SUBSTRING(name,
character_counter ,1)) FROM sysobjects WHERE id=table_id) > search_value
Сбор информации о полях:

Получив информацию о таблице, мы можем перейти к полям.

Код:
... AND (SELECT COUNT(name) FROM syscolumns WHERE id=table_id) > search_value

... AND (SELECT MIN(colid) FROM syscolumns WHERE colid > prev_colid AND id=table_id)
> search_value
Код:
... AND (SELECT TOP 1 LEN(name) FROM sysobjects WHERE id=table_id AND colid=colid) > search_value

... AND (SELECT ASCII(SUBSTRING(name,
character_counter, 1)) FROM syscolumns WHERE id=table_id AND colid=colid) > search_value

... AND (SELECT TOP 1 (xtype) FROM syscolumns WHERE id=table_id AND colid=colid) > search_value
Типы данных полей
Сбор типов данных поля выполняется быстрее, но требует знания сопоставления типов:

1599832548754.png

SQueaL: время работы
  • Пример веб-приложения привел к более 2700 HTTP-запросам
  • Если мы воспользуемся оценкой «10 секунд» ранее, это заняло бы более 7,5 часов без перерыва
  • Реальная производственная база данных будет еще больше и длиннее
Недостатки / способы устранения
  • User-Agent
  • Генерация шума / DoS в журнале сервера
  • Суммы HTML могут быть отравлены случайными числами
  • Не «lower the bar» для поиска эксплойтов.
  • Проблемы с отсутствием возврата каретки / автоматически созданного HTML
Принудительный CRLF

Что происходит, когда HTML создается без возврата каретки?
  • Естественная тенденция к принудительному возврату каретки
  • Это скинет данные
На этом этапе потребуется анализатор HTML.

Вывод
  • Те же методы можно использовать с запросами, указывающими на недопустимый SQL.
  • Относитесь к ним как к вопросам, типа «Правильный ли этот синтаксис?» что в настоящее время yes / no?
  • MD5 не сильно хорош для этих целей
Те же методы можно использовать в других приложениях для интерпретации результатов ответов HTML.
  • Внедрение XPath
  • Инъекция LDAP
Используйте параметризованный код соответствующим образом для вызова хранимых процедур.
 
Угорі Унизу