Convert Figma logo to code with AI

xmendez logowfuzz

Web application fuzzer

5,916
1,376
5,916
104

Top Related Projects

57,590

SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, URLs, sensitive data patterns, fuzzing payloads, web shells, and many more.

12,459

Fast web fuzzer written in Go

Directory/File, DNS and VHost busting tool written in Go

11,999

Web path scanner

hydra

8,470

Nikto web server scanner

Quick Overview

Wfuzz is a web application security fuzzer tool and library for Python. It's designed to facilitate the process of discovering and analyzing web application vulnerabilities by automating the process of sending HTTP requests with various payloads and analyzing the responses.

Pros

  • Highly customizable and flexible, allowing for complex fuzzing scenarios
  • Supports multiple concurrent connections for faster scanning
  • Extensive payload options, including built-in wordlists and custom payload generators
  • Can be used as both a command-line tool and a Python library

Cons

  • Steep learning curve for advanced features
  • Documentation can be sparse for some complex use cases
  • May generate a large number of requests, potentially impacting target server performance
  • Limited built-in reporting capabilities compared to some commercial alternatives

Code Examples

  1. Basic GET request fuzzing:
from wfuzz import fuzz

for r in fuzz('http://example.com/FUZZ', hc=[404], payloads=[("wordlist", dict(fn="wordlist.txt"))]):
    print(f"URL: {r.url}, Status: {r.code}")

This example fuzzes a GET request, replacing FUZZ with words from a wordlist file, hiding 404 responses.

  1. POST request fuzzing:
from wfuzz import fuzz

for r in fuzz('http://example.com/login', method='POST', hc=[404], payloads=[("username", dict(fn="users.txt")), ("password", dict(fn="passwords.txt"))]):
    if "Login successful" in r.text:
        print(f"Found valid credentials: {r.payload}")

This example fuzzes a POST request, trying different username and password combinations.

  1. Custom payload generator:
from wfuzz import fuzz
from wfuzz.externals.itertools.product import product

def payload_generator():
    prefixes = ['admin', 'user', 'guest']
    suffixes = ['123', '2023', '!']
    return [''.join(p) for p in product(prefixes, suffixes)]

for r in fuzz('http://example.com/FUZZ', payloads=[("generator", dict(function=payload_generator))]):
    print(f"Tried: {r.payload}, Status: {r.code}")

This example uses a custom payload generator to create username combinations.

Getting Started

To get started with Wfuzz:

  1. Install Wfuzz:

    pip install wfuzz
    
  2. Basic usage:

    from wfuzz import fuzz
    
    # Fuzz a URL parameter
    for r in fuzz('http://example.com/?param=FUZZ', payloads=[("wordlist", dict(fn="common.txt"))]):
        if r.code != 404:  # Filter out 404 responses
            print(f"Found: {r.url}")
    

This example demonstrates a simple fuzzing scenario targeting a URL parameter. Adjust the URL, payloads, and filtering as needed for your specific use case.

Competitor Comparisons

57,590

SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, URLs, sensitive data patterns, fuzzing payloads, web shells, and many more.

Pros of SecLists

  • Comprehensive collection of multiple types of lists for security testing
  • Regularly updated with community contributions
  • Well-organized directory structure for easy navigation

Cons of SecLists

  • Passive resource, requires integration with other tools for active use
  • Large repository size may be overwhelming for beginners
  • Some lists may contain outdated or irrelevant entries

Code Comparison

While SecLists is primarily a collection of wordlists and doesn't contain executable code, Wfuzz is a web application fuzzer with a Python codebase. Here's a basic example of how Wfuzz might be used:

import wfuzz

for r in wfuzz.fuzz(url="http://example.com/FUZZ", hc=[404], payloads=[("file", dict(fn="wordlist.txt"))]):
    print(r)

SecLists would typically be used as input for tools like Wfuzz:

