The 50 Ultimate Fuzzing Guide for Bug Bounty Hunters: Mastering FUZZING

1 month ago 27
BOOK THIS SPACE FOR AD
ARTICLE AD

Pankaj kr Yadav

Xlrsec here an Ethical Hacker, Security Researcher, Programmer and sometimes a Bug bounty Hunter and now will provide the ways that fuzzing can be done that most of the hunters don’t know but that experienced hunters will recognize . If you are a complete beginner then this post is not for you I recommend skipping this post . However, if you are familiar with the basics of fuzzing, Then all set. This will be a detailed discussion, so let’s get started.”

Fuzzing has always been a powerful tool for bug bounty hunters, helping us unearth hidden vulnerabilities that traditional methods might miss. Whether you’re fuzzing for subdomains, parameters, or even uncommon HTTP methods, FFUF is a tool every serious bug hunter should have in their arsenal.

In this guide, I’ll walk you through the most effective fuzzing techniques and tips using FFUF, explaining how each method can open up new possibilities for your bug bounty journey.

To get the best results, it’s crucial to use tailored wordlists instead of default ones. Recursive fuzzing is another game-changer, helping you discover deep directories that might hold vulnerabilities.

Command: ffuf -u https://testphp.vulnweb.com/FUZZ -recursion -recursion-depth 3

This method helps dive deeper into nested directories, giving you a chance to uncover sensitive data and hidden endpoints that static scans often miss.

While everyone’s busy with GET and POST requests, you should aim for less common HTTP methods like PUT, DELETE, and TRACE. These methods often hold forgotten endpoints or misconfigurations that can lead to juicy vulnerabilities.

Command: ffuf -X PUT

Fuzzing with these methods can expose overlooked functionality that could lead to file uploads, deletions, or even remote code execution.

Simultaneous fuzzing of multiple parameters is one of my favorite tricks. It’s not just about the parameters you see, but also the hidden ones that could trigger unusual behaviors.

Command: ffuf -w params.txt:PARAM

By focusing on multiple parameters, you increase your chances of stumbling upon parameters that developers never meant to expose, leading to potential vulnerabilities like IDORs or logic flaws.

Subdomain enumeration can be a goldmine. Using FFUF’s DNS mode allows for aggressive fuzzing of subdomains that can lead you to lesser-known parts of the target infrastructure.

Command: ffuf -w subdomains.txt -u https://FUZZ.domain.com

Finding hidden subdomains can reveal legacy systems, admin panels, or staging environments that are often forgotten or underprotected.

FFUF works beautifully with Burp Suite, especially when dealing with complex sessions or bypassing WAFs. By combining these two tools, you can handle token-based sessions or get around rate-limiting.

Leveraging Burp’s session handling features can ensure that you’re fuzzing authenticated pages while FFUF does the heavy lifting.

APIs and WebSockets are becoming increasingly common, and they come with their own set of challenges. FFUF allows you to craft custom requests to fuzz these interfaces.

Command: ffuf -X POST -d '{"param":"FUZZ"}'

Targeting APIs can reveal insecure endpoints, broken authentication, and data leakage vulnerabilities. Meanwhile, fuzzing WebSockets could lead to information exposure or session hijacking.

Predefined wordlists are great, but they won’t always fit the unique structure of your target. Tools like CeWL let you scrape target-specific words and generate custom wordlists on the fly.This strategy gives you an edge by using domain-specific terminology to find hidden endpoints or functionality that generic wordlists might overlook.

Fuzzing multiple parameters simultaneously is where FFUF’s multi-wordlist modes come into play. The Clusterbomb and Pitchfork modes let you either fuzz in parallel or sequentially.

Command: ffuf -w list1.txt:W1 -w list2.txt:W2 -mode pitchfork

This method is a great way to combine wordlists for multiple parameters, uncovering injection points or bypasses that would otherwise remain hidden.

The real power of FFUF lies in its filtering capabilities. You can match by status codes, response size, or even regex, making it easier to home in on the responses that matter.

Command: ffuf -mc 200,301,302

This ensures you’re not wasting time on irrelevant results and helps you quickly zero in on vulnerable endpoints or files.

