August 16

Фаззинг каталогов и скрытые ресурсы [Complete web app pentesting series #5]

Введение

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

Один из самых эффективных инструментов для этого — Ffuf (Fast Fuzzer). В веб-версии он написан на Go и отличается максимальной скоростью и гибкостью. Ffuf — это не только брутфорсер каталогов, но и фаззинг практически любого раздела HTTP-запроса, поэтому этот инструмент должен быть у любого специалиста по информационной безопасности.

FFUF

Ffuf — это быстрый веб-фаззер, который легко настраивается из исходного кода. Хотя он в основном используется для фаззинга каталогов, его также можно использовать для:

  • Фаззинг параметров
  • Фаззинг заголовков
  • Обнаружение расширений файлов
  • Тесты обхода аутентификации

Ffuf поддерживает такие функции, как рекурсивный фаззинг, позволяющий проводить фаззинг на более глубоком уровне, не ограничиваясь аутентифицированным сеансом, возможность добавлять пользовательские заголовки к любым запросам и даже к JSON-запросам. Что ещё важнее, он быстрый и гибкий, что сделало его популярным среди охотников за багами и пентестеров.

Зачем использовать Ffuf?

Как уже упоминалось, большинство инструментов для перебора паролей каталогов доступны, но их главная цель — скорость. Некоторое время назад CryptoCatрешил снять видео о том какой фаззер лучше ffuf или wfuzzну ответ очевиден ffufнамного лучше.

Ffuf выделяется еще несколькими причинами, и вот некоторые из них:

  • Скорость: Изначально Ffuf был программой на языке Go, но при его разработке особое внимание уделялось скорости.
  • Гибкость: с помощью Burp можно выполнить фаззинг всех заголовков, URL-адресов, параметров и других элементов, которые мне неизвестны.
  • Простота использования: синтаксис прост для понимания, а также совместим со многими инструментами и программным обеспечением.
  • Расширяемость: у этого инструмента есть еще одна функция, которую я проверил на рекурсию, работу с пользовательским списком слов и такие задачи, как SQL-инъекции или XSS.

Установка

Метод 1: Использование менеджера пакетов (Kali Linux)

sudo apt install ffuf

Это установит последнюю стабильную версию из репозиториев Kali.

Метод 2: Сборка из исходного кода

Убедитесь, что Go установлен в вашей системе.

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

go install github.com/ffuf/ffuf/v2@latest

Проверьте установку:

ffuf -version

Базовое использование

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

ffuf -u http://target.com/FUZZ -w /path/to/wordlist.txt
  • -u: Указывает целевой URL.
  • FUZZ: Заполнитель, который будет заменен словами из списка слов.
  • -w: Путь к файлу списка слов.

Пример:

ffuf -u http://example.com/FUZZ -w /usr/share/wordlists/dirb/common.txt

Это позволит проверить каждое слово из списка на соответствие целевому URL.

Фаззинг с расширениями

Например, для поиска файлов определённого типа используется флаг -e . Это очень полезно, поскольку не все веб-сайты имеют одинаковое расширение в веб-браузерах. Некоторые из таких веб-сайтов могут представлять собой одну веб-страницу с именем, например, index.html или index.php, или, если повезёт, могут встретить что-то вроде database.bak или backup.bak, которые представляют собой просто расширение backup.

ffuf -u http:>/FUZZ: //target.com/FUZZ -w /path/to/wordlist.txt -e .php,.html,.bak

Добавление добавляет расширения файлов к каждому слову в списке слов.

Ещё одна особенность Ffuf, делающая его мощным инструментом, — это возможность фильтрации и сопоставления ответов по нескольким HTTP-параметрам. Хотя фаззинг, проходящий по различным ответам, иногда может быть сложным занятием, особенно если не используются критерии фильтрации результатов. После применения фильтров и сопоставлений вы получаете нечто гораздо более важное: релевантные конечные точки и возможные уязвимости.

Коды статусов

Код статуса — один из самых быстрых способов понять ответ сервера на конкретные запросы. Опять же, не обязательно просматривать все ответы в поисках нужного: -mc может работать с конкретными кодами статуса. Например, **200 OK обычно означает, что страница доступна, а **403 Forbidden означает, что страница недоступна.

ffuf -u http:>target.com/FUZZ -w /path/to/wordlist.txt -mc ‘200 403’

Эта команда выведет на экран только ответы со статусом 200 и 403; страницы со статусом 200 доступны, но не следует игнорировать интересные и потенциально ценные страницы, относящиеся к статусу 403.

Длина контента

Другой тип фильтра — фильтр, позволяющий респондентам фильтровать ответы по длине их содержимого. Довольно часто веб-приложения используют одни и те же коды статуса для разных типов страниц. Чтобы различать эти ответы, информацию необходимо фильтровать по длине. Например, если типичная страница «Не найдено» имеет длину содержимого 1234 байта, вы можете исключить такие ответы, используя -fl :

ffuf -u http:>/target.com/FUZZ -w /path/to/wordlist.txt -fl 1234

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

Сопоставление регулярных выражений

Регулярные выражения используются для того, чтобы сделать фильтры ещё более конкретными, выявляя определённые закономерности в теле ответа. Это удобно при поиске определённых ключевых слов/путей к файлам в ответе. Например, если вы ищете панели администратора, вы можете найти ответы, содержащие слово «admin»:

ffuf -u http:>//target.com/FUZZ -w /path/to/wordlist.txt -mr admin

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

Пример использования

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

ffuf -u http://target.com/FUZZ -w /path/to/backup_wordlist.txt -mc 200 -fl 5120 -mr ".bak"

В этом примере:

  • -mc 200 гарантирует, что вы увидите только успешные ответы.
  • -fl 5120 отфильтровывает общие ответы длиной 5120 байт.
  • -mr «.bak» выделяет ответы, содержащие расширения файлов резервных копий.

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

Бесшумный режим и выход

При фаззинге результаты могут быть запутанными, особенно если вы работаете с тысячами возможных адресов. Ffuf по умолчанию отображает все результаты, что может перегрузить ваш терминал и, кроме того, занять много места. Режим Silent Mode — это функция, которая позволяет скрыть большую часть отображаемой информации, отображая только интересующие вас результаты.

Чтобы включить беззвучный режим и сохранить результаты в файл:

ffuf -u http:>target.com/FUZZ -w /path/to/wordlist.txt -s -o results.txt

Обработка аутентификации

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

Аутентификация с использованием пользовательских заголовков

Заголовки используются даже во многих API аутентификации, таких как API-ключи, а аутентификация с помощью токена-предъявителя — это механизм, основанный на HTTP-заголовках. Вот как выполнить фаззинг аутентифицированной конечной точки API с помощью пользовательского заголовка:

ffuf -u http:;//target.com/FUZZ -w /path/to/wordlist.txt -H “Authorization: Bearer TOKEN”

Файлы cookie для аутентификации на основе сеанса

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

ffuf -u http:>/target.com/FUZZ -w /path/to/wordlist.txt -b “sessionid=abc123”

Эти файлы cookie можно получить непосредственно из вашего браузера или распространённого прокси-сервера, например, Burp Suite. Это означает, что, используя их в запросах Ffuf, вы сможете получить доступ к материалам, скрытым за различными формами аутентификации.

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

Практические сценарии

Обнаружение панелей администратора

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

ffuf -u http:On the website target.com/FUZZ I use:
FUZZ –w /usr/share/wordlists/dirb/common.txt -mc 200

В этом примере:

Все слова в списке слов заменяют слово FUZZ.

-mc 200 используется для фильтрации ответов, чтобы отображались только успешные ответы с HTTP-кодом 200.

Это позволяет легко находить доступные панели администратора.

Поиск файлов резервных копий

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

ffuf -u http:=/target.com/FUZZ -w /path/to/wordlist.txt -e .bak,.zip,.tar

Здесь:

-e .bak,.zip,.tar определяет расширения файлов, которые нужно добавить к каждому слову в списке слов.

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

Фазинфекция данных POST

Проведение тестов словарей POST-запросов важно для выявления недостатков веб-форм, API и сервисов. Используя ffuf, можно проводить фаззинг данных POST, указав метод запроса -X POST и включив тело запроса с помощью флага -d .

ffuf -u http:http://target.com/ -X POST -d “username=FUZZ&password=pass123” –wordlist /path/to/wordlist.txt

FUZZ в полезной нагрузке заменяется каждым словом в списке слов.

Например, этот метод оценивает входные поля, такие как имя пользователя, на предмет наличия таких рисков, как внедрение SQL-кода или слабая кредитная история контрразведки.

Вы можете тестировать несколько полей одновременно:

ffuf -u http://target.com/ -X POST -d “username=FUZZ&password=FUZZ” -w /path/to/wordlist.txt

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

Фаззинг полезных данных JSON

Большинство современных веб-приложений и API используют JSON в качестве основного способа обмена данными. Ffuf поддерживает фаззинг входных данных, устанавливая правильный тип контента и добавляя ключевое слово FUZZ в JSON-данные.

Пример:

ffuf -u http:https://target.com/api – X POST – H “Content-Type: application/json” – d “{“user”:“FUZZ”}” – w /path/ to/ wordlist.txt

В данном случае Ffuf добавит FUZZ к каждому слову в списке слов и отправит аналогичную полезную нагрузку JSON целевому API. Этот метод позволяет выявить:

  • Скрытая функциональность API
  • Уязвимости доступа высокого уровня
  • Раскрытие конфиденциальных данных

Вы можете выполнить фаззинг вложенных структур JSON, поместив FUZZ на разных уровнях объекта JSON:

-d '{"user":{"id":"FUZZ"}}'

Такой подход удобен при локализации потенциальных проблем с массовым назначением или при экспериментах с конечной точкой API, принимающей сложные объекты JSON.

Понимание режимов Ffuf: Pitchfork, Clusterbomb и Sniper

Fast Fuzzer (Ffuf) — это универсальный и мощный инструмент фаззинга, эффективно работающий с веб-приложениями и входными параметрами. Одна из его самых мощных функций — поддержка фаззинга по многословным спискам, предлагающая три режима работы: Pitchfork, Sniper и Clusterbomb . Каждый из них предназначен для определённой цели и имеет несколько различающийся синтаксис для решения задачи.

Clusterbomb Mode

Что он делает: В режиме кластерной бомбы я последовательно тестирую все полезные данные из нескольких списков слов. Ffuf привязывает список слов к определённому плейсхолдеру в URL или полях, просто ожидая их ввода и перебирая их исчерпывающим образом. Однако, отметим, что вы можете использовать one или moreсписки слов.

Подходит для: тестирования большинства параметров в большинстве областей, когда важна каждая комбинация.

Пример :

    ffuf -u https://example.com/FIRST/SECOND \
         -w "/usr/share/wordlists/rockyou.txt:FIRST" \
         -w "/usr/share/wordlists/common.txt:SECOND" \
         -mode clusterbomb

В этом примере:
The FIRSTзаполнитель заменяется словами из rockyou.txt.

  • The SECONDзаполнитель заменяется словами в common.txt. Режим проверяет такие комбинации, как /admin/login, /user/logout, и т.д.

Pitchfork Mode

Что делает: Параллельное выравнивание слов из разных списков слов в режиме «вилки». Фаззинг останавливается, если списки слов имеют разную длину, поскольку если в самом коротком списке заканчиваются записи, дальнейший фаззинг останавливается. Можно использовать «один» или «несколько» списков слов.

Лучше всего подходит для: сценариев параллельных тестов для связанных пользователей и паролей.

Пример:

    ffuf -u https://example.com/FIRST/SECOND \
         -w "/usr/share/wordlists/users.txt:FIRST" \
         -w "/usr/share/wordlists/passwords.txt:SECOND" \
         -mode pitchfork

В этом примере:

  • users.txt и passwords.txtсоедините первое с первым.

Примеры запросов:

  • /admin/123
  • /user/password
  • /guest/qwerty

Sniper Mode

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

Подходит для: точного тестирования отдельных полей или параметров.

Пример:

    ffuf -u https://example.com/FIRST \
         -w "/usr/share/wordlists/rockyou.txt:FIRST" \
         -mode sniper

Это заменяет FIRSTзаполнитель с каждым словом из rockyou.txtсписок слов последовательно:

  • /admin
  • /user
  • /test

Вывод

  1. Clusterbomb: Лучше всего подходит для исчерпывающего тестирования всех комбинаций в нескольких списках слов. Более полный, но медленный.
  2. Pitchfork: Идеально подходит для параллельного фаззинга соответствующих входных данных (например, имен пользователей и паролей).
  3. Снайпер: идеальное решение для целенаправленного и точного тестирования одного параметра или области.

Использование Ffuf для фаззинга каталогов на веб-серверах — очень эффективный способ обнаружения ресурсов на веб-серверах, которые иначе были бы скрыты. Даже если они не наносят прямого вреда, эти функции помогают специалистам по безопасности лучше выявлять ценные данные во время тестов на проникновение или программ bug bounty, поскольку они понимают, на что нужно обращать внимание в первую очередь, ещё до начала тестирования. Ffuf настолько гибкий и быстрый, что должен быть частью арсенала каждого специалиста по безопасности.

Оригинальная статья | Перевод: THREAD