Ffuf керівництво

Швидкий фаззинг веб-додатків з FFUF

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

Що таке фаззинг?

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.txt
  • wget http://ffuf.me/wordlist/parameters.txt
  • wget http://ffuf.me/wordlist/subdomains.txt
  • git clone https://github.com/danielmiessler/SecLists
  • git 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

Konrad Ravenstone// про автора

Кібермольфар, хакер, лінуксоїд, дослідник безпеки в KR. Labs Research

Сподобалася стаття? Поділитися в соцмережах:
KR. Labs Research
Рекомендоване:
XML-RPC (XML Remote Procedure Call) - це протокол, який налагоджує…