Как работает мощный инструмент для перебора и фаззинга
В сфере информационной безопасности и тестирования веб-приложений каждая малейшая уязвимость может привести к серьезным последствиям. Надежным помощником в обнаружении скрытых угроз и проведения глубокого анализа безопасности веб-систем может стать утилита 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.
Всем учащимся программы будет предоставлена возможность поработать на живом оборудовании и опробовать полученные знания в лабораториях НИЯУ МИФИ. Для тех, кто не сможет подключиться очно, будет организована трансляция по ВКС, а также удаленный доступ к оборудованию.
domix32
Окажись сайтец за каким-нибудь cloudflare anti ddos и флаф превращается в тыкву. Сомнительный кейс для фаззинга. Я б понял если бы оно url parts меняло или payload как-то всяко корраптило.