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

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

Life-Hack [Жизнь-Взлом]/Хакинг

#Обучение

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

Что такое SQL-инъекция? 

  • Данные, предоставленные клиентом, передаются в приложение без соответствующей проверки (фильтрации)
  • Обработка этих данных как команд для базы данных

Часто используется для: 

  • Выполнения операций с базой данных
  • Обхода механизмов аутентификации
  • Получения недоступной иным образом информации из базы данных
  • Запись в базу данных такой информации, как новые учетные записи пользователей

Три формы SQL-инъекции:

Существует три основных формы SQL-инъекций, используемых для чтения информации из базы данных. 

  • Перенаправление и изменение формы запроса
  • На основе сообщения об ошибках 
  • Слепая инъекция

Blind SQL Injection 

  • Методы слепой инъекции SQL могут включать формирование запросов, приводящих к логическим значениям, и интерпретации исходящих HTML-страниц
  • SQL-инъекция может привести к серьезной утечке данных и / или атакам модификации данных
  • Слепые атаки, по сути, представляют игру с 20-ю запросами к веб-серверу

Зачем сосредотачиваться на слепых инъекциях? 

  • Слепые инъекции так же распространены, как и любые другие инъекции
  • Такие дыры в системах связаны с ложным чувством безопасности на хостах
  • Требуется больше времени для выполнения ручного проникновения

Преимущества автоматизированного тестирования: 

  • Мы можем задать серверу столько вопросов типа «да / нет», сколько захотим
  • Для поиска первой буквы имени пользователя с помощью двоичного поиска требуется 7 запросов
  • Чтобы найти полное имя пользователя, если оно состоит из 8 символов, требуется 56 запросов
  • Для поиска имени пользователя из 8 символов требуется 6 запросов
  • 62 запроса только на поиск имени пользователя
  • Запросы суммируются
  • Предположим, что каждый запрос занимает 10 секунд
  • Предполагая, что пентестер не ошибается
  • Имя пользователя из 8 символов занимает более десяти минут
  • Что, если нам нужна схема или вся база данных?

Если вы хотите нетривиального проникновения: 

  • Имена таблиц
  • Имена столбцов
  • Актуальные данные

Это может занять часы, дни или больше, в зависимости от размера базы данных.

Звучит просто?

Эффективный инструмент сложнее, чем «Несколько сценариев оболочки и netcat» Пример запроса, переданного через уязвимый к SQL инъекции параметр:

Поиск целых чисел: 

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

Проблема:

Как мы распознаем истинные и ложные страницы с веб-сервера? 

  • Мы воспринимаем распознавание паттернов как должное
  • А нельзя просто сравнить строки?

НЕТ! 

  • Вся суть веб-приложения в том, чтобы иметь динамический контент.
  • Вполне вероятно, что раздел с указанием истинности / ложности не является единственным динамическим содержанием.
  • Сравнение строк подходит для инъекции на основе ошибок, но не для слепой инъекции

Решение первое: поиск по ключевым словам: 

  • Требует прямого вмешательства пользователя
  • Взаимодействие с пользователем требует усилий, которые мы стараемся минимизировать.

Решение второе: сумма MD5 

  • Веб-приложения разработаны, чтобы быть динамическими
  • MD5 вызывает большие изменения на выходе из небольшого изменения входящих данных

Google vs. Hoogle

Сравнение суммы MD5 

  • MD5 плохо обрабатывает изменения
  • Может работать с некоторыми веб-приложениями, но не полностью

Решение третье: механизм распознавания текста 

  • Инструменты различения текста предназначены для выделения информационных изменений, которые нас не интересуют.
  • Много усилий тратится на сохранение информации, которая будет просто отброшена.

Решение четвертое: разобрать дерево HTML 

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

Решение пятое: линейное представление сумм ASCII

small input variation = small output

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

Создание базовых сценариев 

  • Потребуются базовые случаи для сравнения неизвестных
  • Мы уже знаем гарантированные истинные / ложные страницы
  • У нас есть несколько вариантов для известных базовых случаев

Самый простой - 1 = 1 против 1 = 0. 

Образец набора подписей

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

Сравнение диапазона допусков 

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

Сравнение диапазона допусков

Недостатки сравнения диапазона допусков: 

  • Работает, но очень много ненужных сравнений
  • Не использует известные мусорные данные

Субтрактивный фильтр 

  • Мы можем определить равные суммы между конфликтующими базовыми случаями.

Субтрактивный фильтр 

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

Адаптивный фильтр 

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

Два «идентичных» образца

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

Преимущества адаптивного фильтра 

  • На данном этапе толерантность практически не нужна
  • Удаляет наиболее динамический контент, не связанный с утечкой данных

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

Типы данных полей

Сбор типов данных поля выполняется быстрее, но требует знания сопоставления типов:

SQueaL: время работы 

  • Пример веб-приложения привел к более 2700 HTTP-запросам
  • Если мы воспользуемся оценкой «10 секунд» ранее, это заняло бы более 7,5 часов без перерыва
  • Реальная производственная база данных будет еще больше и длиннее

Недостатки / способы устранения 

  • User-Agent
  • Генерация шума / DoS в журнале сервера
  • Суммы HTML могут быть отравлены случайными числами
  • Не «lower the bar» для поиска эксплойтов.
  • Проблемы с отсутствием возврата каретки / автоматически созданного HTML

Принудительный CRLF

Что происходит, когда HTML создается без возврата каретки? 

  • Естественная тенденция к принудительному возврату каретки
  • Это скинет данные

На этом этапе потребуется анализатор HTML.

Вывод 

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

Те же методы можно использовать в других приложениях для интерпретации результатов ответов HTML. 

  • Внедрение XPath
  • Инъекция LDAP

Используйте параметризованный код соответствующим образом для вызова хранимых процедур.​

Источник


Report Page