Раскрываем секретные функции: магия макросов в Burp Suite

Привет! Если ты думаешь, что знаешь всё о Burp Suite, я тебя удивлю! Этот мощный инструмент для тестирования веб-приложений скрывает в себе ещё больше возможностей, способных значительно упростить и ускорить работу. Сегодня мы изучим функционал макросов на практике и увидим, как они могут стать надежным помощником в процессе тестирования и анализа веб-приложений.

Немножко вводной информации

P.S. Доступно в Pro версии*

Совсем недавно я решал лабораторную работу «Обход 2FA с помощью грубой силы» на PortSwigger’e, где было необходимо перед каждым запросом обновлять CSRF-Token. Безусловно, можно реализовать скрипт, который перед каждой итерацией будет делать GET запрос к нужной странице и парсить токен, например:

def get_csrf_token(text):
    soup = BeautifulSoup(text, 'html.parser')
    return soup.find('input', attrs={'name': 'csrf'})['value']

Но другим более элегантным вариантом является использование макросов.

Разбираем на практике

Итак, давайте посмотрим на описание задания:

08d16058b0ce7689981e37c51968dc0c.png

Тут понятно. Рассмотрим логику работы авторизации.

e6217d277b1e9ce681215a4b1961ea36.png

GET /login → POST /login → GET /login2 → POST /login2

Стоить отметить, что при двух неудачных попытках ввода проверочного кода, нас редиректит на /login. Также важно учесть, что мы используем «одноразовый» CSRF токен перед каждым POST запросом, который получаем в ответе от сервера на GET /login и GET /login2:

49257b14a7c49aeb22e51470f354d3f3.png

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

Для этого перейдем в Project options → Sessions → Session Handling Rules → Add

35bf99b0565549e04cdd18b44eb4302a.png

Сразу выберем скоуп:

51048f65349ee4db3a2987919265bc90.png

Теперь создадим новое правило «Run a macro»

93a72f75c066432b71ec40038cdda5a6.png

Создадим макро, нажав на «Add»

4f623978bc1f8e7143633905ef5ff517.png

В данном окне выбираем необходимую последовательность запросов. В нашем случае,- это GET /login POST /login GET /login2

f4f8d7729073eb276b223c9417386c27.png

На всякий случай, лучше убедиться, что всё работает, нажав на кнопку «Test macro»

ef4e26834e0109ecddaecb42388f98c7.png

Как видим, макрос успешно создан:

31f40a52812f22335e7c078a43ab83d3.png

Теперь перейдем в Intruder и настроим его нужным образом

0fbde060a4f2c4be68af5e626a8a846f.pngc9ba13c4acf403f7083dd6d82a31eb3e.png28e5171de4a37a8529e8654193bc7a5e.png

И запустим:

ca8bdc10a15f9098148292b9d6d39fff.png

Бинго! Мы смогли автоматизировать достаточно нудный процесс. Стоит учитывать, что в данном примере, данный способ требует »4 запроса на 1 запрос», что значительно тормозит скорость выполнения задачи. В любом случае, данный функционал является очень удобным и полезным для автоматизации некоторых процессов. Удачи!

P.S. Когда узнал, что Burp так умеет, очень удивился и решил поделиться с народом. Может, кто-то тоже не знал :)

© Habrahabr.ru