Speed is everything in bug bounties. To optimize fuzzing speed and avoid detection, you can tweak FFUF’s threading and delay options.

Command: ffuf -t 100 -p 0.5-1.5

By balancing speed and stealth, you can evade rate-limiting mechanisms and extend your fuzzing reach.

Don’t forget about HTTP headers. By fuzzing custom headers, you can expose misconfigurations or functionality that wasn’t meant to be public.

Command: ffuf -H "Custom-Header: FUZZ"

Sometimes headers hold the key to server-side logic, and manipulating them could lead to cache poisoning, SSRF, or other server-side vulnerabilities.

To prevent exhaustive fuzzing and maintain control over the scope, you can adjust the recursion depth.

Command: ffuf {target} -recursion -recursion-depth 3

This is especially helpful for large websites with numerous directories and subdirectories.

Dealing with rate limiting? No problem. You can use randomized delays to bypass these defenses and continue fuzzing undetected.

Command: ffuf -p 0.1-2.0

This allows for a stealthier approach, minimizing the risk of getting blocked by automated systems.

Pairing FFUF with other tools like Nuclei for vulnerability scanning or HTTPx to find live hosts enhances your fuzzing workflow.

Command: httpx -l targets.txt | ffuf {fuzzpoint} -w wordlist.txt

This automation chain helps you discover targets faster, letting you focus on what matters most — finding vulnerabilities.

File upload endpoints are notoriously vulnerable, and FFUF can help you fuzz these endpoints with different file types and extensions.

Command: ffuf -w file-extensions.txt -u https://yourdomain.com/upload -F 'file=@FUZZ'

Testing with different file formats can uncover issues like unrestricted file uploads, leading to remote code execution or server compromise.

Some vulnerabilities like SSRF can be detected by analyzing response times. Fuzz with this in mind to detect blind SSRF or logic flaws.

Command: ffuf -w wordlist.txt -u https://target.com/FUZZ -t 200 -rate 1000

Blind SQL injection (SQLi) and time-based attacks often require special attention because their payloads don’t always return visible responses. You can detect these vulnerabilities by measuring response time deviations after injecting specific payloads.

Command: ffuf -w sqli_payloads.txt -u https://target.com/page.php?id=FUZZ -t 200 -mr "time"

Use payloads that trigger time delays in the database, such as SLEEP(5) or BENCHMARK(). A response that takes significantly longer than usual could indicate a SQL injection vulnerability.

As APIs become more widespread, many applications use JSON payloads instead of traditional URL parameters. Fuzzing these APIs requires a different approach, focusing on JSON data in POST requests.

Command: ffuf -w json_fuzzlist.txt -u https://yourdomain.com/api/endpoint -X POST -d '{"param": "FUZZ"}' -H "Content-Type: application/json"

This technique is especially useful when dealing with modern applications that rely on API-driven architectures. It helps reveal hidden parameters or security flaws in the way JSON is parsed and handled.

Many bug bounty targets have Web Application Firewalls (WAFs) that block basic fuzzing attempts. However, FFUF allows you to customize encodings (like URL encoding) to slip past these defenses.

Command: ffuf -w payloadlist.txt -u https://yourdomain.com/FUZZ --urldecode

Using various encodings, such as double URL encoding or base64, can sometimes help bypass WAFs and reach the vulnerable application layer.

Template injection is another high-severity vulnerability, and FFUF can be configured to test for template injections in specific fields.

Command: ffuf -w template_payloadlist.txt -u https://yourdomain.com/page.php?template=FUZZ

This approach can reveal instances where user input is improperly handled, leading to remote code execution or data exfiltration through template engines like Twig or Velocity.

HTTP Parameter Pollution (HPP) occurs when the server misinterprets multiple occurrences of the same parameter. FFUF can be used to fuzz multiple values for the same parameter and find HPP vulnerabilities.

Command: ffuf -w paramlist.txt -u https://yourdomain.com/page.php?param1=FUZZ&param1=FUZZ2

Testing for multiple values in the same parameter field can reveal overlooked security issues, especially when parameters control authentication or authorization logic.

