Исследование веб-приложений с помощью утилиты Ffuf
Как работает мощный инструмент для перебора и фаззинга
В сфере информационной безопасности и тестирования веб-приложений каждая малейшая уязвимость может привести к серьезным последствиям. Надежным помощником в обнаружении скрытых угроз и проведения глубокого анализа безопасности веб-систем может стать утилита Ffuf. Разбираемся с фаззингом с Ffuf и исследуем несколько ключевых методов его применения.
Начинаем работать с Ffuf
Ffuf — это мощный инструмент командной строки, предназначенный для перебора содержимого веб-приложений. Он позволяет автоматизировать процесс фаззинга, тем самым обнаруживая скрытые файлы и директории, а также проверяя различные параметры URL и заголовки HTTP.
Установка Ffuf
Скачайте заранее скомпилированный бинарник с страницы релизов, распакуйте и запустите!
Если вы используете macOS с Homebrew, можно установить Ffuf командой: brew install ffuf
Если у вас установлен недавний компилятор Go: go install github.com/ffuf/ffuf/v2@latest (эта же команда используется для обновления)
git clone https://github.com/ffuf/ffuf; cd ffuf; go get; go build
Для работы Ffuf требуется Go 1.16 или новее.
Команды Ffuf
Чтобы посмотреть, как пользоваться инструментом, начнем с выполнения команды ffuf -h. Получим следующий список:
ОПЦИИ HTTP: | |
-H | Заголовок |
-X | HTTP метод для использования |
-b | Данные cookie |
-d | Данные POST |
-http2 | Использовать протокол HTTP2 (по умолчанию: false) |
-ignore-body | Не загружать содержимое ответа (по умолчанию: false) |
-r | Следовать перенаправлениям (по умолчанию: false) |
-recursion | Сканировать рекурсивно. Поддерживается только ключевое слово FUZZ, и URL (-u) должен заканчиваться им (по умолчанию: false) |
-recursion-depth | Максимальная глубина рекурсии (по умолчанию: 0) |
-recursion-strategy | Стратегия рекурсии: «default» для основанной на перенаправлении и «greedy» для рекурсии по всем совпадениям (по умолчанию: default) |
-replay-proxy | Повторно воспроизвести совпавшие запросы, используя этот прокси |
-sni | Целевой TLS SNI, не поддерживает ключевое слово FUZZ |
-timeout | Тайм-аут HTTP запроса в секундах (по умолчанию: 10) |
-u | Целевой URL |
-x | URL прокси (SOCKS5 или HTTP). Например: http://127.0.0.1:8080 или socks5://127.0.0.1:8080 |
ОБЩИЕ ОПЦИИ: | |
-V | Показать информацию о версии (по умолчанию: false) |
-ac | Автоматическая калибровка параметров фильтрации (по умолчанию: false) |
-acc | Пользовательская строка автокалибровки. Может использоваться несколько раз. Подразумевает -ac |
-ach | Автокалибровка на хосте (по умолчанию: false) |
-ack | Ключевое слово автокалибровки (по умолчанию: FUZZ) |
-acs | Стратегия автокалибровки: «basic» или «advanced» (по умолчанию: basic) |
-c | Цветной вывод. (по умолчанию: false) |
-config | Загрузить конфигурацию из файла |
-json | Вывод в формате JSON, вывод записей JSON с новой строки (по умолчанию: false) |
-maxtime | Максимальное время работы в секундах для всего процесса (по умолчанию: 0) |
-maxtime-job | Максимальное время работы в секундах для каждой задачи (по умолчанию: 0) |
-noninteractive | Отключить функциональность интерактивной консоли (по умолчанию: false) |
-p | Секунды «задержки» между запросами или диапазон случайной задержки. Например »0.1» или »0.1–2.0» |
-rate | Скорость запросов в секунду (по умолчанию: 0) |
-s | Не выводить дополнительную информацию (режим молчания) (по умолчанию: false) |
-sa | Остановиться при всех случаях ошибок. Подразумевает -sf и -se (по умолчанию: false) |
-se | Остановиться при случайных ошибках (по умолчанию: false) |
-sf | Остановиться, когда > 95% ответов возвращают 403 Forbidden (по умолчанию: false) |
-t | Количество одновременных потоков (по умолчанию: 40) |
-v | Подробный вывод, печать полного URL и местоположения перенаправления (если есть) с результатами (по умолчанию: false) |
ОПЦИИ СОВПАДЕНИЯ: | |
-mc | Совпадение HTTP статус кодов или «все» для всего (по умолчанию: 200,204,301,302,307,401,403,405,500) |
-ml | Совпадение количества строк в ответе |
-mmode | Оператор набора Совпадение. Либо: and, or (по умолчанию: or) |
-mr | Совпадение регулярных выражений |
-ms | Совпадение размера HTTP ответа |
-mt | Совпадение сколько миллисекунд до первого байта ответа, либо больше или меньше. Например: >100 или <100 |
-mw | Совпадение количества слов в ответе |
ОПЦИИ ФИЛЬТРАЦИИ: | |
-fc | Фильтрация HTTP статус кодов из ответа. Список кодов и диапазон |
-fl | Фильтрация по количеству строк в ответе. Список количеств строк и диапазонов |
-fmode | Оператор набора фильтрации. Либо: and, or (по умолчанию: or) |
-fr | Фильтрация по регулярным выражениям |
-fs | Фильтрация по размеру HTTP ответа. Список размеров и диапазонов |
-ft | Фильтрация по времени до первого байта ответа в миллисекундах. Список значений и диапазонов |
-fw | Фильтрация по количеству слов в ответе. Список количеств слов и диапазонов |
ОПЦИИ ВЫВОДА: | |
-debug-log | Записывать всю внутреннюю информацию в указанный файл |
-o | Записать вывод в файл |
-od | Путь к каталогу для сохранения найденных результатов |
-of | Формат файла вывода. Доступные форматы: json, ejson, html, md, csv, ecsv (или 'all' для всех форматов) (по умолчанию: json) |
-or | Не создавать файл вывода, если у нас нет результатов (по умолчанию: false) |
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ: | |
Фаззинг путей файлов из словаря wordlist.txt, сопоставление со всеми ответами, но фильтрация тех, у которых размер содержимого равен 42. Цветной, подробный вывод. | ffuf -w wordlist.txt -u https://example.org/FUZZ -mc all -fs 42 -c -v |
Фаззинг заголовка Host, совпадения с HTTP ответами 200. | ffuf -w hosts.txt -u https://example.org/ -H «Host: FUZZ» -mc 200 |
Фаззинг данных POST JSON. Совпадение со всеми ответами, не содержащими текст «error». | ffuf -w entries.txt -u https://example.org/ -X POST -H «Content-Type: application/json»\ -d '{«name»: «FUZZ», «anotherkey»: «anothervalue»}' -fr «error» |
Фаззинг в нескольких местах. Совпадение только ответов, отражающих значение ключевого слова «VAL». Цветной вывод. | ffuf -w params.txt: PARAM -w values.txt: VAL -u https://example.org/? PARAM=VAL -mr «VAL» -c |
Более подробная информация и примеры: https://github.com/ffuf/ffuf |
Для чего можно использовать Ffuf
Фаззинг каталогов
Один из первых шагов в тестировании веб-приложений — поиск скрытых директорий и файлов. Ffuf предоставляет удобный способ фаззинга каталогов. Он автоматизирует процесс перебора URL адресов и обнаружения скрытых ресурсов.
Исходя из предоставленного help, мы может сгенерировать команду для перебора каталог с флагами -w (словарь для перебора) и -u (URL тестируемого веб-приложения).
Полностью команда будет выглядеть следующим образом:
ffuf -w path/to/dictionary.txt -u http://server_url/FUZZ
В нашем тестовом примере мы видим, что Ffuf протестировал почти 90 тысяч URL-адресов за пять секунд. Скорость может варьироваться в зависимости от скорости вашего интернета.
Также есть возможность увеличить или уменьшить скорость, изменив количество потоков с помощью флага -t. По умолчанию эта опция равна 40 потокам. Однако увеличение количества потоков может быть опасно, поскольку веб-приложение может не выдержать такой нагрузки и получится DOS-атака.
Пример с изменением количества потоков:
ffuf -w path/to/dictionary.txt -u http://server_url/FUZZ -t 200
Фаззинг файлов и расширений
Кроме того, Ffuf можно использовать, чтобы обнаружить скрытые файлы на веб-серверах. Это позволяет исследователям безопасности находить потенциально уязвимые точки в веб-приложениях.
Ранее мы обнаружили директорию secret, которая возвращает ответ 403. При переходе на эту страницу видим следующее.
У нас недостаточно прав для того, чтобы просматривать содержимое директории.
Снова воспользуемся веб-фаззингом, чтобы увидеть, содержит ли каталог какие-либо скрытые страницы. Но сначала нужно выяснить, какие типы страниц использует веб-сайт. Например, .html, .aspx, .php. Один из распространенных способов определить это — найти тип сервера по заголовкам HTTP-ответа и угадать расширение. Например, если сервер, который мы тестируем, — apache, то он может быть .php, или если он был IIS, то это может быть .asp или .aspx, и так далее. Однако этот метод не очень практичен.
Отличный способ узнать, какие типы страниц использует веб-сервер, — фаззинг его главной страницы index.FUZZ. Пэйлоад выглядит следующим образом:
ffuf -w path/to/dictionary.txt -u http://server_url/indexFUZZ.
Для данного тестирования, на мой взгляд, лучше всего подойдет один из словарей SecLists, а именно SecLists/Discovery/Web-Content/web-extensions.txt.
Сервер дал ответ 200 на файл index.php. Перейдем по адресу http://fuzzing.site/index.php, чтобы убедиться в корректности работы фаззера.
Зная, что сервер использует php-файлы, мы можем приступить к фаззингу интересующей нас директории secret с соответствующим расширением .php. Расширение мы можем задать с помощью флага -e, но уже с другим словарем:
ffuf -w Desktop/Fuzzing/SecLists/Discovery/Web-Content/directory-list-2.3-small.txt -u http://fuzzing.site/secret/FUZZ -e .php
В данной директории есть файл secret.php. Проверим его наличие через браузер по адресу http://fuzzing.site/secret/secret.php
Бинго, мы достучались до скрытой страницы, на которую не вели никакие ссылки и никак иначе, чем посредством перебора директорий и файлов, мы бы ее не выявили.
Фаззинг поддоменов скрытых виртуальных хостов
С помощью Ffuf можно проводить фаззинг, чтобы выявить поддомены или скрытые виртуальные хосты. Это особенно важно при тестировании сетей и обнаружении возможных точек входа для злоумышленников.
Если мы обратимся к нашей тестовой лаборатории, то фазинг поддоменов будет выглядеть следующим образом. Для него также можно обратиться к одному из словарей SecLists/Discovery/DNS/subdomains-top1million-5000.txt.
В ходе фаззинга выявили поддомен mx. Полная ссылка выглядит так: http://mx.fuzzing.site. Можем перейти по данному адресу, чтобы убедиться в том, что такой поддомен действительно существует.
Отлично, мы нашли точку входа в почту организации.
Что еще может Ffuf
Утилита позволяет также проводить фаззинг для параметров PHP, что обеспечивает проверку безопасности веб-приложений, написанных на этом языке программирования.
Наконец, Ffuf может использоваться для фаззинга значений параметров. Эта функция позволяет проверять обработку различных входных данных в веб-приложениях и выявлять потенциальные уязвимости.
С использованием Ffuf и этих методов фаззинга вы сможете провести полный анализ безопасности ваших веб-приложений и обнаружить потенциальные уязвимости, прежде чем злоумышленники смогут их использовать.
Материал подготовлен в рамках старта приёма заявок на онлайн-магистратуру »Информационная безопасность» от МИФИ и Skillfactory.
Всем учащимся программы будет предоставлена возможность поработать на живом оборудовании и опробовать полученные знания в лабораториях НИЯУ МИФИ. Для тех, кто не сможет подключиться очно, будет организована трансляция по ВКС, а также удаленный доступ к оборудованию.