May 15, 2022

Burp Suite. Spider - Сканирование целевого оъекта

Многие,кто обучается по видео на ютубе столкнулись с проблемой в работе и обучении в программе Burp Suite.В этой части цикла, рассмотрим работу с Spider, в версии Burp Suite 2.0 Professional.

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

Итак, в Burp Suite 2.0 Professional существует на замену Spider и Scanner – Burp Scanner.

Burp Scanner - это инструмент для автоматического сканирования веб-сайтов, обнаружения контента и аудита на наличие уязвимостей.

Работа по сканированию состоит из двух основных этапов:

Сканирование контента (Crawling) - включает навигацию по приложению, переход по ссылкам, отправку форм и вход в систему, где это необходимо, для каталогизации контента приложения и путей навигации в нем.

Аудит на наличие уязвимостей - это включает анализ трафика и поведения приложения для выявления уязвимостей и других проблем. В зависимости от конфигурации сканирования может потребоваться отправка большого количества запросов в приложение.

В этой части мы разберём сканирование контента – Crawling.

Crawling

Основной подход.

Сканер Burp перемещается по целевому приложению так же, как пользователь в браузере, щелкая ссылки и отправляя входные данные. Он строит карту содержимого и функциональности приложения в виде схемы, представляющей различные локации в приложении и ссылки между ними:

Сканер не делает никаких предположений о структуре URL, используемой приложением. Местоположения идентифицируются (и переопределяются позже) на основе их содержимого, а не URL-адреса, который использовался для их получения. Это позволяет сканеру надежно обрабатывать современные приложения, которые помещают эфемерные данные, такие как токены CSRF или устройства кеширования, в URL-адреса. Даже если весь URL-адрес в каждой ссылке изменяется каждый раз, сканер все равно создает точную карту:

Этот подход также позволяет сканеру обрабатывать приложения, использующие один и тот же URL-адрес, для доступа к различным локациям в зависимости от состояния приложения или взаимодействия пользователя с ним:

По мере того, как сканер перемещается и создает карту целевого приложения, он отслеживает конечные точки, которые не были посещены. Они представляют собой ссылки (или другие навигационные переходы), которые наблюдались в приложении, но переход по ним не осуществлялся.

Сканер никогда не «перепрыгивает» на ожидающую ссылку и не посещает ее вне контекста. Вместо этого он либо перемещается прямо из своего текущего местоположения, либо возвращается в исходное местоположение и перемещается оттуда. Это максимально точно, имитирует действия пользователя в браузере:

Сканирование таким образом, чтобы не делать предположений о структуре URL, очень эффективно при работе с современными веб-приложениями, но потенциально может привести к проблемам при просмотре «слишком большого» контента. Современные веб-сайты часто содержат массу лишних навигационных путей. Что означает, что все напрямую связано со всем остальным. Сканер Burp использует различные методы для решения этой проблемы:

  • Создание отпечатков ссылок на уже посещенные места, чтобы избежать их избыточного посещения;
  • Проверка в порядке убывания приоритетов при обнаружении нового контента
  • Имеет настраиваемые параметры, которые ограничивают степень сканирования.

Эти меры также помогают правильно работать с «бесконечными» приложениями, такими как календари.

Обработка сессий.

Поскольку сканер Burp перемещается по целевому приложению так же, как и пользователь с браузером, он может автоматически работать практически с любым механизмом обработки сеансов, с которым могут работать браузеры. Нет необходимости записывать макросы или настраивать правила обработки сеансов, сообщающие Burp, как получить сеанс или проверить, является ли текущий сеанс действительным.

Сканер использует несколько «агентов», чтобы распараллелить свою работу. Каждый агент представляет отдельного пользователя приложения, перемещающегося со своим собственным браузером. Каждый агент имеет свой собственный файл cookie, который обновляется, когда приложение выдает его с файлом cookie. Когда агент возвращается в начальное местоположение, чтобы начать сканирование оттуда, его файл cookie очищается, чтобы имитировать совершенно новый сеанс браузера.

Запросы, которые сканер выполняет во время навигации, создаются динамически на основе предыдущего ответа, поэтому токены CSRF в URL-адресах или полях формы обрабатываются автоматически. Это позволяет сканеру правильно перемещаться по функциям, использующим сложную обработку сеансов, с нулевой настройкой пользователем:

Обнаружение изменений в состоянии приложения.

