February 24

День 38. Burp Suite: Intruder

Узнайте, как использовать Intruder для автоматизации запросов в Burp Suite.

1. Введение

Добро пожаловать в номер "Burp Suite Intruder"!

В этой комнате мы рассмотрим модуль Intruder в Burp Suite , который обеспечивает автоматическую обработку запросов и позволяет выполнять такие задачи, как фаззинг и брутфорс. Если вы не знакомы с функционалом Proxy и Repeater в Burp Suite , рекомендуется пройти хотя бы комнату «Основы Burp» перед тем, как продолжить.

Модуль Intruder в Burp Suite — это мощный инструмент, позволяющий проводить автоматизированные и настраиваемые атаки. Он предоставляет возможность изменять определенные части запроса и выполнять повторяющиеся тесты с различными вариантами входных данных. Intruder особенно полезен для таких задач, как фаззинг и брутфорс, где необходимо проверять различные значения по отношению к целевому объекту.

Разверните целевую виртуальную машину, подключенную к этой задаче, нажав зеленую кнопку «Запустить машину» .

2. Что такое Intruder?

Intruder — это встроенный в Burp Suite инструмент фаззинга, позволяющий автоматически изменять запросы и проводить многократное тестирование с вариациями входных значений. Используя перехваченный запрос (часто из модуля Proxy ), Intruder может отправлять несколько запросов с немного измененными значениями на основе заданных пользователем конфигураций. Он служит различным целям, таким как подбор паролей в формах авторизации путем замены полей имени пользователя и пароля значениями из списка слов или выполнение фаззинговых атак с использованием списков слов для тестирования подкаталогов, конечных точек или виртуальных хостов. Функциональность Intruder сравнима с инструментами командной строки, такими как Wfuzz или ffuf .

Однако важно отметить, что, хотя Intruder можно использовать с Burp Community Edition, он имеет ограничения по количеству запросов, что значительно снижает его скорость по сравнению с Burp Professional. Это ограничение часто заставляет специалистов по безопасности полагаться на другие инструменты для фаззинга и перебора паролей. Тем не менее, Intruder остается ценным инструментом, и стоит научиться эффективно его использовать.

Давайте рассмотрим интерфейс Intruder:

На начальном этапе Intruder отображается простой интерфейс, где мы можем выбрать цель. Это поле будет уже заполнено, если запрос был отправлен из прокси (используя Ctrl + Iили щелкнув правой кнопкой мыши и выбрав «Отправить в Intruder»).

В Intruder есть четыре вкладки:

  • Позиции : На этой вкладке мы можем выбрать тип атаки (который мы рассмотрим в следующем задании) и настроить место вставки полезных нагрузок в шаблон запроса.
  • Полезные нагрузки : Здесь мы можем выбрать значения для вставки в позиции, определенные на вкладке «Позиции» . Доступны различные варианты полезных нагрузок, например, загрузка элементов из списка слов. Способ вставки этих полезных нагрузок в шаблон зависит от типа атаки, выбранного на вкладке «Позиции» . Вкладка «Полезные нагрузки» также позволяет изменять поведение Intruder в отношении полезных нагрузок, например, определять правила предварительной обработки для каждой полезной нагрузки (например, добавление префикса или суффикса, выполнение сопоставления и замены или пропуск полезных нагрузок на основе определенного регулярного выражения).
  • Пул ресурсов : Эта вкладка не особенно полезна в Burp Community Edition. Она позволяет распределять ресурсы между различными автоматизированными задачами в Burp Professional. Без доступа к этим автоматизированным задачам эта вкладка имеет ограниченное значение.
  • Настройки : Эта вкладка позволяет настроить поведение атаки. В основном она касается того, как Burp обрабатывает результаты и саму атаку. Например, мы можем помечать запросы, содержащие определенный текст, или определить ответ Burp как перенаправляющий (3xx) ответы.

