← Ко всем статьям

Гайд по фаззингу:
как исследовать директории, файлы и API

Автор статьи: Роман Насибуллин

← Ко всем статьям

Гайд по фаззингу: как исследовать директории, файлы и API

Автор статьи: Роман Насибуллин
ВСЕМ ПРИВЕТ!
Меня зовут Роман Насибуллин. Я пентестер в Singleton Security, специализируюсь на внешнем пентесте и анализе веб-приложений. В этой статье расскажу про веб-фаззинг, а именно, про перебор директорий и файлов. Хочу поделиться знаниями, которые помогут сделать фаззинг более полезным и эффективным.
ЧТО ТАКОЕ ВЕБ-ФАЗЗИНГ

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

Я отправляю запросы вида:
  • https://site.com/admin
  • https://site.com/backup.zip
  • https://site.com/.env
И смотрю, на что сервер ответит 200, 301, 302, 403 или другими интересными кодами.

ЗАЧЕМ ЭТО НУЖНО?
Разработчики часто могут оставить:
  • скрытые админки
  • бэкапы файлов ( config.php.bak)
  • служебные директории ( /.git/, /backup/)
  • файлы с чувствительной информацией ( .env)

Моя задача — найти это раньше, чем настоящий злоумышленник.

ЧТО НАМ ПОНАДОБИТСЯ

Основной инструмент, которым я пользуюсь — ffuf.

ffuf (Fuzz Faster U Fool) работает по простой логике: берёт список слов (wordlist) и подставляет их в заданное место запроса (например, в URL), анализируя ответы сервера. Это позволяет находить скрытые админки, бэкапы, служебные файлы и другие потенциально уязвимые точки. Таким образом он помогает автоматизировать поиск скрытых ресурсов и ускоряет процесс пентеста — то, что вручную заняло бы часы или дни, он делает за минуты, при этом даёт гибкие настройки скорости, фильтрации и формата вывода. Он быстрый, гибкий, может сохранять результаты в json и подстраиваться под разные задачи.
Важное правило, которое я выучил кровью: никогда не фаззь без кастомного User-Agent. Иначе WAF заблокирует тебя ещё до начала теста.
По умолчанию многие инструменты, включая ffuf, используют стандартный или палящийся User-Agent. WAF (Web Application Firewall) и другие системы защиты умеют распознавать такие сигнатуры и быстро блокируют запросы, определяя их как автоматизированную атаку.

Когда ты задаёшь кастомный User-Agent (например, копируешь его из обычного браузера), твой трафик выглядит более «человеческим», и вероятность блокировки снижается.

Я обычно беру реальный User-Agent из своего браузера или из словарей SecLists.
новый поток
Курс «Пентестер»
Только в апреле
7 в 1:
+
Авторский курс Егора Зайцева
«Оценка устойчивости средств защиты»
+
Доступ к 20+ приватным программам Киберсипытаний
для лучших студентов
+
Программа «Bug Bounty Hunter»
от Standoff 365
+
Карьерный модуль
по поиску работы
+
Дополнительный курс
в подарок на выбор
+
Авторский курс от Похека
«AI в пентесте»
ПРО СКОРОСТЬ И СКРЫТНОСТЬ

На этапе фаззинга не хочется быть заблокированным сервером, поэтому стоит обратить внимание ограничение скорости запросов. Если сервер не реагирует, то можем постепенно увеличивать количество запросов.
Пример команды:
Здесь:
  • u http://target.com/FUZZ – URL-адрес сайта с указанием места фаззинга
  • w wordlist.txt – путь до словаря, используемого для фаззинга
  • o ffuf_scan.json – запись вывода в файл
  • H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" – указание заголовка при запросе
  • rate 25 – ограничения количества запросов в секунду
Также мы можем сделать задержку между запросами и ограничить потоки, что бывает тоже очень полезным.
Пример команды:
Здесь:
  • u http://target.com/FUZZ – URL-адрес сайта с указанием места фаззинга
  • w wordlist.txt – путь до словаря, используемого для фаззинга
  • o ffuf_scan.json – запись вывода в файл
  • H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" – указание заголовка при запросе
  • p 5 – задержка в пять секунд между запросами
  • t 5 – ограничение потоков
