Фаззинг каталогов и скрытые ресурсы [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. Этот метод позволяет выявить:
Вы можете выполнить фаззинг вложенных структур 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
Sniper Mode
Что делает: режим «Снайпер» использует один список слов для поиска одного плейсхолдера или параметра за раз. Он последовательно заменяет слова, что делает его идеальным для целенаправленного тестирования одной переменной.
Подходит для: точного тестирования отдельных полей или параметров.
ffuf -u https://example.com/FIRST \ -w "/usr/share/wordlists/rockyou.txt:FIRST" \ -mode sniper
Это заменяет FIRST
заполнитель с каждым словом из rockyou.txt
список слов последовательно:
Вывод
- Clusterbomb: Лучше всего подходит для исчерпывающего тестирования всех комбинаций в нескольких списках слов. Более полный, но медленный.
- Pitchfork: Идеально подходит для параллельного фаззинга соответствующих входных данных (например, имен пользователей и паролей).
- Снайпер: идеальное решение для целенаправленного и точного тестирования одного параметра или области.
Использование Ffuf для фаззинга каталогов на веб-серверах — очень эффективный способ обнаружения ресурсов на веб-серверах, которые иначе были бы скрыты. Даже если они не наносят прямого вреда, эти функции помогают специалистам по безопасности лучше выявлять ценные данные во время тестов на проникновение или программ bug bounty, поскольку они понимают, на что нужно обращать внимание в первую очередь, ещё до начала тестирования. Ffuf настолько гибкий и быстрый, что должен быть частью арсенала каждого специалиста по безопасности.
Оригинальная статья | Перевод: THREAD