Примечание: Термин «фаззинг» относится к процессу проверки функциональности или существования путем применения набора данных к параметру. Например, фаззинг для конечных точек в веб-приложении включает в себя взятие каждого слова из списка слов и добавление его к URL-адресу запроса (например, http ://MACHINE_IP/WORD_GOES_HERE) для наблюдения за ответом сервера.

Вопрос: На какой вкладке «Вторжение» можно указать «Тип атаки» для планируемой атаки?

Ответ:Positions

3. Должности

При использовании Burp Suite Intruder для проведения атаки первым шагом является анализ позиций в запросе, куда мы хотим внедрить наши полезные нагрузки. Эти позиции сообщают Intruder о местах, куда будут внедрены наши полезные нагрузки (как мы рассмотрим в следующих заданиях).

Перейдём к вкладке «Позиции»:

Обратите внимание, что Burp Suite автоматически пытается определить наиболее вероятные места для внедрения полезной нагрузки. Эти места выделены зеленым цветом и заключены в разделительные знаки ( §).

В правой части интерфейса расположены следующие кнопки: Add §, Clear §, и Auto §:

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

Следующая GIF-анимация демонстрирует процесс добавления, удаления и автоматического повторного выбора позиций:

Уделите время ознакомлению с функциями добавления, удаления и автоматического выбора позиций в интерфейсе Burp Suite Intruder.

Вопрос: Какой символ обозначает начало и конец положения полезной нагрузки?

Ответ: §

4. Полезная нагрузка

На вкладке «Полезные нагрузки» в Burp Suite Intruder мы можем создавать, назначать и настраивать полезные нагрузки для нашей атаки. Эта подвкладка разделена на четыре раздела:

  1. Комплекты полезной нагрузки :
    • В этом разделе мы можем выбрать позицию, для которой хотим настроить набор полезной нагрузки, а также выбрать тип полезной нагрузки, которую хотим использовать.
    • При использовании типов атак, допускающих только один набор полезной нагрузки (снайперская или таранная ) , в выпадающем списке «Набор полезной нагрузки» будет только один вариант, независимо от количества заданных позиций.
    • Если мы используем типы атак, требующие нескольких комплектов полезной нагрузки (вилы или кассетная бомба), то в выпадающем списке для каждой позиции будет отдельный пункт.
    • Примечание: При присвоении номеров в раскрывающемся списке «Набор полезной нагрузки» для нескольких позиций следуйте порядку сверху вниз, слева направо. Например, при наличии двух позиций ( username=§pentester§&password=§Expl01ted§), первый элемент в раскрывающемся списке набора полезной нагрузки будет относиться к полю имени пользователя, а второй — к полю пароля.
  2. Настройки полезной нагрузки :
    • В этом разделе представлены параметры, специфичные для выбранного типа полезной нагрузки в текущем наборе полезной нагрузки.
    • Например, при использовании типа полезной нагрузки «Простой список» мы можем вручную добавлять или удалять полезные нагрузки из набора с помощью текстового поля «Добавить» , «Вставить строки» или «Загрузить полезные нагрузки из файла». Кнопка «Удалить» удаляет текущую выбранную строку, а кнопка «Очистить» очищает весь список. Будьте осторожны при загрузке больших списков, так как это может привести к сбою Burp.
    • Для каждого типа полезной нагрузки предусмотрен свой набор опций и функциональных возможностей. Изучите доступные варианты, чтобы понять весь спектр возможностей.
  3. Обработка полезной нагрузки :
    • В этом разделе мы можем определить правила, которые будут применяться к каждому элементу полезной нагрузки в наборе перед его отправкой на целевое устройство.
    • Например, мы можем сделать каждое слово заглавным, пропустить данные, соответствующие шаблону регулярного выражения, или применить другие преобразования или фильтрацию.
    • Хотя вы, возможно, не будете часто использовать этот раздел, он может оказаться чрезвычайно полезным, когда для вашей атаки требуется специфическая обработка полезной нагрузки.
  4. Кодирование полезной нагрузки :
    • Этот раздел позволяет нам настраивать параметры кодирования для наших полезных нагрузок.
    • По умолчанию Burp Suite применяет кодирование URL-адресов для обеспечения безопасной передачи данных. Однако могут быть случаи, когда необходимо изменить режим кодирования.
    • Мы можем переопределить параметры кодирования URL-адреса по умолчанию, изменив список символов для кодирования или сняв флажок «Кодировать эти символы для URL-адреса».

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

Вопрос: Какое правило обработки полезной нагрузки можно использовать для добавления символов в конец каждой полезной нагрузки в наборе?

Ответ: Add suffix

5. Введение в типы атак

Вкладка «Позиции» в Burp Suite Intruder содержит выпадающее меню для выбора типа атаки. Intruder предлагает четыре типа атак, каждый из которых служит определенной цели. Давайте рассмотрим каждый из них:

  1. Sniper - Снайперская атака : Тип атаки «Снайперская атака» является вариантом по умолчанию и наиболее часто используемым. Он циклически перебирает полезные нагрузки, внедряя по одной полезной нагрузке за раз в каждую позицию, определенную в запросе. Снайперские атаки последовательно перебирают все полезные нагрузки, что позволяет проводить точное и целенаправленное тестирование.
  2. Battering ram - Таран : Тип атаки «Таран » отличается от «Снайперской атаки» тем, что он отправляет все полезные нагрузки одновременно, при этом каждая полезная нагрузка устанавливается на свою позицию. Этот тип атаки полезен при проверке условий гонки или когда необходимо одновременно отправлять полезные нагрузки.
  3. Pitchfork - Атака типа «Вилы »: Атака типа «Вилы» позволяет одновременно тестировать несколько позиций с использованием различных полезных нагрузок. Она позволяет тестировщику определить несколько наборов полезных нагрузок, каждый из которых связан с определенной позицией в запросе. Атаки типа «Вилы» эффективны, когда существуют различные параметры, требующие отдельного тестирования.
  4. Cluster bomb - Кассетная бомба : Тип атаки «Кассетная бомба» сочетает в себе подходы «Снайпер» и «Вилы». Она выполняет атаку, подобную снайперской, на каждой позиции, но одновременно проверяет все полезные нагрузки из каждого набора. Этот тип атаки полезен, когда несколько позиций имеют разные полезные нагрузки, и мы хотим проверить их все вместе.

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

Вопрос: Какой тип атаки циклически перебирает полезные нагрузки, внедряя по одной полезной нагрузке за раз в каждую позицию, определенную в запросе?

Ответ: Sniper

6. Снайпер

Тип атаки «Снайпер» — это тип атаки по умолчанию и наиболее часто используемый в Burp Suite Intruder. Он особенно эффективен для атак с захватом одной позиции, таких как подбор паролей методом перебора или фаззинг для API- интерфейсов. При атаке «Снайпер» мы предоставляем набор полезных нагрузок, которые могут представлять собой список слов или диапазон чисел, и Intruder вставляет каждую полезную нагрузку в каждую определенную позицию в запросе.

Давайте обратимся к нашему предыдущему примеру шаблона:

Примеры должностей

POST /support/login/ HTTP/1.1
Хост: 10.49.191.239
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Длина контента: 37
Источник: http:// 10.49.191.239
Соединение: закрыто
Источник: http:// 10.49.191.239 /support/login/
Запросы на обновление, небезопасные и некорректные: 1

имя пользователя = §pentester§ & пароль = §Expl01ted§              

В этом примере у нас определены две позиции для параметров тела usernameатаки password. В атаке типа «Снайпер» Intruder берет каждый полезный груз из набора полезных нагрузок и по очереди подставляет его в каждую определенную позицию.

Предположим, у нас есть список из трех слов: burp, suite, и intruder. Тогда Intruder сгенерирует шесть запросов:

Обратите внимание, как Intruder начинает с первой позиции ( username) и подставляет в нее каждую полезную нагрузку, затем переходит ко второй позиции ( password) и выполняет ту же замену полезных нагрузок. Общее количество запросов, сделанных Intruder Sniper, можно рассчитать как requests = numberOfWords * numberOfPositions.

Тип атаки «Снайпер» полезен, когда мы хотим провести тесты с атаками в одной позиции, используя разные полезные нагрузки для каждой позиции. Он позволяет проводить точное тестирование и анализ различных вариантов полезных нагрузок.

Вопрос: Если бы вы использовали Sniper для фаззинга трех параметров в запросе со списком слов, содержащим 100 слов, сколько запросов потребовалось бы отправить Burp Suite для завершения атаки?

Ответ: 300

Вопрос: Сколько комплектов полезной нагрузки примет Sniper для проведения атаки?

Ответ: 1

7. Таран

Тип атаки «Таран » в Burp Suite Intruder отличается от «Снайпера» тем, что он размещает один и тот же груз во всех позициях одновременно, а не заменяет каждый груз в каждой позиции по очереди.

Вернемся к нашему предыдущему примеру шаблона:

Примеры должностей

POST /support/login/ HTTP/1.1
    Хост: 10.49.191.239
    User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Content-Type: application/x-www-form-urlencoded
    Длина контента: 37
    Источник: http:// 10.49.191.239
    Соединение: закрыто
    Источник: http:// 10.49.191.239 /support/login/
    Запросы на обновление, небезопасные и некорректные: 1
    
    имя пользователя = §pentester§ & пароль = §Expl01ted§              

Используя атаку типа «Таран» с тем же списком слов, что и раньше ( burp, suite, и intruder), Intruder сгенерирует три запроса:

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

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

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

Вопрос: В качестве гипотетического вопроса: Вам необходимо выполнить атаку типа «таран» (Battering ram Intruder) на приведенный выше пример запроса.

Если у вас есть список слов, содержащий два слова ( adminи Guest), и позиции в шаблоне запроса выглядят следующим образом:
username=§pentester§&password=§Expl01ted§

Какие параметры будут в теле первого запроса , отправляемого Burp Suite?

Ответ: username=admin&password=admin

8. Вилы

Тип атаки «Вилы» в Burp Suite Intruder похож на одновременную атаку «Снайпер». В то время как «Снайпер» использует один набор полезной нагрузки для одновременной проверки всех позиций, «Вилы» используют один набор полезной нагрузки на каждую позицию (максимум до 20) и перебирают их все одновременно.

Чтобы лучше понять Pitchfork, давайте вернемся к нашему примеру с перебором, но на этот раз с двумя списками слов:

  1. Первый список слов содержит имена пользователей: joel, harriet, и alex.
  2. Второй список слов содержит пароли: J03l, Emma1815, и Sk1ll.

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

Как показано в таблице, Pitchfork берет первый элемент из каждого списка и подставляет его в запрос, по одному на позицию. Затем он повторяет этот процесс для следующего запроса, беря второй элемент из каждого списка и подставляя его в шаблон. Intruder продолжает эту итерацию до тех пор, пока один или все списки не исчерпают свои элементы. Важно отметить, что Intruder прекращает проверку, как только один из списков будет заполнен. Поэтому в атаках Pitchfork идеально, чтобы наборы полезной нагрузки имели одинаковую длину. Если длина наборов полезной нагрузки различается, Intruder будет отправлять запросы только до тех пор, пока не будет исчерпан более короткий список, а оставшиеся элементы в более длинном списке проверяться не будут.

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

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

Вопрос: Каково максимальное количество комплектов полезной нагрузки, которые мы можем загрузить в Intruder в режиме Pitchfork?

Ответ: 20

9. Кассетная бомба

Тип атаки «Кластерная бомба» в Burp Suite Intruder позволяет выбирать несколько наборов полезной нагрузки, по одному на каждую позицию (максимум до 20). В отличие от Pitchfork, где все наборы полезной нагрузки проверяются одновременно, «Кластерная бомба» перебирает каждый набор полезной нагрузки по отдельности, гарантируя проверку каждой возможной комбинации полезных нагрузок.

Для иллюстрации типа атаки «Кластерная бомба» воспользуемся теми же списками слов, что и раньше:

  • Имена пользователей: joel, harriet, и alex.
  • Пароли: J03l, Emma1815, и Sk1ll.

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

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

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

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

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

Вопрос:

У нас есть три набора полезной нагрузки. Первый набор содержит 100 строк, второй — 2 строки, а третий — 30 строк.

Сколько запросов выполнит Intruder, используя эти наборы полезной нагрузки, в атаке с применением кластерной бомбы?

Ответ:6000 (100 * 2 * 30)

10. Практический пример

Чтобы применить наши теоретические знания на практике, мы попытаемся получить доступ к порталу поддержки, расположенному по адресу [адрес портала] http://10.49.129.42/support/login. Этот портал имеет стандартную структуру авторизации, и, изучив его исходный код, мы обнаруживаем, что никаких мер защиты не реализовано:

Исходный код формы входа в систему поддержки

---
<form method="POST">
    <div class="form-floating mb-3">
        <input class="form-control" type="text" name=username  placeholder="Username" required>
        <label for="username">Username</label>
    </div>
    <div class="form-floating mb-3">
        <input class="form-control" type="password" name=password  placeholder="Password" required>
        <label for="password">Password</label>
    </div>
    <div class="d-grid"><button class="btn btn-primary btn-lg" type="submit">Login!</button></div>
</form>
---

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

Примерно три месяца назад компания Bastion Hosting стала жертвой кибератаки, в результате которой были скомпрометированы имена пользователей, адреса электронной почты и пароли сотрудников в открытом виде. Хотя пострадавшим сотрудникам было рекомендовано незамедлительно сменить пароли, существует вероятность, что некоторые проигнорировали этот совет.

Поскольку у нас есть список известных имен пользователей, каждое из которых сопровождается соответствующим паролем, мы можем использовать атаку с подбором учетных данных вместо прямого перебора. Этот метод оказывается более выгодным и значительно быстрее, особенно при использовании версии Intruder с ограничением скорости запросов. Чтобы получить доступ к утёкшим учетным данным, загрузите файл с целевого компьютера, используя следующую команду в AttackBox: wget http://10.49.129.42:9999/Credentials/BastionHostingCreds.zip

Учебное пособие

Для решения этой задачи выполните следующие шаги, чтобы провести атаку с использованием украденных учетных данных с помощью макросов Burp:

  1. Скачайте и подготовьте списки слов:
    Эти списки содержат информацию об утечках электронных писем, имен пользователей и паролей соответственно. Последний список содержит объединенные списки электронных писем и паролей. Мы будем использовать эти usernames.txtсписки passwords.txt.
    • Скачайте и распакуйте файл BastionHostingCreds.zip.
    • В извлеченной папке найдите следующие списки слов:
      • emails.txt
      • usernames.txt
      • passwords.txt
      • combined.txt
  2. Перейдите по указанному адресу http://10.49.129.42/support/loginв вашем браузере. Активируйте Burp Proxy и попробуйте войти в систему, перехватив запрос в вашем прокси. Обратите внимание, что для этого шага подойдут любые учетные данные.
  1. Отправьте перехваченный запрос из прокси-сервера в Intruder, щелкнув правой кнопкой мыши и выбрав «Отправить в Intruder» или используя Ctrl + I.
  1. На вкладке "Позиции" убедитесь, что выбраны только параметры имени пользователя и пароля. Снимите все дополнительные флажки, такие как сессионные cookie.
  1. Установите тип атаки на «Вилы».
  1. Перейдите на вкладку "Полезные нагрузки". Вы найдете два набора полезных нагрузок, доступных для полей имени пользователя и пароля.
  1. В первом наборе полезной нагрузки (для имен пользователей) перейдите в раздел «Параметры полезной нагрузки», выберите «Загрузить» и выберите нужный usernames.txtпункт из списка.
    • Повторите тот же процесс для второго набора данных (для паролей), используя passwords.txtсписок.

  1. Нажмите кнопку «Начать атаку» , чтобы начать атаку с использованием подбора учетных данных. Может появиться предупреждение об ограничении скорости запросов; нажмите «ОК» , чтобы продолжить. Атака займет несколько минут в Burp Community.
  1. После начала атаки в новом окне отобразятся результаты запросов. Однако, поскольку Burp отправил 100 запросов, нам необходимо определить, какой из них (или какие) оказался (были) успешным. Поскольку коды состояния ответа не позволяют различать успешные и неудачные попытки (все они представляют собой перенаправления 302), нам необходимо использовать длину ответа для их различения. Чтобы отсортировать результаты по длине в байтах, щелкните заголовок столбца «Длина». Найдите запрос с меньшей длиной ответа, что указывает на успешную попытку входа в систему.
  1. Для подтверждения успешной попытки входа в систему используйте учетные данные из запроса с более короткой длиной ответа.

получаем

Payload 1: m.rivera
Payload 2: letmein1

Вопрос: Какая комбинация имени пользователя и пароля указывает на успешный вход в систему? Формат ответа: "имя пользователя:пароль".

Ответ: m.rivera:letmein1

11. Практическая задача

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

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

http://10.49.129.42/support/ticket/NUMBER

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

  1. Контроль доступа : Конечная точка может быть правильно настроена для ограничения доступа только к заявкам, назначенным текущему пользователю. В этом случае мы можем просматривать только заявки, связанные с нашей учетной записью.
  2. Уязвимость IDOR : Кроме того, на конечной точке могут отсутствовать надлежащие средства контроля доступа, что приводит к уязвимости, известной как небезопасные прямые ссылки на объекты (IDOR). В этом случае мы потенциально можем использовать уязвимость системы и прочитать все существующие билеты, независимо от назначенного пользователя.

Для дальнейшего исследования мы воспользуемся инструментом Intruder для фаззинга /support/ticket/NUMBERконечной точки. Этот подход поможет нам определить, правильно ли настроена конечная точка или присутствует ли уязвимость типа IDOR . Давайте приступим к процессу фаззинга!

забираем страничку в интрудер

указываем что перебираем

в пайлоде указываем числа и ставим от 0 до 1000

Атака

Видим что нашлось 6 - 57 - 78 - мы про них знали, но появились новые 47 и 83

47

83 - итог идор уязвимость есть

Примечание: Вам необходимо отправить запрос, находясь в системе.

Вопрос: Какой тип атаки лучше всего подходит для решения этой задачи?

Ответ: Sniper

Вопрос: Что это за флаг?

Ответ:THM{MTMxNTg5NTUzMWM0OWRlYzUzMDVjMzJl}

12. Испытание «Дополнительная миля»

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

Обработка запроса

Для начала перехватите запрос http://10.49.129.42/admin/login/и проанализируйте ответ. Вот пример ответа:

Пример ответа

HTTP/1.1 200 OK
Сервер: nginx/1.18.0 (Ubuntu)
Дата: пятница, 20 августа 2021 г., 22:31:16 по Гринвичу
Content-Type: text/html; charset=utf-8
Соединение: закрыто
Set-Cookie: session=eyJ0b2tlbklEIjoiMzUyNTQ5ZjgxZDRhOTM5YjVlMTNlMjIzNmI0ZDlkOGEifQ.YSA-mQ.ZaKKsUnNsIb47sjlyux_LN8Qst0 ; HttpOnly; Path=/
Разные: Печенье
Front-End-Https: on
Content-Length: 3922
---
<form method="POST">
    <div class="form-floating mb-3">
        <input class="form-control" type="text" name=username placeholder="Имя пользователя" required>
        <label for="username">Имя пользователя</label>
    </div>
    <div class="form-floating mb-3">
        <input class="form-control" type="password" name=password placeholder="Пароль" required>
        <label for="password">Пароль</label>
    </div>
    <input type="hidden" name="loginToken" value="84c6358bbf1bd8000b6b63ab1bd77c5e">
    <div class="d-grid"><button class="btn btn-warning btn-lg" type="submit">Войти!</button></div>
</form>

В этом ответе мы видим, что помимо полей имени пользователя и пароля, теперь установлен сессионный cookie, а также токен CSRF ( Cross-Site Request Forgery ) в форме в виде скрытого поля. Обновление страницы показывает, что и сессионный cookie, и loginToken изменяются при каждом запросе. Это означает, что при каждой попытке входа в систему нам необходимо извлекать действительные значения как для сессионного cookie, так и для loginToken.

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

Учебное пособие

  1. Перейдите по ссылке http://10.49.129.42/admin/login/. Активируйте функцию «Перехват» в модуле «Прокси» и попробуйте войти в систему. Перехватите запрос и отправьте его в Intruder.
  1. Настройте позиции так же, как мы это делали для подбора паролей для входа в службу поддержки методом перебора:
    • Установите тип атаки на «Pitchfork».
    • Очистите все предопределенные позиции и выберите только поля ввода имени пользователя и пароля. Наш макрос обработает оставшиеся две позиции.
  2. Теперь перейдите на вкладку «Полезные нагрузки» и загрузите те же списки имен пользователей и паролей, которые мы использовали для атаки на вход в службу поддержки. До этого момента мы настраивали Intruder практически так же, как и при предыдущей атаке с использованием украденных учетных данных; вот здесь-то все и начинает усложняться.
  1. После обработки параметров имени пользователя и пароля нам нужно найти способ получить постоянно меняющийся loginToken и cookie сессии. К сожалению, "рекурсивный grep" здесь не сработает из-за ответа перенаправления, поэтому мы не можем сделать это полностью в Intruder — нам потребуется создать макрос. Макросы позволяют нам многократно выполнять один и тот же набор действий. В данном случае мы просто хотим отправить GET-запрос на адрес /admin/login/.К счастью, настройка — довольно простой процесс. В этом процессе, сравнительно говоря, много этапов, поэтому на следующем GIF-изображении показан весь процесс:
    • Перейдите на главную вкладку «Настройки» в правом верхнем углу Burp.
    • Нажмите на категорию "Сессии".
    • Прокрутите страницу вниз до раздела «Макросы» и нажмите кнопку «Добавить» .
    • В появившемся меню отобразится история наших запросов. Если в списке еще нет GET-запроса http://10.49.129.42/admin/login/ , перейдите по этой ссылке в браузере, и вы увидите подходящий запрос в списке.
    • Выбрав запрос, нажмите ОК .
    • Наконец, дайте макросу подходящее имя, а затем снова нажмите кнопку ОК, чтобы завершить процесс.
  1. Теперь, когда макрос определен, нам необходимо установить правила обработки сессий, которые определяют, как следует использовать макрос.
    • Оставаясь в разделе «Сессии» основных настроек, прокрутите вверх до раздела «Правила обработки сессий» и выберите « Добавить новое правило».
    • Откроется новое окно с двумя вкладками: «Подробности» и «Область применения». По умолчанию мы находимся на вкладке «Подробности».
    • Введите соответствующее описание, затем перейдите на вкладку «Область применения».
    • В разделе «Область применения инструментов» снимите флажки со всех полей, кроме «Нарушитель» — нам не нужно, чтобы это правило применялось где-либо еще.
    • В разделе «Область действия URL» выберите «Использовать область действия набора инструментов»; это настроит макрос на работу только с сайтами, добавленными в глобальную область действия (как обсуждалось в разделе «Основы Burp »). Если вы не задали глобальную область действия, оставьте параметр «Использовать пользовательскую область действия» по умолчанию и добавьте http://10.49.129.42/в эту область действия.
  1. Теперь нам нужно вернуться на вкладку «Подробности» и посмотреть раздел «Действия правила». В текущем виде этот макрос будет перезаписывать все параметры в наших запросах Intruder перед их отправкой; это замечательно, поскольку это означает, что токены авторизации и сессионные cookie будут добавлены непосредственно в наши запросы. Тем не менее, перед началом атаки следует ограничить круг обновляемых параметров и cookie:Следующий GIF-файл демонстрирует заключительный этап процесса:
    • Нажмите кнопку «Добавить» — появится выпадающее меню со списком действий, которые можно добавить.
    • Выберите пункт «Запустить макрос» из этого списка.
    • В появившемся новом окне выберите макрос, который мы создали ранее.
    • Выберите «Обновить только следующие параметры и заголовки», затем нажмите кнопку « Редактировать» рядом с полем ввода под переключателем.
    • В текстовом поле «Введите новый элемент» введите «loginToken». Нажмите «Добавить» , затем «Закрыть» .
    • Выберите «Обновить только следующие файлы cookie», затем нажмите соответствующую кнопку «Редактировать» .
    • Введите "session" в текстовое поле "Введите новый элемент". Нажмите " Добавить" , затем "Закрыть" .

    • Наконец, нажмите кнопку ОК , чтобы подтвердить действие.
  1. Нажмите ОК , и готово!
  2. Теперь у вас должен быть определен макрос, который будет подставлять токен CSRF и cookie сессии. Осталось только переключиться обратно на Intruder и начать атаку! Примечание: В ходе этой атаки на каждый запрос должен приходить ответ с кодом состояния 302. Если вы видите ошибки 403, значит, ваш макрос работает некорректно.
  3. Как и в случае с атакой с использованием украденных учетных данных для входа в службу поддержки, коды ответов здесь одинаковы (302 Redirects). Снова отсортируйте ответы по длине, чтобы найти действительные учетные данные. Результаты будут не такими однозначными, как в прошлый раз – вы увидите довольно много ответов разной длины, однако ответ, указывающий на успешный вход в систему, все равно должен быть значительно короче.
  4. Используйте найденные вами учетные данные для входа в систему (возможно, вам потребуется обновить страницу входа перед вводом учетных данных).

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

Если кому то надо вот

#!/usr/bin/env python3 """ Multi-threaded brute-force login with dynamic session cookie + CSRF token. For educational / CTF lab use only. """

import requests import re import sys import threading from concurrent.futures import ThreadPoolExecutor, as_completed

# ─── CONFIG ─────────────────────────────────────────────────────────── TARGET = "http://10.49.129.42" LOGIN_URL = f"{TARGET}/admin/login/" USERNAMES = "/home/kali/Desktop/passbastion/usernames.txt" PASSWORDS = "/home/kali/Desktop/passbastion/passwords.txt" THREADS = 100 # ← подкрути под свою машину / лабу (10-30) TIMEOUT = 10

TOKEN_RE = re.compile(r'name="loginToken"\s+value="([^"]+)"') FAIL_MARKERS = ["Invalid credentials", "incorrect", "invalid", "Войти!", "login"]

# Shared state found = threading.Event() counter = 0 counter_lock = threading.Lock() total = 0

def load_wordlist(path: str) -> list[str]: with open(path, "r", encoding="utf-8", errors="ignore") as f: return [line.strip() for line in f if line.strip()]

def try_login(user: str, pwd: str) -> tuple[bool, str, str]: """One attempt: GET fresh token → POST creds → check result.""" global counter if found.is_set(): return False, user, pwd

s = requests.Session() resp = s.get(LOGIN_URL, timeout=TIMEOUT) m = TOKEN_RE.search(resp.text) if not m: return False, user, pwd token = m.group(1)

resp = s.post( LOGIN_URL, data={"username": user, "password": pwd, "loginToken": token}, timeout=TIMEOUT, allow_redirects=True, )

with counter_lock: counter += 1 sys.stdout.write(f"\r[{counter}/{total}] {user}:{pwd} ") sys.stdout.flush()

# Success checks if resp.url != LOGIN_URL and "/login" not in resp.url: return True, user, pwd body = resp.text.lower() if not any(m.lower() in body for m in FAIL_MARKERS): return True, user, pwd

return False, user, pwd

def main(): global total usernames = load_wordlist(USERNAMES) passwords = load_wordlist(PASSWORDS) total = len(usernames) * len(passwords)

print(f"[*] Target: {LOGIN_URL}") print(f"[*] Users: {len(usernames)}") print(f"[*] Passwords: {len(passwords)}") print(f"[*] Total: {total} combinations") print(f"[*] Threads: {THREADS}\n")

pairs = [(u, p) for u in usernames for p in passwords]

with ThreadPoolExecutor(max_workers=THREADS) as pool: futures = {pool.submit(try_login, u, p): (u, p) for u, p in pairs} for future in as_completed(futures): if found.is_set(): break try: ok, user, pwd = future.result() if ok: found.set() print(f"\n\n[+] SUCCESS! → {user}:{pwd}\n") pool.shutdown(wait=False, cancel_futures=True) sys.exit(0) except Exception: pass

print(f"\n\n[-] No valid credentials found.")

if __name__ == "__main__": main()

Вопрос: Какая комбинация имени пользователя и пароля указывает на успешный вход в систему? Формат ответа: "имя пользователя:пароль".

Ответ: o.bennett:bella1

13. Заключение

Поздравляем с завершением строительства комнаты Burp Suite Intruder!

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

В следующем зале модуля мы рассмотрим некоторые другие модули Burp Suite !


Основная группа обучения ИБ
Lab-группу с полезным софтом / книгами / аудио.
Чат для обсуждений, задавай свои вопросы.
P.S. С вами был @Fnay_Offensive
До новой встречи, user_name!