
Response Overview Extension для BurpSuite — поиск необычных ответов путём группировки тел ответов
Расширение Response Overview для BurpSuite
Автор: Tobias "floyd" Ospelt, @floyd_ch, http://www.floyd.ch
Pentagrid AG, https://www.pentagrid.ch
Это расширение группирует все тела ответов по схожести и показывает сводку — по одному запросу/ответу на группу. Расширение позволит тестировщику получить обзор ответов тестируемого веб-сайта от всех инструментов (сканера, прокси и т. д.). Оно предоставляет дополнительный «полуавтоматический метод обнаружения» (по сравнению с обычными методами обнаружения: на основе ответа, на основе времени, на основе взаимодействия и т. д.). Есть различные оптимизации, в основном по причинам производительности. Функция «remove parameters» удаляет отражённые параметры запроса из ответа перед сравнением.
На данный момент:
Использование очень простое:
Это расширение анализирует HTTP-ответы, если:
Когда вышеуказанные ограничения фильтра соблюдены, входящие тела ответов (от всех инструментов Burp!) сравниваются со всеми группами, которые мы уже создали. Группа определяется её самым первым членом, который мы храним в памяти. Если обрабатываемый ответ на 95% схож с этим первым членом, он принадлежит этой группе и увеличивается только счётчик «Group Size». Это также означает, что мы не будем хранить этот ответ. Если ответ не на 95% схож ни с одной группой, он образует новую группу и является её первым членом.
Первую версию такого обзора ответов, позволяющего находить аномалии, я предложил в 2010 году проекту w3af (см. также обсуждение здесь: https://github.com/andresriancho/w3af/issues/17345), и она была написана на Python. Она так и не попала в основную ветку w3af, не помню почему. Тогда я много узнал о Python difflib и оптимизировал производительность под этот сценарий использования. В 2019 году я написал похожее расширение на Python для Burp и снова много узнал о Python difflib, когда работал в modzero AG https://github.com/modzero/burp-ResponseClusterer. Однако в какой-то момент я понял, что расширение может съедать часть производительности Burp, что я сначала игнорировал. В 2021 году расширение полностью сломалось, так как больше не запускалось с новыми версиями Jython, и, пересматривая код, я понял, что написал очень неэффективное по памяти расширение. И вот мы здесь: это новое расширение 2021 года на Kotlin с новыми функциями, снова с массой уроков из Python difflib и разными возможностями. Я улучшил производительность, потому что понял, что некоторые вычисления не нужны, если мы всегда сравниваем с одними и теми же строками (как уже было реализовано в коде на Python). Response Clusterer мёртв, да здравствует Response Overview.
Теоретически настройки по умолчанию могут привести к не самой лучшей производительности Burp. Однако это крайне маловероятно. В тесте, где все ответы имели максимальный размер по умолчанию (около 1 МБ) и должны были сравниваться друг с другом, сравнение занимало до 30 мс с оптимизацией предварительно рассчитанного bByteCount (обычный случай) и до 80 мс без этой оптимизации (происходит только один раз для каждой записи). Умноженное на максимальное количество групп (1000), это означает, что в абсолютно худшем случае обработка может занять до 80 секунд. Поскольку есть отдельный поток, это было бы терпимо, так как следующее сравнение тогда заняло бы максимум 30 секунд. Но у какого веб-приложения много разных ответов размером около 1 МБ? Будем надеяться, что не у многих. Также не забывайте, что если длина ответов различается более чем на 2%, сопоставление схожести вообще не занимает времени благодаря оптимизации veryQuickRatio.