Как работает мощный инструмент для перебора и фаззинга
В сфере информационной безопасности и тестирования веб-приложений каждая малейшая уязвимость может привести к серьезным последствиям. Надежным помощником в обнаружении скрытых угроз и проведения глубокого анализа безопасности веб-систем может стать утилита 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.
Всем учащимся программы будет предоставлена возможность поработать на живом оборудовании и опробовать полученные знания в лабораториях НИЯУ МИФИ. Для тех, кто не сможет подключиться очно, будет организована трансляция по ВКС, а также удаленный доступ к оборудованию.
ссылка на оригинал статьи https://habr.com/ru/articles/810293/
Добавить комментарий