Феноменально быстрый веб-фаззер, написанный на Go. Имя расшифровывается как "Fuzz Faster U Fool". Заменяет wfuzz, gobuster и dirbuster для большинства задач. Возможности: • Фаззинг URL-путей, параметров, заголовков, тела POST-запроса • Множественные точки фаззинга (FUZZ, W1, W2) • Фильтрация по статусу, размеру, словам, строкам • Поддержка рекурсии, rate limiting, прокси ffuf -w wordlist.txt -u https://target.com/FUZZ -mc 200,301,403
# Go install go install github.com/ffuf/ffuf/v2@latest # Apt (Kali) apt install ffuf # Из исходников git clone https://github.com/ffuf/ffuf cd ffuf && go build && mv ffuf /usr/local/bin/ # Бинарник с releases # https://github.com/ffuf/ffuf/releases
)
Быстрый веб-фаззер, написанный на Go.
или
- Если вы на 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 по адресу https://github.com/ffuf/ffuf/wiki
Для более обширной документации с примерами реального использования и советами обязательно ознакомьтесь с отличным руководством: "Все, что вам нужно знать о FFUF" от Michael Skelton (@codingo).
Вы также можете потренировать свои сканирования ffuf на живом хосте с различными уроками и вариантами использования, либо локально, используя Docker-контейнер https://github.com/adamtlangley/ffufme, либо против живой развернутой версии на http://ffuf.me, созданной Adam Langley @adamtlangley.
Используя ключевое слово FUZZ в конце URL-адреса (-u):
ffuf -w /path/to/wordlist -u https://target/FUZZ
Предполагая, что размер ответа виртуального хоста по умолчанию составляет 4242 байта, мы можем отфильтровать все ответы такого размера (-fs 4242) при фаззинге заголовка Host:
ffuf -w /path/to/vhost/wordlist -u https://target -H "Host: FUZZ" -fs 4242
Фаззинг имени параметра GET очень похож на обнаружение каталогов и работает путем определения ключевого слова FUZZ как части URL. Это также предполагает размер ответа 4242 байта для неверного имени параметра GET.
ffuf -w /path/to/paramnames.txt -u https://target/script.php?FUZZ=test_value -fs 4242
Если имя параметра известно, значения можно фаззить таким же образом. В этом примере предполагается, что неверное значение параметра возвращает HTTP-код ответа 401.
ffuf -w /path/to/values.txt -u https://target/script.php?valid_name=FUZZ -fc 401
Это очень простая операция, снова с использованием ключевого слова FUZZ. В этом примере фаззится только часть запроса POST. Мы снова отфильтровываем ответы 401.
ffuf -w /path/to/postdata.txt -X POST -d "username=admin\&password=FUZZ" -u https://target/login.php -fc 401
Если вы не хотите, чтобы ffuf выполнялся бесконечно, вы можете использовать -maxtime. Это остановит весь процесс после заданного времени (в секундах).
ffuf -w /path/to/wordlist -u https://target/FUZZ -maxtime 60
При работе с рекурсией вы можете управлять максимальным временем для каждого задания с помощью -maxtime-job. Это остановит текущее задание через заданное время (в секундах) и перейдет к следующему. Новые задания создаются, когда функция рекурсии обнаруживает подкаталог.
ffuf -w /path/to/wordlist -u https://target/FUZZ -maxtime-job 60 -recursion -recursion-depth 2
Также можно комбинировать оба флага, ограничивая максимальное время выполнения как для каждого задания, так и общее время выполнения. Если вы не используете рекурсию, то оба флага ведут себя одинаково.
В этом примере мы фаззим JSON-данные, отправляемые через POST. В качестве мутатора используется Radamsa.
При использовании --input-cmd ffuf будет отображать совпадения по их позиции. Это же значение позиции будет доступно вызываемой программе в качестве переменной окружения $FFUF_NUM. Мы будем использовать это значение позиции в качестве seed для мутатора. Файлы example1.txt и example2.txt содержат корректные JSON- payloads. Мы сопоставляем все ответы, но отфильтровываем код ответа 400 - Bad request:
ffuf --input-cmd 'radamsa --seed $FFUF_NUM example1.txt example2.txt' -H "Content-Type: application/json" -X POST -u https://ffuf.io.fi/FUZZ -mc all -fc 400
Конечно, вызывать мутатор для каждого payload не очень эффективно, поэтому мы также можем предварительно сгенерировать payloads, все еще используя Radamsa в качестве примера:
# Генерация 1000 примеров payload
radamsa -n 1000 -o %n.txt example1.txt example2.txt
# В результате создаются файлы 1.txt ... 1000.txt
# Теперь мы можем просто читать данные payload в цикле из файла для ffuf
ffuf --input-cmd 'cat $FFUF_NUM.txt' -H "Content-Type: application/json" -X POST -u https://ffuf.io.fi/ -mc all -fc 400
При запуске ffuf сначала проверяется наличие файла конфигурации по умолчанию. Путь по умолчанию для файла ffufrc —
$XDG_CONFIG_HOME/ffuf/ffufrc. Вы можете настроить один или несколько параметров в этом файле, и они будут применяться к
последующим задачам ffuf. Пример файла ffufrc можно найти
здесь.
Более подробное описание местоположений файла конфигурации можно найти в вики: https://github.com/ffuf/ffuf/wiki/Configuration
Параметры конфигурации, указанные в командной строке, переопределяют те, которые загружены из файла ffufrc по умолчанию.
Примечание: это не относится к флагам CLI, которые можно указать несколько раз. Одним из таких примеров является флаг -H (заголовок).
В этом случае значения -H, указанные в командной строке, будут добавляться к значениям из файла конфигурации.
Кроме того, если вы хотите использовать набор файлов конфигурации для различных вариантов использования, вы можете сделать это, определив
путь к файлу конфигурации с помощью флага командной строки -config, который принимает путь к файлу конфигурации в качестве
параметра.