Sometimes, a single vulnerability is not enough to cause a major impact, but when combined with others, you can achieve a significant exploit. For instance, combining SSRF with open AWS metadata endpoints can allow you to escalate the impact of an SSRF vulnerability.

Command: ffuf -w ssrf_payloadlist.txt -u https://yourdomain.com/FUZZ --recursion -recursion-depth 2 -r

Once you find an SSRF, continue fuzzing for internal services or resources that can lead to credential exposure, open admin panels, or file systems.

With the rise of XML-based APIs and services (such as SOAP), it’s crucial to fuzz these endpoints for vulnerabilities like XML External Entity (XXE) attacks.

Command: ffuf -w xxe_payloadlist.txt -u https://yourdomain.com/api/endpoint -X POST -d '<request>FUZZ</request>' -H "Content-Type: application/xml"

Exploiting XML parsers can lead to sensitive file disclosure, remote code execution, or server-side request forgery.

Sometimes, the juiciest endpoints are well-hidden behind obscure directories or files. FFUF excels at discovering these hidden directories by recursively fuzzing common naming patterns and extensions.

Command: ffuf -w directories.txt -u https://yourdomain.com/FUZZ/ -recursion -recursion-depth 5

Using FFUF for deep directory discovery can reveal admin panels, configuration files, or backup files that could contain sensitive information.

Local File Inclusion (LFI) and Remote File Inclusion (RFI) are classic vulnerabilities, and FFUF can help you discover these weaknesses by testing different file paths and payloads.

Command: ffuf -w lfi_payloadlist.txt -u https://yourdomain.com/page.php?file=FUZZ

When fuzzing for LFI or RFI, be sure to try a wide range of paths and payloads. Once you detect an LFI, it can often be escalated to remote code execution (RCE) through techniques like log poisoning or PHP wrappers.

Some vulnerabilities, such as blind SSRF or blind RCE, require out-of-band interaction. By integrating FFUF with Burp Collaborator or other DNS loggers, you can capture these interactions and identify blind vulnerabilities.

Command: ffuf -w ssrf_payloads.txt -u https://yourdomain.com/FUZZ -H "X-Custom-Header: FUZZ" -r

Make sure to monitor Burp Collaborator or your DNS logger for any incoming requests, indicating that the vulnerability was successfully exploited even if the response doesn’t show it.

Many web applications implement rate-limiting or throttling mechanisms to prevent brute force or fuzzing attacks. FFUF provides several options to evade these defenses, such as randomized delays between requests or proxy support.

Command: ffuf -w fuzz.txt -u https://yourdomain.com/FUZZ -t 50 -p 0.1-1.0

Combining random delays and low thread counts can help you bypass rate-limiting, allowing you to continue fuzzing without getting blocked.

With many organizations moving to cloud-based infrastructures like AWS, it’s important to test for misconfigured S3 buckets, Google Cloud storage, and other cloud resources.

Command: ffuf -w s3_buckets.txt -u https://s3.amazonaws.com/FUZZ

Discovering open or misconfigured S3 buckets can lead to sensitive data exposure or unauthorized access to internal resources.

WebSockets, though less common, are becoming a popular way to establish bi-directional communication between the client and server. These endpoints can also be fuzzed for vulnerabilities such as broken authentication or authorization.

Command: ffuf -w ws_payloads.txt -u wss://target.com/socket -X FUZZ

Fuzzing WebSocket traffic can help you identify logic flaws, authentication bypasses, or even potential data leakage vulnerabilities.

For serious bug bounty hunters, automating your fuzzing workflows with tools like cron jobs, Jenkins, or GitHub Actions can save time and help you stay ahead of your competition.

Command: cronjob: ffuf -w wordlist.txt -u https://target.com/FUZZ --json output.json

By running FFUF in an automated pipeline, you can continuously scan for vulnerabilities as the target evolves, ensuring you’re always the first to discover new bugs.

Burp Suite is a favorite tool among bug hunters for in-depth web application analysis. Integrating FFUF with Burp Suite can give you a powerful combination of manual and automated testing. For instance, after identifying specific parameters in Burp, you can quickly switch to FFUF for fuzzing those endpoints and testing potential vulnerabilities.

