Это первая часть из серии, которую я планирую написать о том, как создавать расширения Burp. Я заинтересовался написанием расширений Burp в предыдущей компании, где нам посчастливилось провести исследовательские презентации, а затем представить их нашим коллегам. Моей первой темой презентации было написание расширения Active Scanning в Burp, которое будет искать XXE (XML External Entity Injection). Я также реализовал отдельное приложение, которое могло работать на хосте (внешнем по отношению к цели сканирования) и прослушивать вызов полезной нагрузки XXE (например, путем отправки HTTP-запроса). Буквально на той же неделе вышел Collaborator и покорил меня. 🙂 . Прошлой осенью меня тоже приняли на ДербиКон и представили стабильный доклад на Extending Burp.

В этой серии мы начнем с самых основ создания рабочего расширения, а затем продолжим создание полнофункционального расширения по ходу дела. Расширения Burp могут быть написаны на Java, Ruby (используя JRuby) и Python (используя Jython). В этой серии мы будем писать на Java. Вот так…

Основы расширения

В самом простом случае расширение Burp представляет собой файл jar с классом BurpExtender в пакете Burp. Это файл, который Burp ищет при загрузке расширения. В зависимости от того, что вы реализуете в этом классе, зависит функциональность, которую будет иметь расширение.

Шаги по созданию расширения Burp

  1. В вашем любимом редакторе Java создайте проект типа «Библиотека классов» или любого другого эквивалентного типа проекта, где выходным файлом является файл jar, содержащий классы из проекта.
  2. Откройте Burp и перейдите на вкладку Extender. Нажмите «Сохранить файлы интерфейса» и сохраните их в папке с именем «burp» в вашей файловой системе, где находится источник проекта, созданного на шаге 1.
  3. Создайте класс BurpExtender в пакете burp вашего проекта и реализуйте IBurpExender. Для этого потребуется реализовать метод registerExtenderCallbacks. Это метод, с помощью которого вы будете выполнять любые настройки для своего расширения и настраивать все, что нужно вашему расширению.
  4. Скомпилируйте расширение в jar-файл и загрузите его в Burp, перейдя в Extender -> Extensions -> Add. Это предложит вам указать тип расширения (Java в этом примере) и путь к файлу jar. Нажмите «Далее», и ваше расширение будет загружено!

Образец кода

Интересны строки 22, 23 и 24. В строке 22 функция getHelpers() возвращает объект, реализующий IExtensionHelpers. IExtensionHelpers — это интерфейс, который предоставляет методы, полезные для расширения, такие как кодирование/анализ запросов/ответов и т. д. В строке 23 задается имя расширения. Это отображается на вкладке «Расширитель». Строка 24 сохраняет ссылку на OutputStream для расширения. Когда вы пишете в него, оно отображается в окне вывода расширения на вкладке «Расширитель».

Как только вы загрузите расширение и перейдете к Extender->Extensions, вы увидите:

Он показывает имя расширения, его местоположение в файловой системе и методы интерфейсов, которые оно реализует.

Если вы нажмете на вкладку «Вывод», вы увидите:

Это показывает вывод из registerExtenderCallbacks.

Вот и все на этот раз. Следующий пост будет глубже…

Первоначально опубликовано на www.chs.us 11 апреля 2018 г.