Автор petrinh1988
Источник https://xss.pro
В этой статье предлагаю подробно разобраться в работе с Intruder. Предполагается, что у читателя уже есть базовые знания по использованию интрудера:
Я коснусь некоторых вещей, которые считаю базовыми, но не всегда явными. Но сделаю это по минимуму. Цель статьи расширить у читателя понимание интрудера, показать некоторые техники и возможности по расширению. А получится ли у меня достигнуть этой цели или нет, решать вам. Не стесняйтесь поделиться своим мнением, даже если оно из серии “статья туфта, а автор нуб”.
В статье поговорим про генерацию и модификацию пэйлоадов, использование макросов для подстановок, а также немного по-программируем. Да, будет часть касающаяся кода. Покажу, как можно генерировать полезную нагрузку и модифицировать при помощи расширения. На мой взгляд, самым интересным будет кусок про написание итогового куска кода, который оптимизирует парсина имени файла через SQLi
Что касается нумерации точек инъекции, она происходит слева направо и сверху вниз по порядку. Не имеет значения в какой очередности точки инъекции добавлялись, только их порядок. Максимальное количество точек инъекции — 20. Но будьте внимательны, лучше не жестить.
Отличия в типах атаки:
Пример использования атаки типа “таран”. Задача: есть ресурс с потенциальной возможностью обойти авторизацию при помощи sql-инъекции. Для решения, закидываю запрос в интрудер, проставляю точки инъекции во все параметры POST-запроса. В качестве словаря полезных нагрузок выбираю Simple list” и гружу словарь с SQLi из Seclists из папки фаззинга.
Сугубо для примера, брутфорс логина и пароля с использованием в качестве словаря логинов топ из Seclists. Словарем паролей выступает известный всем rockyou.txt. Проблема в том, что рокью огромный. Почти 140 мегабайт и более 8 миллионов паролей. Загружать его в интерфейс Burp — это безумие. Поэтому, при выборе типа нагрузок указываю “Runtime file”
Вообще, есть смысл потратить время на досуге и попробовать разные типы нагрузок.
Для примера, собрал небольшой проект, который прикреплен в виде архива к статье. Скачайте, разархивируйте и запустите через “docker-compose up -d”.
После можно открыть проект по ссылке:
http://localhost/usernames/index.php
Это обычная форма авторизации, уязвимая для перечисления логинов. Если логин не существует, страница сообщит об этом пользователю. Сообщение, когда пользователь есть, но пароль не подходит, отличается.
Запрос:
Соответственно, будем использовать тип атаки “снайпер”. Точка инъекции — username. Результат атаки:
Так как проект сильно упрощен, правильные логины можно легко увидеть, проранжировав результаты по длине. Но, в случае с динамическим контентом это не сработает. Чтобы исправить ситуацию, достаточно добавить условие в “Grep - Extract” в настройках интрудера. Переходим в Settings на закладке интрудера, находим соответствующий блок и жмем “Add”. Увидим следующую форму:
В интрудер можно отправить только выполненный запрос, если говорить о подкапотном пространстве Burp, это объект IHttpRequestResponse. Более подробно можно почитать в моих статьях про написание расширений для Burp. К чему я? Так как запрос выполнен, у нас есть ответ и Burp его заботливо выдаст нам в конструкторе Grep - Extract. В данном случае, можно не заморачиваться с регулярными выражениями, а просто выделить искомый текст и бёрп автоматически сгенерирует условия для поиска строки. Остается только нажать ок и заново запустить атаку.
Можно добавить негативный фильтр::
В итоге, видим только успешные попытки:
Да, пример можно назвать больше надуманным. Подобные формы, которые сообщают есть ли пользователь, встречаются все реже, но встречаются. Да и в целом, в своих статьях стремлюсь демонстрировать именно принци. А уж как его примените, это отдельная история. Может вам потребуется отфильтровать неуспешные попытки загрузить shell…
http://localhost/usernames-csrf/index.php
Результат работы интрудера будет выглядеть так:
В данном случае, все сломает CSRF. Чтобы это исправить, потребуется перед каждой итерацией интрудера делать запрос к странице с формой, получать оттуда токен и подкладывать его в запрос. Не волнуемся! Все окей, в этом нам помогут макросы Burp.
Перед основными действиями, удалите все куки для localhost, в ином случае, наложатся одни на другие и получится хренотень. Очистили куки, включили проксирование через Burp, заново зашли на форму авторизации с CSRF. Теперь у нас есть чистый GET-запрос. Не забываем добавить наш домен в scope и можно приступать к созданию макроса.
Чтобы создать макрос, открываю настройки самого Burp (settings в правом верхнем углу) и перехожу в раздел “Sessions”. В самом низу экрана, есть раздел “Macros”. Жмем добавить новый:
Burp сразу попросит нас выбрать запрос, который должен обрабатывать макрос. Да, перед тем как создать макрос не забудьте выполнить нужный запрос. Главный объект Burp это запрос-ответ, иначе ему не с чем работать.
Выбрать надо именно GET-запрос. POST уже ждет готовый CSRF:
Жмем “Ок” и видим следующее окно:
Нам нужно слегка поправить настройки, поэтому жмем “Configure Item”. В появившемся окошке снимаю галочку “Use cookie from the session handling cookie jar in request”. Нам нужно, чтобы GET-запрос макроса отправлялся чистым, без каких-либо кук.
В некоторых случаях, нужно заморочиться больше и поработать с “Custom parameter locations in response”, выделив конкретные куски текста из ответа в переменные для дальнейшего использования. Например, если в результате SQLi мы получим строку вида “логин:хэш_пароля”, можем разбить её отдельно на login и password. Тогда надо внизу нажать на “Add”, откроется мастер как в Grep Extract, в котором можно будет указать конкретные позиции для переменной, или выделить нужную часть текста или написать регулярное выражения.
В нашем случае, мы работаем с конкретным определенным полем формы и конкретным куки. Поэтому, оставляем все как на скрине выше. Жмем “Ок”. Для удобства, указываем название макроса и снова “Ок”, чтобы закрыть редактор макроса.
Теперь надо добавить правило для сессий, которое будет запускать наш макрос. Все в тех же настройках Sessions прокручиваем экран вверх до блока “Session handling rules”.
Добавляем новое правило. Первым делом, переходим на закладку Scope и выставляем все, как на скрине:
Соответственно, нам нужно чтобы макрос работал только в интрудере. Так как url был добавлен в scope, указываем, что правило применимо исключительно к нашему scope. Никаких исключений не делаем. Выставив галочки, переходим обратно к деталям. Нужно добавить “Rule action”, в выпадающем списке выбираем “Run a macro”.
Если расписывать все варианты “Rule action”, особенно с примерами приминения, получится целая книга. Пока в планы этого не входило. В целом, если по-кликать по разным вариантам, становиться понятно, что это мощнейшая надстройка для автоматизации в рамках Burp. Есть все, от изменения любых параметров запроса и прочего препроцессинга, до постпроцессинга и оповещения нужных расширений Burp. Но такого уровня автоматизация, потребуется только в случае длительной и рутинной работы над таргетом. В наши цели максимально быстрого препарирования не очень вписывается.
Вернемся к детальным настройкам. После добавления “Run a macro”, появляется диалоговое окно, в котором должны быть такие настройки:
Почему такие настройки? Нам нужно проставить значения конкретной переменной и конкретного значения куки. Нас не интересуют какие-то другие куки или переменные, так как в данном случае токен жестко связан с сессией. В ином случае, мы могли бы исключить какие-то переменные или куки. Ну и опять же, мы могли бы оповестить какое-то свое расширение о том, что происходит применение правила. Соответственно, расширение должно быть в состоянии понять и обработать подобное поведение.
Важный момент при добавлении параметров и куки, если при вводе не появляется подсказки с нужным вам значением, значит что-то пошло не так и нужно вернуться к предыдущим шагам:
Все готово. Сохраняем, закрываем настройки Burp и запускаем атаку в интрудере. Но видим слегка неприятную картинку:
Макрос срабатывает, правило срабатывает, но почему-то не всегда. Почему? Вся проблема в скорости. Burp просто не успевает выполнить макрос перед каждой итерацией. Поэтому, идем на вкладку интрудера под названием “Response pool” и проставляем, как вариант, такие настройки:
Запускаем атаку снова…. Супер! Теперь все работает как надо:
Поздравляю, вы только что создали свой первый макрос. Заодно вышли на новый уровень использования интрудера. На этом моменте, «любительская» часть статьи закончена. Самое время переходить к хардкору и кодингу. Будем программировать расширения для Burp на Python. Если интересна тема разработки собственных расширений, в конце статьи дам ссылки на другие мои статьи по этой теме, там много))))
Запрос с базовой авторизацией выглядит следующим образом:
У нас просто добавляется заголовок “Authorization” со значением “Basic” и кредстами, которые представляют собой строку вида “логин:пароль” кодированную в base64.
Для выполнения поставленной задачи, перекинем запрос в интрудер. Выделяем base64 значение, кликаем правой кнопкой и выбираем “Convert selection -> Base64 -> decode”. После чего выделяем все значение admin:admin и добавляем как точку инъекции.
Переходим к словарю, использовать будем SecLists\Passwords\Common-Credentials\10-million-password-list-top-100.txt
Далее переходим к настройкам процессинга. Нам потребуется два обработчика. Сначала через префикс добавим к паролю логин:
Вторым указываем кодирование в base64:
Запускаем и ждем появления статуса 200. Останется только декодировать и увидеть правильные кредсы. Чтобы было интереснее, закрасил правильный ответ:
Во второй части вы узнаете, как написать собственный обработчик полезных нагрузок для Burp Intruder, собственный генератора. Кроме того, покажу пример совмещения разных возможностей API для реализации конкретной задачи — автоматический поиска имени файла бэкапа в базе данных через SQLi с оптимизацией.
Источник https://xss.pro
В этой статье предлагаю подробно разобраться в работе с Intruder. Предполагается, что у читателя уже есть базовые знания по использованию интрудера:
- Вам не нужно рассказывать, как закинуть в интрудер запрос и как расставить точки инъекции.
- Вам не нужно рассказывать, как добавить простую полезную нагрузку, сгенерировать диапазон чисел и т.п.
- Вы понимаете, что успешную инъекцию можно найти анализируя код, длину, время ответа и т.п.
Я коснусь некоторых вещей, которые считаю базовыми, но не всегда явными. Но сделаю это по минимуму. Цель статьи расширить у читателя понимание интрудера, показать некоторые техники и возможности по расширению. А получится ли у меня достигнуть этой цели или нет, решать вам. Не стесняйтесь поделиться своим мнением, даже если оно из серии “статья туфта, а автор нуб”.
В статье поговорим про генерацию и модификацию пэйлоадов, использование макросов для подстановок, а также немного по-программируем. Да, будет часть касающаяся кода. Покажу, как можно генерировать полезную нагрузку и модифицировать при помощи расширения. На мой взгляд, самым интересным будет кусок про написание итогового куска кода, который оптимизирует парсина имени файла через SQLi
Важные уточнения! Статья вышла очень большая. Постоянно приходилось добавлять уточнения, пояснения, которые потом часто становились целыми блоками. В связи с чем, статья была разбита на две части:
Первая часть — про использование возможностей Intruder
Вторая часть — про расширение Intruder, путем написания своего Python-кода
Если вы заметили неточность или какой-то из примеров работает как-то не так или чего-то не хватает в примерах, обязательно напишите.
Техники сканирования
Бегло пробежимся по техникам сканирования, так как без понимания как именно они работают, будет упущено огромное количество возможностей. С простым (Sniper) перебором одного значения все предельно понятно. Но что, если точек инъекций несколько? Здесь важно определиться, являются ли они взаимосвязанными и каким образом. Отсюда и происходит выбор техники атаки.Что касается нумерации точек инъекции, она происходит слева направо и сверху вниз по порядку. Не имеет значения в какой очередности точки инъекции добавлялись, только их порядок. Максимальное количество точек инъекции — 20. Но будьте внимательны, лучше не жестить.
Отличия в типах атаки:
- Battering ram (Таран) : подставляет полезную нагрузку во все точки инъекции одновременно. Полезно использовать, например, при обходе авторизации с использованием SQLi (ниже будет пример).
Примеры итераций:
| № | Полезная нагрузка |
| 1 | username=’ OR 1=1 – -&password=’ OR 1=1 – - |
| 2 | username=%20or%20’’=’&password=%20or%20’’=’ |
| 3 | username=delete&password=delete |
| … | … |
- Pitchfork (Вилы) : в каждую точку инъекции подставляется значение из соответствующих списков полезной нагрузки. Например, у вас есть база со слитыми данными из логинов и паролей. Вы разбили данные на два файла, в итоге каждая строка файла с логинами должна соответствовать соответствующей строке файла паролей. В итоге, каждую итерацию будет отправляться логин и пароль конкретного пользователя.
Примеры итераций:
| № | Полезная нагрузка |
| 1 | username=admin&password=Pa$$w0rD |
| 2 | username=root&password=BigBoss |
| 3 | username=user&password=1234 |
| … | … |
- Cluster bomb (Кассетная бомба): самая массовая атака “все со всеми”. Интрудер берет первое значение из первого списка полезных нагрузок и соединяет его с каждой строкой второй полезной нагрузки и т.д. Чистой воды брутфорс. Нужно быть осторожным, так как подобная атака очень шумная и может сильно затянуться по времени. Чтобы спрогнозировать общее количество итераций, достаточно перемножить количество значений во всех используемых справочниках нагрузок.
| № | Полезная нагрузка |
| 1 | username=admin&password=Pa$$w0rD |
| 2 | username=admin&password=BigBoss |
| 3 | username=admin&password=1234 |
| 4 | username=root&password=Pa$$w0rD |
| 5 | username=root&password=BigBoss |
| 6 | username=root&password=1234 |
| 7 | username=ruseroot&password=Pa$$w0rD |
| 8 | username=user&password=BigBoss |
| 9 | username=user&password=1234 |
| … | … |
Пример использования атаки типа “таран”. Задача: есть ресурс с потенциальной возможностью обойти авторизацию при помощи sql-инъекции. Для решения, закидываю запрос в интрудер, проставляю точки инъекции во все параметры POST-запроса. В качестве словаря полезных нагрузок выбираю Simple list” и гружу словарь с SQLi из Seclists из папки фаззинга.
Сугубо для примера, брутфорс логина и пароля с использованием в качестве словаря логинов топ из Seclists. Словарем паролей выступает известный всем rockyou.txt. Проблема в том, что рокью огромный. Почти 140 мегабайт и более 8 миллионов паролей. Загружать его в интерфейс Burp — это безумие. Поэтому, при выборе типа нагрузок указываю “Runtime file”
Вообще, есть смысл потратить время на досуге и попробовать разные типы нагрузок.
Фильтрация результатов
Для определения успешных итераций, у нас уже есть ряд предустановленных возможностей: код ответа, время ответа, длинна. Но бывают ситуации, когда этого недостаточно. Например, сайт с подгрузкой рандомных постов, что помешает быть уверенным в той же длине ответа, а успешность использования пэйлоада мы можем определить по какому-то определенному тексту.Для примера, собрал небольшой проект, который прикреплен в виде архива к статье. Скачайте, разархивируйте и запустите через “docker-compose up -d”.
После можно открыть проект по ссылке:
http://localhost/usernames/index.php
Это обычная форма авторизации, уязвимая для перечисления логинов. Если логин не существует, страница сообщит об этом пользователю. Сообщение, когда пользователь есть, но пароль не подходит, отличается.
Запрос:
Код:
POST /usernames/index.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
username=asdf&password=sdfa
Соответственно, будем использовать тип атаки “снайпер”. Точка инъекции — username. Результат атаки:
Так как проект сильно упрощен, правильные логины можно легко увидеть, проранжировав результаты по длине. Но, в случае с динамическим контентом это не сработает. Чтобы исправить ситуацию, достаточно добавить условие в “Grep - Extract” в настройках интрудера. Переходим в Settings на закладке интрудера, находим соответствующий блок и жмем “Add”. Увидим следующую форму:
В интрудер можно отправить только выполненный запрос, если говорить о подкапотном пространстве Burp, это объект IHttpRequestResponse. Более подробно можно почитать в моих статьях про написание расширений для Burp. К чему я? Так как запрос выполнен, у нас есть ответ и Burp его заботливо выдаст нам в конструкторе Grep - Extract. В данном случае, можно не заморачиваться с регулярными выражениями, а просто выделить искомый текст и бёрп автоматически сгенерирует условия для поиска строки. Остается только нажать ок и заново запустить атаку.
Можно добавить негативный фильтр::
В итоге, видим только успешные попытки:
Да, пример можно назвать больше надуманным. Подобные формы, которые сообщают есть ли пользователь, встречаются все реже, но встречаются. Да и в целом, в своих статьях стремлюсь демонстрировать именно принци. А уж как его примените, это отдельная история. Может вам потребуется отфильтровать неуспешные попытки загрузить shell…
Работа с макросами
Что если пример выше усложнить при помощи CSRF-токена? Попробуйте использовать тот же пример, но для этого адреса:http://localhost/usernames-csrf/index.php
Результат работы интрудера будет выглядеть так:
В данном случае, все сломает CSRF. Чтобы это исправить, потребуется перед каждой итерацией интрудера делать запрос к странице с формой, получать оттуда токен и подкладывать его в запрос. Не волнуемся! Все окей, в этом нам помогут макросы Burp.
Перед основными действиями, удалите все куки для localhost, в ином случае, наложатся одни на другие и получится хренотень. Очистили куки, включили проксирование через Burp, заново зашли на форму авторизации с CSRF. Теперь у нас есть чистый GET-запрос. Не забываем добавить наш домен в scope и можно приступать к созданию макроса.
Чтобы создать макрос, открываю настройки самого Burp (settings в правом верхнем углу) и перехожу в раздел “Sessions”. В самом низу экрана, есть раздел “Macros”. Жмем добавить новый:
Burp сразу попросит нас выбрать запрос, который должен обрабатывать макрос. Да, перед тем как создать макрос не забудьте выполнить нужный запрос. Главный объект Burp это запрос-ответ, иначе ему не с чем работать.
Выбрать надо именно GET-запрос. POST уже ждет готовый CSRF:
Жмем “Ок” и видим следующее окно:
Нам нужно слегка поправить настройки, поэтому жмем “Configure Item”. В появившемся окошке снимаю галочку “Use cookie from the session handling cookie jar in request”. Нам нужно, чтобы GET-запрос макроса отправлялся чистым, без каких-либо кук.
В некоторых случаях, нужно заморочиться больше и поработать с “Custom parameter locations in response”, выделив конкретные куски текста из ответа в переменные для дальнейшего использования. Например, если в результате SQLi мы получим строку вида “логин:хэш_пароля”, можем разбить её отдельно на login и password. Тогда надо внизу нажать на “Add”, откроется мастер как в Grep Extract, в котором можно будет указать конкретные позиции для переменной, или выделить нужную часть текста или написать регулярное выражения.
В нашем случае, мы работаем с конкретным определенным полем формы и конкретным куки. Поэтому, оставляем все как на скрине выше. Жмем “Ок”. Для удобства, указываем название макроса и снова “Ок”, чтобы закрыть редактор макроса.
Теперь надо добавить правило для сессий, которое будет запускать наш макрос. Все в тех же настройках Sessions прокручиваем экран вверх до блока “Session handling rules”.
Добавляем новое правило. Первым делом, переходим на закладку Scope и выставляем все, как на скрине:
Соответственно, нам нужно чтобы макрос работал только в интрудере. Так как url был добавлен в scope, указываем, что правило применимо исключительно к нашему scope. Никаких исключений не делаем. Выставив галочки, переходим обратно к деталям. Нужно добавить “Rule action”, в выпадающем списке выбираем “Run a macro”.
Если расписывать все варианты “Rule action”, особенно с примерами приминения, получится целая книга. Пока в планы этого не входило. В целом, если по-кликать по разным вариантам, становиться понятно, что это мощнейшая надстройка для автоматизации в рамках Burp. Есть все, от изменения любых параметров запроса и прочего препроцессинга, до постпроцессинга и оповещения нужных расширений Burp. Но такого уровня автоматизация, потребуется только в случае длительной и рутинной работы над таргетом. В наши цели максимально быстрого препарирования не очень вписывается.
Вернемся к детальным настройкам. После добавления “Run a macro”, появляется диалоговое окно, в котором должны быть такие настройки:
Почему такие настройки? Нам нужно проставить значения конкретной переменной и конкретного значения куки. Нас не интересуют какие-то другие куки или переменные, так как в данном случае токен жестко связан с сессией. В ином случае, мы могли бы исключить какие-то переменные или куки. Ну и опять же, мы могли бы оповестить какое-то свое расширение о том, что происходит применение правила. Соответственно, расширение должно быть в состоянии понять и обработать подобное поведение.
Важный момент при добавлении параметров и куки, если при вводе не появляется подсказки с нужным вам значением, значит что-то пошло не так и нужно вернуться к предыдущим шагам:
Все готово. Сохраняем, закрываем настройки Burp и запускаем атаку в интрудере. Но видим слегка неприятную картинку:
Макрос срабатывает, правило срабатывает, но почему-то не всегда. Почему? Вся проблема в скорости. Burp просто не успевает выполнить макрос перед каждой итерацией. Поэтому, идем на вкладку интрудера под названием “Response pool” и проставляем, как вариант, такие настройки:
Запускаем атаку снова…. Супер! Теперь все работает как надо:
Поздравляю, вы только что создали свой первый макрос. Заодно вышли на новый уровень использования интрудера. На этом моменте, «любительская» часть статьи закончена. Самое время переходить к хардкору и кодингу. Будем программировать расширения для Burp на Python. Если интересна тема разработки собственных расширений, в конце статьи дам ссылки на другие мои статьи по этой теме, там много))))
Процессинг payloads
Самое время поговорить о процессинге или обработке пэйлоадов перед использованием. По сути, процессоры (наверное, так их правильно называть), каким-то образом видоизменяют пэйлоад. Например, среди предустановленных процессоров, можно найти “Modify case” и выбрать вариант “To lower case”, тем самым отправляемый пэйлоад будет приведен к нижнему регистру. Или, например, кодирование в base64. Давайте посмотрим на простом примере с базовой HTTP авторизацией. Для этого запустите приложенный docker-проект и зайдите на адрес http://localhost/authЗапрос с базовой авторизацией выглядит следующим образом:
Код:
GET /labs/basic_auth/ HTTP/1.1
Host: enum.thm
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: PHPSESSID=e24jc31raqp31n2raesgpc5974
Upgrade-Insecure-Requests: 1
Authorization: Basic YWRtaW46YWRtaW4=
У нас просто добавляется заголовок “Authorization” со значением “Basic” и кредстами, которые представляют собой строку вида “логин:пароль” кодированную в base64.
Для выполнения поставленной задачи, перекинем запрос в интрудер. Выделяем base64 значение, кликаем правой кнопкой и выбираем “Convert selection -> Base64 -> decode”. После чего выделяем все значение admin:admin и добавляем как точку инъекции.
Переходим к словарю, использовать будем SecLists\Passwords\Common-Credentials\10-million-password-list-top-100.txt
Далее переходим к настройкам процессинга. Нам потребуется два обработчика. Сначала через префикс добавим к паролю логин:
Вторым указываем кодирование в base64:
Запускаем и ждем появления статуса 200. Останется только декодировать и увидеть правильные кредсы. Чтобы было интереснее, закрасил правильный ответ:
Заключение
Перед статьей ставилась задача расширить понимание интрудера, показать какие-то интересные моменты. Понятное дело, что для новичка будет интересна та же работа с сессиями и макросами, или процессинг о котором говорилось в статье, и в этом плане задача выполнена. Но этого будет маловато для опытного пользователя. Поэтому, считаю крайне важной вторую часть статьи. Разделение скорее искусственное, чтобы не запихивать в материал целую книгу. На минуточку, Word насчитал 57!!! страниц, правда с иллюстрациями и таблицами)))Во второй части вы узнаете, как написать собственный обработчик полезных нагрузок для Burp Intruder, собственный генератора. Кроме того, покажу пример совмещения разных возможностей API для реализации конкретной задачи — автоматический поиска имени файла бэкапа в базе данных через SQLi с оптимизацией.
Его величество Burp Intruder: часть вторая — программистская
К обоим частям статьи прикреплен архив. Оба архива одинаковые. В архивах лежат все коды расширений, а также небольшой тестовый стенд на базе Docker. Для запуска стенда, просто распакуйте архив, откройте папку в терминале и запустите через docker-compose up -d. Все прекрасно работает с тем же Docker Desktop.