Capture traffic in Burp, identify a parameter (like id=), and then export it to FFUF for fuzzing:ffuf -w wordlist.txt -u 'https://target.com/page.php?id=FUZZ' -H "Cookie: session=abe35ryer09ertyherterg6ertuyvbsrcd12"

You can also use Burp’s in-built Collaborator and repeater to follow up on any interesting FFUF discoveries, diving deep into the manual analysis once FFUF highlights potential issues.

Interlace is an automation tool that can help you run FFUF in parallel across multiple domains or targets. This is particularly useful when you have a large number of URLs to fuzz, and need to streamline the process.

Automate FFUF to run against multiple targets simultaneously using Interlace:interlace -tL target_list.txt -c "ffuf -w wordlist.txt -u _target_/FUZZ -t 50" -threads 5

This will run FFUF on five targets at a time, making large-scale fuzzing much faster and more efficient.

GraphQL APIs have become popular, but they come with their own set of vulnerabilities, particularly in terms of complex queries, data leakage, and improper input validation. FFUF can be used to fuzz GraphQL endpoints by focusing on the query parameter.

Test GraphQL queries using FFUF:ffuf -w graphql_fuzz.txt -u https://target.com/graphql -X POST -d '{"query": "{ FUZZ }"}' -H "Content-Type: application/json"

Fuzzing GraphQL can expose sensitive fields, bypass authentication, or reveal unintended data leaks. Be sure to test deeply nested fields and complex queries for maximum coverage.

Subdomain discovery is often a precursor to finding valuable assets in bug bounty hunting. FFUF can be used to brute force potential subdomains, especially when combined with large subdomain wordlists.

Discover subdomains with FFUF:ffuf -w subdomains-wlists.txt -u https://FUZZ.target.com/ -H "Host: FUZZ.target.com"

Once you discover new subdomains, you can then recursively scan each one for directories, files, or endpoints that may reveal sensitive information or vulnerabilities.

FFUF can help you identify authentication vulnerabilities by fuzzing login mechanisms with common usernames and passwords. This approach is particularly effective against default credentials or weak password policies.

Brute force login credentials with FFUF:ffuf -w usernames.txt:USER -w passwords.txt:PASS -u https://yourdomain.com/login -X POST -d "username=USER&password=PASS" -H "Content-Type: application/x-www-form-urlencoded"

Be careful not to trigger account lockouts or get blocked by rate limiting. Use -p (delay) to slow down requests if necessary.

Amass is a powerful asset discovery tool that can find subdomains, IPs, and domains related to a target. By combining Amass with FFUF, you can efficiently fuzz discovered assets for hidden directories, files, and vulnerable parameters.

Command: After running Amass, pipe the results into FFUF for further discovery:amass enum -d target.com -o amass_output.txt
cat amass_output.txt | ffuf -w wordlist.txt -u https://FUZZ.target.com/FUZZ/

This combination allows you to scale your attack surface discovery by first finding subdomains with Amass and then running fuzzing attacks on those subdomains using FFUF.

JWT (JSON Web Token) is widely used for authorization in modern web apps. Fuzzing the structure of JWT tokens can expose vulnerabilities in how they are verified, allowing you to bypass security controls or manipulate claims.

Fuzz JWT tokens with FFUF:ffuf -w jwt_fuzz.txt -u https://target.com/protected -H "Authorization: Bearer FUZZ"

Test for issues like weak signing algorithms, token tampering, or vulnerable implementations that allow token reuse or invalid tokens to pass authentication.

Nuclei is a powerful vulnerability scanner that supports templates for various types of attacks. By combining FFUF with Nuclei, you can automate specific vulnerability checks across multiple targets.

Usage: Use FFUF to find potential vulnerable endpoints, then pipe them into Nuclei for deeper vulnerability scanning:ffuf -w wordlist.txt -u https://target.com/FUZZ -o found_urls.txt
nuclei -l found_urls.txt -t nuclei_templates/vulnerabilities/

This workflow allows you to automate the initial discovery of endpoints with FFUF, followed by targeted vulnerability scanning with Nuclei, ensuring that no potential issues are missed.

