Привет! Если ты думаешь, что знаешь всё о 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']
Но другим более элегантным вариантом является использование макросов.
Разбираем на практике
Итак, давайте посмотрим на описание задания:
![](https://habrastorage.org/getpro/habr/upload_files/08d/160/58b/08d16058b0ce7689981e37c51968dc0c.png)
Тут понятно. Рассмотрим логику работы авторизации.
![](https://habrastorage.org/getpro/habr/upload_files/e62/17d/277/e6217d277b1e9ce681215a4b1961ea36.png)
GET /login -> POST /login -> GET /login2 -> POST /login2
Стоить отметить, что при двух неудачных попытках ввода проверочного кода, нас редиректит на /login. Также важно учесть, что мы используем "одноразовый" CSRF токен перед каждым POST запросом, который получаем в ответе от сервера на GET /login и GET /login2:
![](https://habrastorage.org/getpro/habr/upload_files/492/57b/14a/49257b14a7c49aeb22e51470f354d3f3.png)
Теперь мы знаем, что необходимо регулярно обновлять токен. С этой задачей нам помогут макросы.
Для этого перейдем в Project options -> Sessions -> Session Handling Rules -> Add
![](https://habrastorage.org/getpro/habr/upload_files/35b/f99/b05/35bf99b0565549e04cdd18b44eb4302a.png)
Сразу выберем скоуп:
![](https://habrastorage.org/getpro/habr/upload_files/510/48f/653/51048f65349ee4db3a2987919265bc90.png)
Теперь создадим новое правило "Run a macro"
![](https://habrastorage.org/getpro/habr/upload_files/93a/72f/75c/93a72f75c066432b71ec40038cdda5a6.png)
Создадим макро, нажав на "Add"
![](https://habrastorage.org/getpro/habr/upload_files/4f6/239/78b/4f623978bc1f8e7143633905ef5ff517.png)
В данном окне выбираем необходимую последовательность запросов. В нашем случае,- это GET /login POST /login GET /login2
![](https://habrastorage.org/getpro/habr/upload_files/f4f/8d7/729/f4f8d7729073eb276b223c9417386c27.png)
На всякий случай, лучше убедиться, что всё работает, нажав на кнопку "Test macro"
![](https://habrastorage.org/getpro/habr/upload_files/ef4/e26/834/ef4e26834e0109ecddaecb42388f98c7.png)
Как видим, макрос успешно создан:
![](https://habrastorage.org/getpro/habr/upload_files/31f/40a/528/31f40a52812f22335e7c078a43ab83d3.png)
Теперь перейдем в Intruder и настроим его нужным образом
![](https://habrastorage.org/getpro/habr/upload_files/0fb/de0/60a/0fbde060a4f2c4be68af5e626a8a846f.png)
![](https://habrastorage.org/getpro/habr/upload_files/c9b/a13/c4a/c9ba13c4acf403f7083dd6d82a31eb3e.png)
![](https://habrastorage.org/getpro/habr/upload_files/28e/517/1de/28e5171de4a37a8529e8654193bc7a5e.png)
И запустим:
![](https://habrastorage.org/getpro/habr/upload_files/ca8/bdc/10a/ca8bdc10a15f9098148292b9d6d39fff.png)
Бинго! Мы смогли автоматизировать достаточно нудный процесс. Стоит учитывать, что в данном примере, данный способ требует "4 запроса на 1 запрос", что значительно тормозит скорость выполнения задачи. В любом случае, данный функционал является очень удобным и полезным для автоматизации некоторых процессов. Удачи!
P.S. Когда узнал, что Burp так умеет, очень удивился и решил поделиться с народом. Может, кто-то тоже не знал :)