Современные веб-приложения очень динамичны, и одна и та же функция приложения обычно возвращает разное содержимое в разных случаях в результате действий, которые пользователь выполнил за это время. Сканер Burp способен обнаружить изменения в состояниях приложения, возникающие в результате действий, выполненных им во время сканирования.

В приведенном ниже примере навигация по пути BC приводит к тому, что приложение переходит из состояния 1 в состояние 2.

Ссылка D переходит в логически другое место в состоянии 1 по сравнению с состоянием 2. Таким образом, путь AD переходит в пустую корзину, а ABCD - в наполненную корзину.

Вместо того чтобы просто заключить, что ссылка D является недетерминированной, сканер может определить путь изменения состояния, от которого зависит ссылка D. Это позволяет сканеру в будущем добраться до заполненной корзины, чтобы получить доступ к другим функциям, доступным из неё:

Вход в приложение.

Сканирования Burp начинается с фазы без проверки подлинности, в которой учетные данные не отправляются. Когда это будет завершено, Burp обнаружит любые функции входа и самостоятельной регистрации в приложении.

Если приложение поддерживает самостоятельную регистрацию, Burp попытается зарегистрировать пользователя. Вы также можете настроить сканер на использование одного или нескольких уже существующих имен для входа.

Затем сканер переходит к этапу проверки подлинности. Он посетит функцию входа в систему несколько раз и отправит:

  • Учетные данные для самостоятельно зарегистрированной учетной записи (если есть).
  • Учетные данные для каждой настроенной ранее существующей учетной записи.
  • Ложные учетные данные (они могут вызывать интересные функции, таких как восстановление учетной записи).

Для каждого набора учетных данных, представленных для входа в систему, Burp пытается сканировать содержимое, обнаруженное за логином в приложение. Это позволяет сканеру захватывать различные функции, доступные для разных типов пользователей:

Сканирование изменяемого контента.

Современные веб-приложения часто содержат изменяемый контент, где «одно и то же» местоположение или функция будет возвращать ответы, которые существенно различаются в разных случаях, а не (обязательно) в результате какого-либо действия пользователя. Такое поведение может быть вызвано такими факторами, как каналы из социальных сетей или комментарии пользователей, встроенная реклама или действительно рандомизированный контент (сообщения дня, A / B-тестирование и т. Д.).

Сканер Burp способен идентифицировать много экземпляров изменчивого контента и правильно повторно идентифицировать одно и то же местоположение при разных посещениях, несмотря на разные ответы.

Это позволяет сканеру сосредоточить внимание на «основных» элементах в наборе ответов приложения, что, вероятно, является наиболее важным с точки зрения обнаружения ключевых навигационных путей к интересному контенту и функционалу приложения:

В некоторых случаях посещение такой ссылки в разных случаях приведет к ответам, которые просто слишком сильно отличаются, чтобы считаться «одинаковыми».

В этой ситуации сканер Burp захватит обе версии ответа в виде двух разных локаций и построит недетерминированный область на графике.

При условии, что степень недетерминированности в приложении не слишком велика, Burp может просканировать связанный контент и найти путь к контенту, который находится за недетерминированной ссылкой:

После того, как теория усвоена, попробуем запустить Crawling на нашем сайте:

Выбираем тип сканирования – Crawl, и создаём свой шаблон поиска, назовём его Deep Scan и рассмотрим основные настройки:

Maximum link depth.

Максимальная глубина ссылки представляет собой максимальное количество переходов (щелкающих по ссылкам и отправляющих формы), которые сканер сделает из начальных URL-адресов. Современные приложения, как правило, встраивают массу навигации в каждый ответ в таких местах, как меню и нижний колонтитул страницы. По этой причине обычно можно получить доступ к подавляющему большинству содержимого и функциональности приложения за небольшое количество переходов от начального URL-адреса. Для полного охвата многоэтапных процессов (таких как просмотр товара, добавление его в корзину и проверка) потребуется больше прыжков.

Некоторые приложения содержат чрезвычайно длинные навигационные последовательности, которые не приводят к интересным другим функциям. Например, приложение для покупок может иметь огромное количество категорий товаров, подкатегорий и фильтров просмотра. Для сканера это может выглядеть как очень глубокое вложенное дерево ссылок, все из которых возвращают различный контент. В этой ситуации явно уменьшается отдача от глубокого проникновения в навигационную структуру, поэтому целесообразно ограничить максимальную глубину связи небольшим числом, например 8.