SSRF vulnerabilities allow attackers to send arbitrary requests from the vulnerable server, often accessing internal systems or sensitive data. FFUF can help you fuzz SSRF parameters, searching for systems that might be exposed through internal URLs.

Usage: Fuzz SSRF vulnerabilities:ffuf -w ssrf_payloads.txt -u https://target.com/page.php?url=FUZZ

Test for local IP ranges (127.0.0.1), cloud metadata endpoints AWS, Google Cloud), and other sensitive internal services that might be reachable from the vulnerable server.

For the truly advanced bug hunters, writing custom plugins for FFUF can extend its capabilities even further. For example, you could write a plugin to handle complex input encodings or to dynamically generate payloads based on the response data.

Develop and use a custom FFUF plugin:import ffuf_apidef custom_payload_generator():
for payload in open('wordlist.txt'):
yield payload.strip()
ffuf_api.start_fuzzing(
url="<https://target.com/FUZZ>",
payload_generator=custom_payload_generator
)

Customizing FFUF allows you to adapt it to specific bug bounty targets and requirements, making it a more versatile and powerful tool in your arsenal.

Sometimes, fuzzing doesn’t just involve discovering resources or parameters. It can also be used to measure response times and detect potential blind vulnerabilities, such as blind SQL injection or timing-based attacks. These attacks can be subtle but dangerous.

Usage: Perform timing-based fuzzing with FFUF for potential blind SQL injections:ffuf -w time_based_sqli.txt -u https://target.com/page?id=FUZZ -mr "response"

In the above example, you might inject payloads like SLEEP(5) or benchmark(10000000, MD5(1)), where delays in response time indicate potential vulnerabilities. Be mindful of normal network latency and baseline response times to avoid false positives.

Advanced bug hunters often find success by chaining smaller, less obvious vulnerabilities together to create a significant impact. FFUF can be instrumental in discovering pieces of this chain. For example, you could start by fuzzing an exposed endpoint that returns API keys, then use those keys to fuzz further internal APIs.

One of my friend discovered a low-impact file download vulnerability on a website and asked me to increase thr impact. By fuzzing the API with FFUF and leveraging an exposed API key found in one response, i was able to pivot and escalate their attack to gain full access to an internal administrative portal. And got him a good bounty.

Fuzz internal APIs with FFUF using an exposed key:ffuf -w api_endpoints.txt -u https://api.target.com/v1/FUZZ -H "Authorization: Bearer <exposed_key>"

This approach requires a sharp eye for minor flaws, but once you’ve chained multiple vulnerabilities together, the results can be much more impactful than a standalone issue.

Privilege escalation vulnerabilities are highly coveted in bug bounty programs because they provide attackers with unauthorized access to higher-privileged accounts. FFUF is a fantastic tool for fuzzing role-based access control (RBAC) and finding endpoints that might be accessible to lower-privileged users but expose sensitive information.

Once i had fuzzed an admin panel using FFUF and discovered that, although it was supposed to be restricted to admin users, an endpoint could still be accessed by a regular user. This was due to a misconfigured access control list (ACL) that failed to properly check permissions for that endpoint.

Fuzz admin endpoints for privilege escalation:ffuf -w admin_endpoints.txt -u https://target.com/admin/FUZZ -b "session=regular_user_cookie"

By testing various endpoints and roles, you may uncover an endpoint that accidentally grants privileged access to non-admin users, leading to a significant bounty.

Server-Side Template Injection (SSTI) is another vulnerability where FFUF excels, especially when the target uses templating engines (like Jinja2, Twig, etc.). SSTI can allow an attacker to execute code on the server by manipulating template syntax. A bug bounty hunter identified an SSTI vulnerability on a web form by fuzzing the input field with template syntax. The server executed the payload and returned system information, leading to remote code execution (RCE).

Fuzz for SSTI vulnerabilities using template payloads:ffuf -w ssti_payloads.txt -u https://target.com/form -X POST -d "input=FUZZ" -H "Content-Type: application/x-www-form-urlencoded"