Данная команда будет посылать 5 запросов, а потом сделает паузу на 5 секунд.

Данными параметрами можно играть, чтобы ускорить процесс или сделать фаззинг еще скрытнее. В общем, тут все зависит от ситуации тестирования.
СЛОВАРИ – ЭТО 90% УСПЕХА

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

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

Заслуживает внимания поиск файлов по расширениям.
Расширения кратно могут увеличить покрытие исследуемого объема работ. Поделюсь расширениями, которые я использую при поиске файлов в веб-приложениях.
Также стоит обратить внимание на js-файлы приложения, из которых есть возможность вытащить роуты приложения.
СОСТАВЛЯЕМ КАРТУ ПРИЛОЖЕНИЯ

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

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

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

1. Базовый режим
Работает на основе стандартной HTTP-библиотеки Go, что обеспечивает высокую
производительность и минимальное потребление ресурсов. Его ограничение заключается в анализе статического HTML-кода без выполнения сценариев JavaScript.
Как следствие, могут остаться незамеченными ссылки и интерфейсы, которые становятся доступны только после обработки страницы в браузере.

2. Headless-режим (активируется флагом -headless)
Для полного анализа страницы используется реальный браузер в фоновом режиме.

Этот метод обеспечивает два ключевых преимущества:
  • Естественный отпечаток: TLS и User-Agent идентичны настоящему браузеру, что помогает избежать блокировок.
  • Максимальное покрытие: Выявляются все элементы, подгружаемые динамически через JavaScript.
Полезно еще исследовать известные URL-адреса из базы данных Wayback Machine (а также из других источников), в этом поможет инструмент waymore.
Примеры использования утилиты:
API: ОТДЕЛЬНЫЙ ПОДХОД

Для начала я всегда пытаюсь найти документацию API, ведь это может существенно облегчить задачу для дальнейшего тестирования. В этом мне помогает словарь API-Documentation-Wordlist, в котором содержатся широко известные конечные точки API. Часто API-роуты можно вытащить из js-файлов приложения, я использую дополнение в BurpSuite JS Miner, которое вытаскивает роуты вместе с методом HTTP-запросов. Отмечу, что APIs могут использоваться сторонними разработчиками, которые имеют открытую документацию, но которую нужно найти самостоятельно.

Бывают случаи, когда разработчики оставляют старые версии АПИ, роуты которых могут содержать уязвимости. Например, приложение работает в основном с /api/v2/..., тогда имеет смысл проверить /api/v1/... и прочие версии.

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

! Но стоит помнить и знать, что использовать все возможные HTTP-методы может потенциально опасно для исследования приложения, так как мы можем удалить или изменить данные, даже не поняв этого. Нужно согласовывать свои действия с заказчиками или лидами проекта и хранить лог своих действий во избежание неприятных ситуаций.
ЗАКЛЮЧИТЕЛЬНАЯ МЫСЛЬ

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

Отмечу несколько простых пунктов, без которых фаззинг не может жить:

1. Хороший словарь решает всё. Без него даже ffuf будет бесполезен.

2. Скорость — не главное. Лучше подождать пару часов и не быть забаненным, чем получить блок на первой минуте.

3. Расширения файлов — это золото. Добавил bak, old, ~, env — и нашёл то, что многие пропустили.

4. API — отдельная история. Документация, старые версии, разные HTTP-методы. Но осторожно, не все HTTP-методы безопасны.

5. Не полагайся только на фаззинг. Katana, waymore, JS-анализ — это всё часть большого пазла.

Удачи в исследованиях и пусть ваши словари всегда содержат нужное слово!
и зарабатывай на знаниях прямо во время обучения
Получи востребованную профессию в ИБ
Оплачиваемые стажировки 
для лучших студентов
Поможем выбрать подходящую специальность
Поддержка наставников во время и после обучения
Теория и практика от топовых экспертов из Kaspersky Lab, Positive Technologies, Bi. Zone и других лидеров отрасли