Ffuf (Fuzz Faster U Fool) — це утиліта командного рядка Linux з відкритим вихідним кодом для веб-енумерації, брутфорсу та фаззингу веб-додатків, написана на мові Go. Допомагає виявляти приховані файли, каталоги, субдомени, перебирати параметри URL та заголовки HTTP. Його особливостями є швидкість, гнучкість та простота. Ffuf – незамінний помічний в пентесті.
Що таке фаззинг?

Фаззинг (fuzzing) – це метод тестування електронних ресурсів, який полягає в автоматичній відправці великої кількості випадкових або спеціально згенерованих (мутаційних) вхідних даних, щоб знайти помилки, баги, витоки даних та вразливості (наприклад, SQL-ін’єкції, IDOR, XSS тощо).
Фаззинг дає можливість:
- Виявляти приховані папки та файли, інформаційні витоки (бекапи, документи), вразливості.
- Застосовувати словники для перебору різних значень, параметрів URL.
- Здійснювати брутфорс кінцевих точок: приховані API-маршрути, адмін-панелі, інтерфейси, компоненти.
- Аналізувати та фільтрувати коди відповідей сервера (200, 301, 404 і т.д.), розміри, редиректи та інше.
Встановлення Ffuf
go install github.com/ffuf/ffuf/v2@latest
Використання Ffuf
Завантаження словників:
wget http://ffuf.me/wordlist/common.txtwget http://ffuf.me/wordlist/parameters.txtwget http://ffuf.me/wordlist/subdomains.txtgit clone https://github.com/danielmiessler/SecListsgit clone https://github.com/krlabs/fuzzlists
Приклади команд:
ffuf -w ~/SecLists/Discovery/Web-Content/big.txt -u 'https://ffuf.io.fi/FUZZ'– стандартний фаззинг файлів та каталогів по словнику;ffuf -w wordlist.txt -u 'https://ffuf.io.fi/FUZZ' -o filename.txt– фаззинг з виводом результатів у файл (підтримуються наступні розширення – json, ejson, html, md, csv, ecsv);ffuf -u https://example.com/FUZZ/ -w dict.txt -o file.html -of html– експорт результатів фаззингу в html-звіт;ffuf -w dictionary.txt -u http://server_url/FUZZ -t 200– фаззинг з великою кількістю потоків (по замовчуванню 40);ffuf -rate 50 -w wordlist.txt -u https://example.com/FUZZ– обмеження швидкості до 50 запитів в секунду;ffuf -ac -w wordlist.txt -u https://example.com/FUZZ– фаззинг з автокалібрацією;ffuf -u https://example.com/FUZZ -w /path/to/wordlist.txt -mr admin– фаззинг з допомогою регулярного виразу, пошук за ключовим словом admin;ffuf -u https://example.com/FUZZ -w /path/to/backup_wordlist.txt -mc 200 -fl 5120 -mr ".bak"– виконати фаззинг з застосуванням фільтрів: код відповіді 200, довжина 5120 байтів, .bak розширення;ffuf -u https://example.com/FUZZ -w /path/to/wordlist.txt -H "Authorization: Bearer TOKEN"– фаззинг з застосування HTTP-заголовка авторизації;ffuf -w ~/wordlists/common.txt -recursion -u http://ffuf.me/cd/recursion/FUZZ– рекурсивний фаззинг на глибині до 3 рівнів (включно з усіма вкладеними директоріями);ffuf -w domains.txt:DOMAIN -w wordlist.txt:WORD -u 'https://DOMAIN/WORD'– фаззинг з декількома словниками одночасно;ffuf -w ~/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -u https://FUZZ.site.com– фаззинг субдоменів;ffuf -w ~/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -H "Host: FUZZ.example.com" -u [hostname]— брутфорс субдоменів по словнику та вказаним HTTP-заголовком;ffuf -w wordlist.txt -X POST -d "username=admin\&password=FUZZ" -u https://example.com/login.php -fc 401– брутфорс сторінки авторизації;ffuf -u example.com/FUZZ -w ~/seclists/Discovery/Web-Content/raft-medium-words-lowercase.txt -e .php,.html,.txt,.log -mc 200— пошук файлів по словнику з вказаними розширеннями та кодом відповіді сервера 200;ffuf -w wordlist.txt -u https://example.com/FUZZ -e .log,.json,.php,.xml,.md,.zip -mc 200— пошук в структурі сайту файлів з заданими розширеннями;ffuf -w ~/wordlists/common.txt -t 5 -p 0.1 -u http://ffuf.test/cd/rate/FUZZ -mc 200,429– фаззинг з таймаутом 0,1 секунди та 5-ма одночасними потоками з фільтрацією коду відповідей сервера;ffuf -u http://example.com/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-files-lowercase.txt -fc 403– фаззинг з ігноруванням сторінок з кодом відповіді 403;ffuf -w wordlist.txt -u https://example.com/blog/FUZZ.php– брутфорс імен для файлів з розширенням php;ffuf -w ~/Seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://ffuf.me/cd/param/data?FUZZ=1– фаззинг параметрів URL;seq 1 1000 | ffuf -w - -u http://ffuf.me/cd/pipes/user?id=FUZZ– тестування IDOR-вразливостей;ffuf -w ~/SecLists/Discovery/Web-Content/web-extensions.txt -u http://server_url/indexFUZZ– фаззинг файлів різних розширень доступних на веб-сервері;ffuf -w ~/SecLists/Discovery/Web-Content/directory-list-2.3-small.txt -u http://fuzzing.site/secret/FUZZ -e .php– пошук прихованих секретів з розширенням php на веб-сервері;ffuf -u https://example.com/FUZZ -w /path/to/wordlist.txt -e .bak,.zip,.tar,.dump– пошук файлів резервних копій;ffuf -b "NAME1=VALUE1; NAME2=VALUE2" -w wordlist.txt -u https://example.com/FUZZ– автентифікований фаззинг із вказаними cookie;ffuf -w wordlist.txt -u https://example.com/FUZZ -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0"– фаззинг з заданим HTTP-заголовком User-Agent;ffuf -w wordlist.txt -u https://example.com/FUZZ -H "Content-Type: application/json" -X POST– фаззинг з заданим HTTP-заголовком для POST-запиту;ffuf -w ~/Seclists/Passwords/Leaked-Databases/hak5.txt -u https://example.com/index.php -X POST -d 'FUZZ=key' -H 'Content-Type: application/x-www-form-urlencoded'– фаззинг параметрів в POST-запиті;ffuf -w ids.txt -u https://example.com/index.php -X POST -d 'id=FUZZ' -H 'Content-Type: application/x-www-form-urlencoded'– фаззинг параметрів в POST-запиті;ffuf -w wordlist.txt -u https://example.com/FUZZ -H "X-Bug-Bounty: <bb-username>"– фаззинг з довільним HTTP-заголовком;ffuf -fs 2003 -w wordlist.txt -u https://example.com/FUZZ– фільтрація результатів за об’ємом відповіді сервера в байтах;ffuf -fl 5 -w wordlist.txt -u https://example.com/FUZZ– фільтрація результатів за кількістю рядків;ffuf -fw 10 -w wordlist.txt -u https://example.com/FUZZ– фільтрація результатів за кількістю слів;ffuf -ic -w wordlist.txt -u https://example.com/FUZZ– ігнорування закоментованих рядків у словнику;ffuf -x http://127.0.0.1:8080 -w wordlist.txt -u https://example.com/FUZZ– використання HTTP-проксі;ffuf -x socks5://127.0.0.1:1080 -w wordlist.txt -u https://example.com/FUZZ– використання SOCKS-проксі;ffuf -replay-proxy http://127.0.0.1:8080 -w wordlist.txt -u https://example.com/FUZZ– виконання повторних запитів з використанням проксі;ffuf -w wordlist.txt -u https://example.com/FUZZ -maxtime 60– фаззинг з лімітом часу (в секундах);ffuf -w wordlist.txt -u https://example.com/FUZZ -maxtime-job 60– фаззинг з лімітом часу на одне завдання;ffuf -request req.txt -request-proto http -mode clusterbomb -w usernames.txt:HFUZZ -w passwords.txt:WFUZZ– брутфорс в режимі сlusterbomb;ffuf -mode clusterbomb -w domains.txt:DOMAIN -w wordlist.txt:WORD -u 'https://DOMAIN/WORD'– фаззинг по двох словниках в режимі clusterbomb;ffuf -u https://example.com/FIRST/SECOND \
-w "/usr/share/wordlists/rockyou.txt:FIRST" \
-w "/usr/share/wordlists/common.txt:SECOND" \
-mode clusterbomb– ще один приклад сканування в режимі clusterbomb (послідовний фаззинг);ffuf -u https://example.com/FIRST/SECOND \
-w "/usr/share/wordlists/users.txt:FIRST" \
-w "/usr/share/wordlists/passwords.txt:SECOND" \
-mode pitchfork– приклад сканування в режимі pitchfork (паралельний фаззинг);ffuf -u https://example.com/FIRST \
-w "/usr/share/wordlists/rockyou.txt:FIRST" \
-mode sniper– сканування в режимі sniper (цільовий фаззинг);ffuf -mode pitchfork -w usernames.txt:USER -w user_ids.txt:UID -u 'https://example.org/u/UID/profile/USER'– фаззинг по довох словниках в режимі pitchfork;ruby -e '(0..255).each{|i| puts i}' | ffuf -u 'http://example.com/?id=FUZZ' -c -w - -fw 33– тестування SQL-ін’єкцій;ffuf -u https://example.com/api –X POST –H "Content-Type: application/json" –d "{"user":"FUZZ"}" –w wordlist.txt– фаззинг JSON даних;ffuf -c --request-proto http -w <(while read h; do echo $(echo $h | xxd -r -p); done < /opt/wordlists/custom/magic_bytes_hex.txt) -request upload.req -fr 'Unsupported file type!'– брутфорс магічних байтів для проведення атаки File Upload, викорисовуючи наявні HTTP-заголовки в файлі upload.req.
Повний список ключів Ffuf:
HTTP OPTIONS:
-H Header `"Name: Value"`, separated by colon. Multiple -H flags are accepted.
-X HTTP method to use
-b Cookie data `"NAME1=VALUE1; NAME2=VALUE2"` for copy as curl functionality.
-cc Client cert for authentication. Client key needs to be defined as well for this to work
-ck Client key for authentication. Client certificate needs to be defined as well for this to work
-d POST data
-http2 Use HTTP2 protocol (default: false)
-ignore-body Do not fetch the response content. (default: false)
-r Follow redirects (default: false)
-raw Do not encode URI (default: false)
-recursion Scan recursively. Only FUZZ keyword is supported, and URL (-u) has to end in it. (default: false)
-recursion-depth Maximum recursion depth. (default: 0)
-recursion-strategy Recursion strategy: "default" for a redirect based, and "greedy" to recurse on all matches (default: default)
-replay-proxy Replay matched requests using this proxy.
-sni Target TLS SNI, does not support FUZZ keyword
-timeout HTTP request timeout in seconds. (default: 10)
-u Target URL
-x Proxy URL (SOCKS5 or HTTP). For example: http://127.0.0.1:8080 or socks5://127.0.0.1:8080
GENERAL OPTIONS:
-V Show version information. (default: false)
-ac Automatically calibrate filtering options (default: false)
-acc Custom auto-calibration string. Can be used multiple times. Implies -ac
-ach Per host autocalibration (default: false)
-ack Autocalibration keyword (default: FUZZ)
-acs Custom auto-calibration strategies. Can be used multiple times. Implies -ac
-c Colorize output. (default: false)
-config Load configuration from a file
-json JSON output, printing newline-delimited JSON records (default: false)
-maxtime Maximum running time in seconds for entire process. (default: 0)
-maxtime-job Maximum running time in seconds per job. (default: 0)
-noninteractive Disable the interactive console functionality (default: false)
-p Seconds of `delay` between requests, or a range of random delay. For example "0.1" or "0.1-2.0"
-rate Rate of requests per second (default: 0)
-s Do not print additional information (silent mode) (default: false)
-sa Stop on all error cases. Implies -sf and -se. (default: false)
-scraperfile Custom scraper file path
-scrapers Active scraper groups (default: all)
-se Stop on spurious errors (default: false)
-search Search for a FFUFHASH payload from ffuf history
-sf Stop when > 95% of responses return 403 Forbidden (default: false)
-t Number of concurrent threads. (default: 40)
-v Verbose output, printing full URL and redirect location (if any) with the results. (default: false)
MATCHER OPTIONS:
-mc Match HTTP status codes, or "all" for everything. (default: 200-299,301,302,307,401,403,405,500)
-ml Match amount of lines in response
-mmode Matcher set operator. Either of: and, or (default: or)
-mr Match regexp
-ms Match HTTP response size
-mt Match how many milliseconds to the first response byte, either greater or less than. EG: >100 or <100
-mw Match amount of words in response
FILTER OPTIONS:
-fc Filter HTTP status codes from response. Comma separated list of codes and ranges
-fl Filter by amount of lines in response. Comma separated list of line counts and ranges
-fmode Filter set operator. Either of: and, or (default: or)
-fr Filter regexp
-fs Filter HTTP response size. Comma separated list of sizes and ranges
-ft Filter by number of milliseconds to the first response byte, either greater or less than. EG: >100 or <100
-fw Filter by amount of words in response. Comma separated list of word counts and ranges
INPUT OPTIONS:
-D DirSearch wordlist compatibility mode. Used in conjunction with -e flag. (default: false)
-e Comma separated list of extensions. Extends FUZZ keyword.
-enc Encoders for keywords, eg. 'FUZZ:urlencode b64encode'
-ic Ignore wordlist comments (default: false)
-input-cmd Command producing the input. --input-num is required when using this input method. Overrides -w.
-input-num Number of inputs to test. Used in conjunction with --input-cmd. (default: 100)
-input-shell Shell to be used for running command
-mode Multi-wordlist operation mode. Available modes: clusterbomb, pitchfork, sniper (default: clusterbomb)
-request File containing the raw http request
-request-proto Protocol to use along with raw request (default: https)
-w Wordlist file path and (optional) keyword separated by colon. eg. '/path/to/wordlist:KEYWORD'
OUTPUT OPTIONS:
-debug-log Write all of the internal logging to the specified file.
-o Write output to file
-od Directory path to store matched results to.
-of Output file format. Available formats: json, ejson, html, md, csv, ecsv (or, 'all' for all formats) (default: json)
-or Don't create the output file if we don't have results (default: false)
EXAMPLE USAGE:
Fuzz file paths from wordlist.txt, match all responses but filter out those with content-size 42.
Colored, verbose output.
ffuf -w wordlist.txt -u https://example.org/FUZZ -mc all -fs 42 -c -v
Fuzz Host-header, match HTTP 200 responses.
ffuf -w hosts.txt -u https://example.org/ -H "Host: FUZZ" -mc 200
Fuzz POST JSON data. Match all responses not containing text "error".
ffuf -w entries.txt -u https://example.org/ -X POST -H "Content-Type: application/json" \
-d '{"name": "FUZZ", "anotherkey": "anothervalue"}' -fr "error"
Fuzz multiple locations. Match only responses reflecting the value of "VAL" keyword. Colored.
ffuf -w params.txt:PARAM -w values.txt:VAL -u https://example.org/?PARAM=VAL -mr "VAL" -c
Автор: © Konrad Ravenstone, KR. Laboratories Research