Look for template syntax (like ${7*7} in Jinja or {{7*7}} in Twig) and payloads that might be processed by the server to execute arbitrary code.

Many applications have file upload functionalities, which are notorious for leading to vulnerabilities like unrestricted file upload, leading to remote code execution, directory traversal, or even file inclusion. FFUF can be used to fuzz file extensions, MIME types, and other parameters associated with the upload.

Fuzz file upload endpoints for vulnerabilities:ffuf -w file_upload_payloads.txt -u https://target.com/upload -X POST -F "file=@FUZZ" -F "other_param=some_value"

Focus on payloads that involve manipulating file extensions (.php, .jsp), attempting to bypass upload restrictions, or testing for directory traversal within the file paths.

Cloud services like AWS, GCP, and Azure often expose metadata endpoints that can be exploited via SSRF vulnerabilities to access sensitive data, such as instance metadata, IAM credentials, and service tokens. FFUF is ideal for fuzzing such SSRF vectors, especially in cloud environments.

Few months ago i saw a disclosed report where a hunter used FFUF to exploit an SSRF vulnerability in a web app, which allowed him to retrieve AWS credentials via the metadata API. The credentials led to further pivoting and full account takeover in AWS.

Fuzz cloud metadata services for SSRF:ffuf -w ssrf_metadata_payloads.txt -u https://target.com/page?url=FUZZ

In this scenario, you might fuzz with URLs like http://169.254.169.254/latest/meta-data/ for AWS or http://metadata.google.internal/computeMetadata/v1/ for Google Cloud.

Many modern applications use multi-step forms or rely on JSON-based APIs. These APIs often contain parameters that are ripe for fuzzing, as they may expose sensitive data or allow for unexpected behaviors when manipulated. FFUF’s ability to fuzz complex JSON requests and parameters makes it a perfect tool for the job.

Fuzz JSON parameters in multi-step forms or APIs:ffuf -w json_fuzz_payloads.txt -u https://target.com/api/v1/order -X POST -d '{"order_id": "FUZZ"}' -H "Content-Type: application/json"

In this case, you can also chain FFUF with tools like Postman to analyze the API more deeply, adding custom headers or manipulating different request types.

Sometimes, endpoints that are supposed to require authentication are accessible without proper checks. These can lead to significant security risks if they expose sensitive user data or privileged operations. In one VDP, I discovered that an API endpoint for downloading invoices, meant only for logged-in users, was accessible without any authentication, simply by fuzzing the API URL structure.

Fuzz for unauthenticated endpoints:ffuf -w api_endpoints.txt -u https://yourtargetdomain.com/api/v1/FUZZ -b "session=expired_cookie"

Testing with expired or no cookies can reveal endpoints that are improperly secured, leading to information disclosure or data leakage.

Mobile applications often use APIs that are not directly accessible from a browser. FFUF can be used to fuzz these mobile-specific APIs for security flaws, such as improper authorization, insecure data storage, or even API keys embedded in responses.

Fuzz mobile APIs after intercepting traffic via a tool like Burp Suite or mitmproxy:fuf -w mobile_api_endpoints.txt -u https://mobile-api.target.com/v1/FUZZ

Capture mobile traffic and start fuzzing the API calls for vulnerabilities, particularly those involving sensitive data.

At this stage, you’ve moved far beyond simple fuzzing. You’re now leveraging FFUF in creative, powerful ways that not only reveal vulnerabilities but lead to major security breakthroughs. Whether it’s SSRF in cloud environments, SSTI in web templates, or unauthenticated APIs in mobile apps, FFUF has the flexibility and power to scale with your needs as a bug bounty hunter.

The most successful hunters combine tools like FFUF with their intuition, creativity, and experience. Always be on the lookout for new ways to apply fuzzing, whether by chaining vulnerabilities or integrating it with other automation tools. The more you push FFUF’s limits, the more vulnerabilities you may discover . So that’s all for now you can follow me on X/Twitter @xlrsec if you want .I was bored so i decided to post something on twitter with an image post containing fuzzing tips but my fuzzing checklist was way too long that wont fit on an image. So just changed it to a writeup.

Read Entire Article