{"id":120,"date":"2026-03-20T21:35:44","date_gmt":"2026-03-20T21:35:44","guid":{"rendered":"https:\/\/zerotoghost.com\/?p=120"},"modified":"2026-03-20T21:35:44","modified_gmt":"2026-03-20T21:35:44","slug":"cheat-sheet-series-ffuf","status":"publish","type":"post","link":"https:\/\/zerotoghost.com\/?p=120","title":{"rendered":"Cheat Sheet Series: Ffuf"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Fuzzing with Ffuf<\/h3>\n\n\n\n<p>Github: <a href=\"https:\/\/github.com\/ffuf\/ffuf\">https:\/\/github.com\/ffuf\/ffuf<\/a><\/p>\n\n\n\n<p>In a word full of web-fuzzing tools, everyone has a favorite and mine happens to be Ffuf. It might not be as robust as some competitors, but it just freaking works really well and I like the clean output. Here&#8217;s some of the common commands you might need in a pinch:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"280\" src=\"https:\/\/zerotoghost.com\/wp-content\/uploads\/2026\/03\/ffuf_run_logo_600.png\" alt=\"\" class=\"wp-image-121\" srcset=\"https:\/\/zerotoghost.com\/wp-content\/uploads\/2026\/03\/ffuf_run_logo_600.png 600w, https:\/\/zerotoghost.com\/wp-content\/uploads\/2026\/03\/ffuf_run_logo_600-300x140.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>\n-w Directory\/Wordlist\/Lives\/in.txt -u <a href=\"https:\/\/globalaccelerator-fips.us-west-2.amazonaws.com\/FUZZ\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/URL.YOU.ARE.Fuzzing\/FUZZ<\/a> -rate 2<\/code><\/pre>\n\n\n\n<p>Put &#8216;FUZZ&#8217; where you are fuzzing. Example: https:\/\/FUZZ.domian.com (subdirectories), https:\/\/domian.com\/FUZZ (endpoints), <\/p>\n\n\n\n<p>-rate 2,3etc slow it dowwwwwn<\/p>\n\n\n\n<p>-u <a href=\"http:\/\/FUZZ.ab.com\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/FUZZ.ab.com<\/a> for subdirectory busting<\/p>\n\n\n\n<p>-output : can use -o, -of (format- html, json etc) | tee<\/p>\n\n\n\n<p>-s silent : do not clog up terminal<\/p>\n\n\n\n<p>-fs filter by size : ignore responses size XYZ, ex: -fs 606<\/p>\n\n\n\n<p>-mc match code : only return responses with code specified, ex: -mc 200<\/p>\n\n\n\n<p>-fc filter by code: ignore responses with code, ex: -fc 302 <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fuzzing Headers<\/h3>\n\n\n\n<p>Get Parameters:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ffuf -w \/path\/to\/paramnames.txt -u https:\/\/target\/script.php?FUZZ=test_value -fs 4242<\/code><\/pre>\n\n\n\n<p>POST Data:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ffuf -w \/path\/to\/postdata.txt -X POST -d \"username=admin\\&amp;password=FUZZ\" -u https:\/\/target\/login.php -fc 401<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">More Fuff Tags<\/h3>\n\n\n\n<p>Fuzz Faster U Fool &#8211; v2.1.0<\/p>\n\n\n\n<p>HTTP OPTIONS:<br>-H Header <code>\"Name: Value\"<\/code>, separated by colon. Multiple -H flags are accepted.<br>-X HTTP method to use<br>-b Cookie data <code>\"NAME1=VALUE1; NAME2=VALUE2\"<\/code> for copy as curl functionality.<br>-cc Client cert for authentication. Client key needs to be defined as well for this to work<br>-ck Client key for authentication. Client certificate needs to be defined as well for this to work<br>-d POST data<br>-http2 Use HTTP2 protocol (default: false)<br>-ignore-body Do not fetch the response content. (default: false)<br>-r Follow redirects (default: false)<br>-raw Do not encode URI (default: false)<br>-recursion Scan recursively. Only FUZZ keyword is supported, and URL (-u) has to end in it. (default: false)<br>-recursion-depth Maximum recursion depth. (default: 0)<br>-recursion-strategy Recursion strategy: &#8220;default&#8221; for a redirect based, and &#8220;greedy&#8221; to recurse on all matches (default: default)<br>-replay-proxy Replay matched requests using this proxy.<br>-sni Target TLS SNI, does not support FUZZ keyword<br>-timeout HTTP request timeout in seconds. (default: 10)<br>-u Target URL<br>-x Proxy URL (SOCKS5 or HTTP). For example: http:\/\/127.0.0.1:8080 or socks5:\/\/127.0.0.1:8080<\/p>\n\n\n\n<p>GENERAL OPTIONS:<br>-V Show version information. (default: false)<br>-ac Automatically calibrate filtering options (default: false)<br>-acc Custom auto-calibration string. Can be used multiple times. Implies -ac<br>-ach Per host autocalibration (default: false)<br>-ack Autocalibration keyword (default: FUZZ)<br>-acs Custom auto-calibration strategies. Can be used multiple times. Implies -ac<br>-c Colorize output. (default: false)<br>-config Load configuration from a file<br>-json JSON output, printing newline-delimited JSON records (default: false)<br>-maxtime Maximum running time in seconds for entire process. (default: 0)<br>-maxtime-job Maximum running time in seconds per job. (default: 0)<br>-noninteractive Disable the interactive console functionality (default: false)<br>-p Seconds of <code>delay<\/code> between requests, or a range of random delay. For example &#8220;0.1&#8221; or &#8220;0.1-2.0&#8221;<br>-rate Rate of requests per second (default: 0)<br>-s Do not print additional information (silent mode) (default: false)<br>-sa Stop on all error cases. Implies -sf and -se. (default: false)<br>-scraperfile Custom scraper file path<br>-scrapers Active scraper groups (default: all)<br>-se Stop on spurious errors (default: false)<br>-search Search for a FFUFHASH payload from ffuf history<br>-sf Stop when &gt; 95% of responses return 403 Forbidden (default: false)<br>-t Number of concurrent threads. (default: 40)<br>-v Verbose output, printing full URL and redirect location (if any) with the results. (default: false)<\/p>\n\n\n\n<p>MATCHER OPTIONS:<br>-mc Match HTTP status codes, or &#8220;all&#8221; for everything. (default: 200-299,301,302,307,401,403,405,500)<br>-ml Match amount of lines in response<br>-mmode Matcher set operator. Either of: and, or (default: or)<br>-mr Match regexp<br>-ms Match HTTP response size<br>-mt Match how many milliseconds to the first response byte, either greater or less than. EG: &gt;100 or &lt;100<br>-mw Match amount of words in response<\/p>\n\n\n\n<p>FILTER OPTIONS:<br>-fc Filter HTTP status codes from response. Comma separated list of codes and ranges<br>-fl Filter by amount of lines in response. Comma separated list of line counts and ranges<br>-fmode Filter set operator. Either of: and, or (default: or)<br>-fr Filter regexp<br>-fs Filter HTTP response size. Comma separated list of sizes and ranges<br>-ft Filter by number of milliseconds to the first response byte, either greater or less than. EG: &gt;100 or &lt;100<br>-fw Filter by amount of words in response. Comma separated list of word counts and ranges<\/p>\n\n\n\n<p>INPUT OPTIONS:<br>-D DirSearch wordlist compatibility mode. Used in conjunction with -e flag. (default: false)<br>-e Comma separated list of extensions. Extends FUZZ keyword.<br>-enc Encoders for keywords, eg. &#8216;FUZZ:urlencode b64encode&#8217;<br>-ic Ignore wordlist comments (default: false)<br>-input-cmd Command producing the input. &#8211;input-num is required when using this input method. Overrides -w.<br>-input-num Number of inputs to test. Used in conjunction with &#8211;input-cmd. (default: 100)<br>-input-shell Shell to be used for running command<br>-mode Multi-wordlist operation mode. Available modes: clusterbomb, pitchfork, sniper (default: clusterbomb)<br>-request File containing the raw http request<br>-request-proto Protocol to use along with raw request (default: https)<br>-w Wordlist file path and (optional) keyword separated by colon. eg. &#8216;\/path\/to\/wordlist:KEYWORD&#8217;<\/p>\n\n\n\n<p>OUTPUT OPTIONS:<br>-debug-log Write all of the internal logging to the specified file.<br>-o Write output to file<br>-od Directory path to store matched results to.<br>-of Output file format. Available formats: json, ejson, html, md, csv, ecsv (or, &#8216;all&#8217; for all formats) (default: json)<br>-or Don&#8217;t create the output file if we don&#8217;t have results (default: false)<\/p>\n\n\n\n<p>EXAMPLE USAGE:<br>Fuzz file paths from wordlist.txt, match all responses but filter out those with content-size 42.<br>Colored, verbose output.<br>ffuf -w wordlist.txt -u https:\/\/example.org\/FUZZ -mc all -fs 42 -c -v<\/p>\n\n\n\n<p>Fuzz Host-header, match HTTP 200 responses.<br>ffuf -w hosts.txt -u https:\/\/example.org\/ -H &#8220;Host: FUZZ&#8221; -mc 200<\/p>\n\n\n\n<p>Fuzz POST JSON data. Match all responses not containing text &#8220;error&#8221;.<br>ffuf -w entries.txt -u https:\/\/example.org\/ -X POST -H &#8220;Content-Type: application\/json&#8221; \\<br>-d &#8216;{&#8220;name&#8221;: &#8220;FUZZ&#8221;, &#8220;anotherkey&#8221;: &#8220;anothervalue&#8221;}&#8217; -fr &#8220;error&#8221;<\/p>\n\n\n\n<p>Fuzz multiple locations. Match only responses reflecting the value of &#8220;VAL&#8221; keyword. Colored.<br>ffuf -w params.txt:PARAM -w values.txt:VAL -u https:\/\/example.org\/?PARAM=VAL -mr &#8220;VAL&#8221; -c<\/p>\n\n\n\n<p>More information and examples: https:\/\/github.com\/ffuf\/ffuf<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fuzzing with Ffuf Github: https:\/\/github.com\/ffuf\/ffuf In a word full of web-fuzzing tools, everyone has a favorite and mine happens to be Ffuf. It might not be as robust as some competitors, but it just freaking works really well and I like the clean output. Here&#8217;s some of the common commands&#8230;<\/p>\n","protected":false},"author":1,"featured_media":121,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[6,7],"class_list":["post-120","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cheat-sheets","tag-ffuf","tag-fuzzing"],"_links":{"self":[{"href":"https:\/\/zerotoghost.com\/index.php?rest_route=\/wp\/v2\/posts\/120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zerotoghost.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zerotoghost.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zerotoghost.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zerotoghost.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=120"}],"version-history":[{"count":2,"href":"https:\/\/zerotoghost.com\/index.php?rest_route=\/wp\/v2\/posts\/120\/revisions"}],"predecessor-version":[{"id":123,"href":"https:\/\/zerotoghost.com\/index.php?rest_route=\/wp\/v2\/posts\/120\/revisions\/123"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zerotoghost.com\/index.php?rest_route=\/wp\/v2\/media\/121"}],"wp:attachment":[{"href":"https:\/\/zerotoghost.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zerotoghost.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zerotoghost.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}