Статья Методология фаззинга веб-приложений. Часть 2

vag4b0nd

Red Team
24.05.2017
310
1 489
BIT
62

Введение

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

Расширение методологии фаззинга веба

В этой главе мы усовершенствуем методику тестирования, объединив несколько основных методов:​
  1. Фаззинг директорий: необходим для обнаружения скрытых путей к конфиденциальным данным и прочим страницам, доступным без аутентификации. Данный метод часто позволяет выявить интересные ресурсы, такие как репозитории .git, которые могут представлять значительную угрозу, начиная с банального раскрытия критической информации.​
  2. Фаззинг форм входа: необходим для оценки безопасности механизмов аутентификации. Систематически тестируя подобные формы, мы можем установить их уровень устойчивости к попыткам несанкционированного доступа.​
  3. Фаззинг параметров: и самое основное, необходимо для выявления уязвимостей в параметрах приложения. Этот основа для остальных методов автоматического тестирования, которые мы рассматривали в первой части и возможно затронем в будущем.​

База фаззинга при пентесте

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

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

Думаю многие из вас и так знакомы с набором инструментов ниже, но тем не менее стоит упомянуть, что это база, которая облегчает работу по фаззингу, отличаясь соответствующими направленностями и плюшками:​
  • ffuf (Fuzz Faster U Fool): популярный веб-фаззер благодаря своей высокой производительности при обнаружении элементов и контента веб-приложений, в основном используемый для обнаружения каталогов и файлов, но адаптируемый для широкого спектра задач фаззинга.​
  • : утилита на основе Java, известная своей способностью идентифицировать скрытые файлы и каталоги на веб-сервере, используя подход на основе списков для систематического изучения структур веб-приложений.​
  • Wfuzz: предлагает комплексное решение для фаззинга, адаптированное для веб-приложений, поддерживающее множество сценариев: от обнаружения каталогов до перехвата сеансов и фаззинга параметров. Его обширный набор функций и модульная архитектура позволяют адаптировать его к широкому спектру требований тестирования.​

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


Поиск директорий via FuZz

Методы фаззинга служат различным целям аудита, одна из которых - обнаружение доступных каталогов висящих снаружи приложения. Для этого базовая команда с использованием ffuf может выглядеть так:
Bash:
ffuf -u <url> -w <wordlist>

2024-10-28_23-33.png


Крайне важно вставить ключевое слово «FUZZ» в то место, куда должены быть переданы значения из списка. На этом этапе сам объем результатов может быть довольно огромным, так как может включать вывод включая не желательные коды ответов, что затрудняет определение полезных данных. Здесь в игру вступают фильтры. FFUF предоставляет набор фильтров: от обычного статуса ответа до регулярных выражений, ну и также определяемых «сопоставителей». В отличие от фильтров, средства сопоставления точно определяют, что именно мы ищем. Например, если вы ищете конкретное слово в ответе, вы можете использовать -mr "word". В примере ниже используется фильтр с регуляркой, которая ищет запросы возвращающие ошибки в MySQL.

Bash:
-mr "SQL syntax error|You have an error in your SQL syntax|Database error|syntax error|Warning:|mysql_fetch_array() expects parameter 1 to be"

2024-10-28_23-57.png


Также, стоит отметить, что использование фильтра размера ответа (-fs) эффективно упрощает анализ результатов, делая поиск каталогов более очевидным.

В репозиториях GitHub доступно множество списков слов, но я хотел бы особо выделить два, которые оказались исключительно полезными в моих наступательных усилиях по обеспечению безопасности. Первым среди них являются списки Списки слов, которые актуальны и эффективны в анализе самых популярных технологий. Второй заслуживающий внимания ресурс принадлежит создателю reconftw, инструмента, предназначенного для автоматизации тестирования на проникновение в веб-приложениях. Списки слов, доступные в этом репозитории, исключительно ценны благодаря своей широкой применимости и часто дают впечатляющие результаты: OneListForAll

FuZzинг форм аутентификации

Фаззинг полезен во многом, и не только для обнаружения затерянных директорий с плюшками, но и также играет большую роль в тестировании аутентификации, особенно в процессах восстановления пароля и входа в систему. Тестирование начинается с получения запроса в необработанном формате, который можно получить с помощью прокси по типу mitmproxy, ZAP или дефолтного Burp Suite. Получение запроса — это подготовительный шаг к фаззингу, который предполагает замену параметров заполнителями «FUZZ».​

2024-10-29_00-10.png


2024-10-29_00-12.png


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

Bash:
ffuf -request login.txt -request-proto http -replay-proxy http://0.0.0.0:8080 -w passwords.txt | tee results.txt

Эта команда использует подготовленный текстовый файл (например, login.txt), содержащий перехваченный запрос, с надписью «FUZZ» в поле пароля. -w флаг определяет список слов для паролей, а флаг -replay-proxy ретранслирует запросы на проксю для дальнейшего анализа. Об успешной атаке свидетельствуют ответы сервера, которые подтверждают отсутствие блокировки пользователей или других механизмов предотвращения перебора, демонстрируя уязвимость приложения.
2024-10-29_00-17.png


2024-10-29_00-19.png


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

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

С другой стороны, одну и ту же методологию можно адаптировать для различных целей, таких как регистрация пользователей, проверка идентификатора для выявления проблем с авторизацией и многое другое. Если окажется, что приложение уязвимо для атак методом перебора, может быть полезно расширить атаку, включив в нее имена пользователей. Следующий ресурс предлагает списки слов для создания статистически вероятных имен пользователей, которые можно настроить, включив в них детали, специфичные для домена, для более эффективной атаки — Insidetrust/statistically-likely-usernames

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

Bash:
ffuf -request fuzzing_login.txt -request-proto http -replay-proxy http://0.0.0.0:8888 -w passwords.txt:PASS -w users.txt:USER | tee results.txt

Успешные попытки обычно обозначаются кодом состояния HTTP 200, найденным в файле, где ffuf сохранил свои результаты, что свидетельствует об эффективности стратегии грубого перебора. Такой подход подчеркивает важность выбора подходящих списков слов и точной настройки параметров фаззинга для эффективного выявления уязвимостей безопасности в веб-приложениях.

Обнаружение уязвимостей с помощью фаззинга

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

2024-10-29_14-23.png


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

Bash:
ffuf -request stored_xss_fuzzing.txt -request-proto http -replay-proxy http://0.0.0.0:8080 -w xss_paylaods.lst -od xss_fuzzing_result -mr "<script.*?>(.*?)<\/script>|<.*?on.*?=.*?javascript:.*?|<.*?on.*?=.*?eval\(.*?|<.*?on.*?=.*?alert\(.*?"

2024-10-29_14-28.png


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

2024-10-29_14-29.png


2024-10-29_14-29_1.png


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

Заключение

Когда мы завершаем исследование фаззинга в рамках тестирования веб ресурсов, становится ясно, что этот метод имеет неоценимое значение. Благодаря стратегическому применению фаззинга мы на практике увидели, как можно разыскивать каталоги, реализовывать атаки на формы входа и охотиться за уязвимостями, которые могут поставить под угрозу целостность приложения. Такие инструменты, как Ffuf - незаменимые союзники в подобного рода поисках, ведь они позволяют проводить комплексные и эффективные оценки безопасности. На этом наше путешествие не заканчивается. Постоянно развивающаяся природа веб-технологий и угроз требует безостановочного обучения и адаптации к новым реалиям. Применяя знания и стратегии, обсуждаемые в этой части, помните, что конечная цель — оставаться на шаг впереди потенциальных угроз.​
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!