>
Ноябрь 2017
Пн Вт Ср Чт Пт Сб Вс
« Окт    
 12345
6789101112
13141516171819
20212223242526
27282930  

Примеры настройки Burp Intruder для автоматического анализа ответов веб сервера.

Часто при аудите веб-приложений требуется проанализировать ответ веб-сервера и на основе его анализа сделать какие-то выводы (желательно в сводную таблицу результатов). Burp Intruder — популярный инструмент для комбинированных атак на параметры HTTP-запроса. Но кроме извлечения данных из HTML-ответов по простейшей регулярке, он не умеет никак их анализировать. Исправим это и прикрутим к Intruder свой кастомный процессинг ответов сервера на Python.

Image result for burp intruder

Задача

Для демонстрации подхода возьмем простую задачу: есть форум, который по URL вида http://forum.local/groups//users/ выдает список юзеров из группы с ID = . Список ID групп есть, их около сотни. Задача: найти группу с наибольшим количеством юзеров, а остальные отсортировать по убыванию.

По URL с ID категории отдается таблица со списком юзеровПо URL с ID категории отдается таблица со списком юзеров

Ответ сервера:

Очевидно, нам нужно распарсить HTML-страничку и подсчитать количество

а затем вывести это значение в таблицу результатов. Burp не предоставляет возможностей стороннего постпроцессинга ответов. Научим его!

Решение

Идея состоит в том, чтобы:

  1. Похукать момент получения ответа сервера.
  2. Обработать его своим кодом.
  3. Добавить результат вычислений в тот же самый ответ в специальном формате и отправить «дальше».
  4. Дальше грепнуть это значение по регулярке штатными средствами Burp Intruder.

Чтобы реализовать этот трюк, нужно написать расширение для Burp Suite. Расширения для Burp пишутся на Java, Ruby или Python. Мы напишем на Python.

Для начала нужно установить Jython. Скачай его, разархивируй в любую папку и укажи Бурпу путь к бинарнику во вкладке Extender => Options => Python environment.

Настраиваем окружение для исполнения Python-расширений в BurpНастраиваем окружение для исполнения Python-расширений в Burp

Для разбора HTML нужно поставить HTML-парсер. Я буду использовать Beautiful Soup. Ставь через pip, но учти, что нужно пользоваться не системным pip’ом, а jython’овским, который лежит в директории бинарника jython (см. предыдущий скрин):

После этого создавай файл response_processor.py и добавляй следующий код:

Кратко:

  1. Получаем body.
  2. Парсим его содержимое.
  3. Считаем количество tr’ов класса user.
  4. Добавляем к body строчку !--USERS:N-->', где N — количество юзеров.

Также в блоке есть пример модификации заголовков HTTP-ответа. Правильнее передавать небольшие значения через X-заголовки, но для демонстрации сойдет и так. Больше комментариев у автора оригинального скрипта на Гитхабе.

Загружаем наше расширение в Burp в соответствующей вкладке.

Активируем наше расширениеАктивируем наше расширение

Пробуем запустить Intruder с ним и видим, что теперь в body и headers дописываются нужные данные.

Модифицированный bodyМодифицированный body

Теперь остается только грепнуть это значение по простейшей регулярке, и вуаля! Обрати внимание, что результаты грепаются как строка, это будет влиять на сортировку.

Разумеется, пример с подсчетом DOM-элементов чисто умозрительный. В реальности ты можешь проводить абсолютно любой постпроцессинг данных с использованием всей мощи Python и пробрасывать данные в таблицу результатов таким нехитрым трюком. Главное, экранируй большие данные, иначе регулярки могут неправильно сработать.

Кстати, перед тем, как писать эту заметку, я засабмиттил тикет разработчику Burp, PortSwigger. В ответ они подтвердили, что штатными средствами или через расширение это сделать нельзя:

You’re right, there isn’t any way to do this natively within Burp. And currently, there is no way for an extension to provide additional data columns in the Intruder attack results.

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

[Всего голосов: 7    Средний: 4/5]
Share Button

Вам может быть интересно также:

Last updated by at .

Leave a Reply

You can use these HTML tags

<a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">