Crawl strategy.

Реальные приложения сильно различаются по способу организации контента и навигации, изменчивости их ответов, а также степени и сложности состояния приложения. С одной стороны, приложение может использовать уникальный и стабильный URL для каждой отдельной функции, возвращать детерминированный контент в каждом ответе и не содержать состояния на стороне сервера.

С другой стороны, приложение может использовать эфемерные URL-адреса, которые меняются каждый раз при доступе к функции, перегруженные URL-адреса, которые достигают различных функций по разным путям навигации, изменчивый контент, который изменяется недетерминированно, и функции с отдающие множество различных ответов, когда, действия пользователя вызывают изменения в содержании и поведении.

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

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

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

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

Crawl limits.

Сканирование современных приложений иногда является бесполезным упражнением из-за большого количества функциональных возможностей с изменяющимся состоянием, изменчивого контента и неограниченной навигации. Сканер Burp использует различные методы, чтобы максимизировать обнаружение уникального контента в начале сканирования. Настройки пределов сканирования позволяют наложить ограничение на объем сканирования, так как оно достигает точки убывающей отдачи. Как правило, целесообразно настроить ограничение для степени сканирования, основываясь на ваших знаниях о сканируемом приложении.

Вы можете ограничить сканирование на основе:

  • Потраченного времени.
  • Количество обнаруженных уникальных локаций. Местоположение представляет собой отдельную единицу содержимого или функциональности в зависимости от выбранной стратегии сканирования.
  • Количество выполненных HTTP-запросов.

Login functions.

Эти параметры определяют, как сканер будет взаимодействовать с любыми функциями входа в систему, которые встречаются во время сканирования.

Существуют отдельные параметры для входа в приложение, которые позволяют указать некоторые существующие учетные данные учетной записи, которые должны быть отправлены в функции входа в систему для доступа к аутентифицированному контенту за именем входа. Здесь вы можете настроить:

Должен ли сканер попытаться самостоятельно зарегистрировать пользователя?

  • Это может быть полезно во многих приложениях, устраняя необходимость вручную настраивать учетную запись пользователя перед сканированием.

Должен ли сканер вызывать сбои при входе с использованием недопустимых имен пользователей? Это может быть полезно для доступа к функциям восстановления учетной записи, которые доступны при отправке неверных учетных данных. Обратите внимание, что сканер Burp не будет преднамеренно передавать какие-либо из настроенных учетных записей приложения, используя недопустимые пароли, чтобы не вызывать блокировку учетных записей для этих учетных записей.

Handling application errors during crawl.

Эти параметры управляют тем, как Burp Scanner обрабатывает ошибки приложения (сбои подключения и тайм-ауты передачи), возникающие на этапе сканирования.

Вы можете настроить следующие параметры:

Количество последовательных запросов на тайм-аут или общий процент запросов на тайм-аут до приостановки задачи.

Количество повторных проходов, выполненных по завершении сканирования, для повторных запросов, для которых истекло время ожидания.

Вы можете оставить любой параметр пустым, чтобы отключить его.

Application login options.

Раздел «Вход в приложение» на панели запуска сканирования позволяет указать учетные данные, которые следует отправлять в любые функции входа в систему. Сканер будет использовать их для обнаружения аутентифицированного контента за функциями входа в систему. Искатель также попытается самостоятельно зарегистрировать учетные записи и использовать эти учетные данные в дополнение к предоставленным.

Этот раздел недоступен, если в качестве типа сканирования выбран «Аудит выбранных элементов», так как сканирование не выполняется.

Я оставляю эти поля пустыми.

Resource pool options.

Раздел «Пул ресурсов» панели запуска сканирования позволяет указать пул ресурсов, в котором будет выполняться сканирование.

Пулы ресурсов используются для управления использованием системных ресурсов в нескольких задачах. Каждый пул ресурсов может быть настроен с различными параметрами для максимального количества одновременных запросов и регулирования между запросами.

Я создаю свой пул ресурсов, для максимально глубокого сканирования.

Запускаем сканирование и отслеживаем его прогресс на главной вкладке:

Итоги сканирования, вы можете отслеживать во вкладке Target => Site map:

На этом аудит закончен, и я заканчиваю текущую часть цикла.