wfuzz -c -z file,SecLists/Discovery/Web-Content/common.txt --hc 404 http://example.com/FUZZ

In this context, SecLists provides the wordlists (e.g., common.txt) that Wfuzz uses for fuzzing web applications.

12,459

Fast web fuzzer written in Go

Pros of ffuf

  • Written in Go, offering better performance and concurrency
  • Simpler command-line interface and easier to use for beginners
  • Actively maintained with frequent updates and bug fixes

Cons of ffuf

  • Less extensive feature set compared to Wfuzz
  • Limited support for complex authentication mechanisms
  • Fewer output format options

Code Comparison

ffuf:

func main() {
    flag.Parse()
    if err := ffuf.New().Run(); err != nil {
        fmt.Printf("Error: %s\n", err)
        os.Exit(1)
    }
}

Wfuzz:

def main(argv):
    try:
        wfuzz(argv)
    except FuzzException as e:
        print(str(e))
        sys.exit(1)
    except KeyboardInterrupt:
        print("\nFinishing pending requests...")
        raise

Both tools are web fuzzing utilities, but ffuf is written in Go while Wfuzz is in Python. ffuf's main function is more concise, reflecting its simpler design. Wfuzz's main function includes additional error handling and a keyboard interrupt catch, indicating a more comprehensive approach to user interaction and error management.

Directory/File, DNS and VHost busting tool written in Go

Pros of Gobuster

  • Written in Go, offering better performance and concurrency
  • Simpler to use with straightforward command-line options
  • Actively maintained with regular updates and bug fixes

Cons of Gobuster

  • Limited functionality compared to Wfuzz's versatile fuzzing capabilities
  • Lacks advanced features like custom payloads and complex filtering options
  • Primarily focused on directory and DNS enumeration, while Wfuzz is more flexible

Code Comparison

Gobuster (main.go):

func main() {
    globalopts, pluginopts, err := parseOptions()
    if err != nil {
        fmt.Fprintf(os.Stderr, "%s\n", err)
        os.Exit(1)
    }
    plugin, err := gobusterdir.NewGobusterDir(globalopts, pluginopts)
    if err != nil {
        fmt.Fprintf(os.Stderr, "%s\n", err)
        os.Exit(1)
    }
    if err := plugin.Run(); err != nil {
        fmt.Fprintf(os.Stderr, "%s\n", err)
        os.Exit(1)
    }
}

Wfuzz (wfuzz.py):

def main(argv):
    from .api import wfuzz
    from .ui.console.clparser import CLParser
    from .ui.console.cli import execute_cli
    argument_parser = CLParser()
    options = argument_parser.parse_cl(argv)
    execute_cli(options)

Both tools offer command-line interfaces for web fuzzing and enumeration tasks. Gobuster's code structure reflects its Go implementation, while Wfuzz utilizes Python for greater flexibility in fuzzing operations.

11,999

Web path scanner

Pros of dirsearch

  • Faster scanning speed due to optimized algorithms and multithreading
  • More user-friendly command-line interface with intuitive options
  • Built-in support for various output formats (plain text, JSON, CSV)

Cons of dirsearch

  • Less flexible in terms of customization compared to Wfuzz
  • Limited support for complex fuzzing scenarios beyond directory and file enumeration
  • Smaller community and fewer third-party integrations

Code Comparison

dirsearch:

def recursive_scan(self, base_path, recursive_level):
    if recursive_level > self.recursion_depth:
        return

    for path in self.dictionary.generate():
        full_path = urljoin(base_path, path)
        self.perform_request(full_path)

Wfuzz:

def fuzz(self, **kwargs):
    for payload in self.payloads:
        if self.stats.pending_fuzz() <= 0:
            break
        self.send(payload, **kwargs)

Both tools use similar approaches for scanning, but dirsearch focuses on directory enumeration while Wfuzz offers more general-purpose fuzzing capabilities. dirsearch's code is more specialized for web directory scanning, while Wfuzz's code is more flexible and can be adapted to various fuzzing scenarios.