Чтобы определить тестовый случай для ffuf, используйте ключевое слово FUZZ в любом месте URL (-u), заголовков (-H) или данных POST (-d).
Fuzz Faster U Fool - v2.1.0
ПАРАМЕТРЫ HTTP:
-H Заголовок `"Имя: Значение"`, разделенный двоеточием. Допускается несколько флагов -H.
-X Используемый HTTP-метод
-b Данные cookie `"NAME1=VALUE1; NAME2=VALUE2"` для функции копирования как curl.
-cc Клиентский сертификат для аутентификации. Ключ клиента также должен быть определен для работы.
-ck Ключ клиента для аутентификации. Сертификат клиента также должен быть определен для работы.
-d Данные POST
-http2 Использовать протокол HTTP2 (по умолчанию: false)
-ignore-body Не получать содержимое ответа. (по умолчанию: false)
-r Следовать за перенаправлениями (по умолчанию: false)
-raw Не кодировать URI (по умолчанию: 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 Пользовательские стратегии автокалибровки. Может использоваться несколько раз. Подразумевает -ac
-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)
-scraperfile Пользовательский путь к файлу скрапера
-scrapers Активные группы скраперов (по умолчанию: все)
-se Остановиться при ложных ошибках (по умолчанию: false)
-search Искать payload с FFUFHASH из истории ffuf
-sf Остановиться, когда > 95% ответов возвращают 403 Forbidden (по умолчанию: false)
-t Количество одновременных потоков. (по умолчанию: 40)
-v Подробный вывод, печать полного URL и местоположения перенаправления (если есть) с результатами. (по умолчанию: false)
ПАРАМЕТРЫ СОПОСТАВЛЕНИЯ:
-mc Сопоставлять HTTP-коды состояния или "all" для всего. (по умолчанию: 200-299,301,302,307,401,403,405,500)
-ml Сопоставлять количество строк в ответе
-mmode Оператор набора сопоставлений. Either of: and, or (по умолчанию: or)
-mr Сопоставлять регулярное выражение
-ms Сопоставлять размер HTTP-ответа
-mt Сопоставлять количество миллисекунд до первого байта ответа, больше или меньше. Например: >100 или <100
-mw Сопоставлять количество слов в ответе
ПАРАМЕТРЫ ФИЛЬТРАЦИИ:
-fc Фильтровать HTTP-коды состояния из ответа. Список кодов и диапазонов через запятую
-fl Фильтровать по количеству строк в ответе. Список количеств строк и диапазонов через запятую
-fmode Оператор набора фильтров. Either of: and, or (по умолчанию: or)
-fr Фильтровать регулярное выражение
-fs Фильтровать размер HTTP-ответа. Список размеров и диапазонов через запятую
-ft Фильтровать по количеству миллисекунд до первого байта ответа, больше или меньше. Например: >100 или <100
-fw Фильтровать по количеству слов в ответе. Список количеств слов и диапазонов через запятую
ПАРАМЕТРЫ ВВОДА:
-D Режим совместимости со списками слов DirSearch. Используется в сочетании с флагом -e. (по умолчанию: false)
-e Список расширений через запятую. Расширяет ключевое слово FUZZ.
-enc Кодировщики для ключевых слов, например 'FUZZ:urlencode b64encode'
-ic Игнорировать комментарии в списке слов (по умолчанию: false)
-input-cmd Команда, генерирующая ввод. --input-num требуется при использовании этого метода ввода. Переопределяет -w.
-input-num Количество входных данных для тестирования. Используется в сочетании с --input-cmd. (по умолчанию: 100)
-input-shell Оболочка для запуска команды
-mode Режим работы со списком слов. Доступные режимы: clusterbomb, pitchfork, sniper (по умолчанию: clusterbomb)
-request Файл, содержащий неформатированный HTTP-запрос
-request-proto Протокол, используемый с неформатированным запросом (по умолчанию: https)
-w Путь к файлу со списком слов и (необязательное) ключевое слово, разделенные двоеточием. например. '/path/to/wordlist:KEYWORD'
ПАРАМЕТРЫ ВЫВОДА:
-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
Фаззинг JSON-данных POST. Сопоставление всех ответов, не содержащих текст "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
Нажав ENTER во время выполнения ffuf, процесс приостанавливается, и пользователь попадает в подобный оболочке интерактивный режим:
вход в интерактивный режим
введите "help" для списка команд или ENTER для возобновления.
> help
доступные команды:
afc [значение] - добавить к фильтру кодов состояния
fc [значение] - (пере)настроить фильтр кодов состояния
afl [значение] - добавить к фильтру количества строк
fl [значение] - (пере)настроить фильтр количества строк
afw [значение] - добавить к фильтру количества слов
fw [значение] - (пере)настроить фильтр количества слов
afs [значение] - добавить к фильтру размера
fs [значение] - (пере)настроить фильтр размера
aft [значение] - добавить к фильтру времени
ft [значение] - (пере)настроить фильтр времени
rate [значение] - настроить частоту запросов в секунду (активна: 0)
queueshow - показать очередь заданий
queuedel [номер] - удалить задание в очереди
queueskip - перейти к следующему заданию в очереди
restart - перезапустить и возобновить текущее задание ffuf
resume - возобновить текущее задание ffuf (или: ENTER)
show - показать результаты для текущего задания
savejson [имя_файла] - сохранить текущие совпадения в файл
help - вы смотрите на него
>
в этом режиме фильтры могут быть пере настроена, управляемой очередью и текущее состояние сохранено на диск.
При (пере)настройке фильтров они применяются постфактум, и все ложные положительные совпадения из памяти, которые были бы отфильтрованы newly добавленными фильтрами, удаляются.
Новое состояние совпадений может быть выведено командой show, которая выведет все совпадения так, как если бы они были найдены ffuf.
Поскольку "негативные" совпадения не хранятся в памяти, к сожалению, смягчение фильтров не может вернуть потерянные совпадения.
Для такого сценария пользователь может использовать команду restart, которая сбрасывает состояние и запускает текущее
задание сначала.

ffuf выпущен под лицензией MIT. См. ЛИЦЕНЗИЮ.
Комментарии (1)
первонах