hydra

Pros of THC-Hydra

  • Supports a wider range of protocols and services for brute-force attacks
  • Generally faster execution speed for large-scale password cracking
  • More actively maintained with frequent updates and bug fixes

Cons of THC-Hydra

  • Less flexible for general web fuzzing tasks
  • Steeper learning curve for beginners
  • Limited built-in wordlists compared to Wfuzz

Code Comparison

THC-Hydra (command-line usage):

hydra -l user -P passlist.txt ftp://192.168.0.1

Wfuzz (Python script):

import wfuzz

for r in wfuzz.fuzz(url="http://example.com/FUZZ", hc=[404], payloads=[("file", dict(fn="wordlist.txt"))]):
    print(r)

THC-Hydra focuses on efficient password cracking across multiple protocols, while Wfuzz offers more versatility in web application fuzzing and testing. THC-Hydra is better suited for targeted brute-force attacks, whereas Wfuzz excels in discovering hidden directories, parameters, and other web vulnerabilities. The choice between the two depends on the specific security testing requirements and the target environment.

8,470

Nikto web server scanner

Pros of Nikto

  • Comprehensive web server scanner with a large database of known vulnerabilities
  • Easy to use with minimal setup required
  • Generates detailed reports in various formats (HTML, XML, CSV)

Cons of Nikto

  • Slower scanning speed compared to Wfuzz
  • Less flexibility in customizing requests and payloads
  • Limited support for modern web technologies and APIs

Code Comparison

Nikto (Perl):

sub nikto_headers {
    my ($mark) = @_;
    my %headers;
    $headers{'User-Agent'} = $VARIABLES{'useragent'};
    $headers{'Host'} = $mark->{'hostname'};
    return %headers;
}

Wfuzz (Python):

def get_headers(req):
    return dict(req.headers) if req and req.headers else {}

def set_headers(req, headers):
    req.headers = CaseInsensitiveDict(headers)
    return req

Both tools handle HTTP headers, but Wfuzz offers more flexibility in manipulating requests due to its modular Python structure. Nikto's Perl implementation is more straightforward but less customizable.

Wfuzz is better suited for fuzzing and custom payload injection, while Nikto excels at identifying known vulnerabilities in web servers. Choose Wfuzz for more targeted and flexible testing, and Nikto for comprehensive vulnerability scanning of web servers.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Build Status

Wfuzz - The Web Fuzzer

Wfuzz has been created to facilitate the task in web applications assessments and it is based on a simple concept: it replaces any reference to the FUZZ keyword by the value of a given payload.

A payload in Wfuzz is a source of data.

This simple concept allows any input to be injected in any field of an HTTP request, allowing to perform complex web security attacks in different web application components such as: parameters, authentication, forms, directories/files, headers, etc.

Wfuzz is more than a web content scanner:

  • Wfuzz could help you to secure your web applications by finding and exploiting web application vulnerabilities. Wfuzz’s web application vulnerability scanner is supported by plugins.

  • Wfuzz is a completely modular framework and makes it easy for even the newest of Python developers to contribute. Building plugins is simple and takes little more than a few minutes.

  • Wfuzz exposes a simple language interface to the previous HTTP requests/responses performed using Wfuzz or other tools, such as Burp. This allows you to perform manual and semi-automatic tests with full context and understanding of your actions, without relying on a web application scanner underlying implementation.

It was created to facilitate the task in web applications assessments, it's a tool by pentesters for pentesters ;)

Installation

To install WFuzz, simply use pip:

pip install wfuzz

To run Wfuzz from a docker image, run:

$ docker run -v $(pwd)/wordlist:/wordlist/ -it ghcr.io/xmendez/wfuzz wfuzz

Documentation

Documentation is available at http://wfuzz.readthedocs.io

Download

Check github releases. Latest is available at https://github.com/xmendez/wfuzz/releases/latest