Skip to content
WAFtester
CLI Reference

Command Reference

Every command, flag, and environment variable documented with types, defaults, and examples. For real-world workflows, see Examples or the Cheat Sheet.

WAFtester Command Reference

The definitive reference for every WAFtester CLI command, flag, environment variable, and output option. Each command section includes its aliases, a description of what it does and when to use it, a complete flag table with types and defaults, and practical examples.

For usage examples and real-world workflows, see the Examples Guide. For installation, see the Installation Guide. For a quick task-oriented reference, see the Cheat Sheet.

Document Version: 2.9.6 Last Updated: February 2026

Reading order: This is the flag reference. For real-world examples, see EXAMPLES.md. For a quick copy-paste reference, see the Cheat Sheet. For a beginner guide, see waftester.com/docs.


Table of Contents


Quick Start

New to WAFtester? Start here.

# Install
npm install -g @waftester/cli

# Full automated audit (recommended for first use)
waftester auto -u https://target.com

# Quick scan for specific vulnerabilities
waftester scan -u https://target.com -types sqli,xss --smart

See the Installation Guide for all installation methods (Go, Homebrew, npm, Scoop, AUR, Docker, binary).


Which Command Should I Use?

GoalCommandDescription
Full automated auditautoRuns discovery, scanning, bypass, assessment, and reporting in one pass
Test specific vulnerabilitiesscanTargeted scanning with control over attack types and output
Find WAF bypassesbypassDiscovers payloads that evade WAF rules
Benchmark WAF effectivenessassessF1 scores, detection rates, and false positive analysis
Discover endpoints first, then scandiscoverlearnrunThree-step workflow: map target, generate test plan, execute
Fuzz directories or parametersfuzzffuf-compatible directory and parameter fuzzing
Identify the WAF vendorvendorDetects WAF product from 197+ signatures
Scan an API specscan --specOpenAPI, Swagger, Postman, HAR, AsyncAPI, gRPC, GraphQL
Run in CI/CDcicdGenerates pipeline configs for GitHub Actions, GitLab CI, Azure DevOps
Connect to AI agentsmcpMCP server for Claude, Copilot, Cursor, n8n

How Commands Relate

Commands are not isolated — they feed into each other. This diagram shows the most common data flows:

                       +-----------+
                       |  vendor   |  Identify WAF
                       +-----+-----+
                             |  informs tamper selection
                             v
+----------+  endpoints  +-------+  test plan  +------+
| discover |------------>| learn |------------>| run  |
+----------+             +-------+             +------+
      |                                           |
      | feeds                                     | results
      v                                           v
+----------+                                +---------+
|  crawl   |                                | report  |
+----------+                                +---------+

+----------+  does all of the above in one pass
|   auto   |--> vendor -> discover -> scan -> assess -> report
+----------+

+----------+  bypass payloads   +----------+
|  bypass  |<------------------>| tampers  |
+----------+  tamper transforms +----------+
      |
      | variants
      v
+----------+
|  mutate  |  Expand payload space
+----------+

Shortcut: If you don’t know where to start, use auto. It runs the entire pipeline.


Usage

waftester <command> [flags]

When no command is specified, run is used as the default. Commands accept flags with a single dash (-flag) or double dash (--flag); both forms are equivalent. Boolean flags can be negated with --flag=false. Multi-value flags (e.g., -header) can be repeated.

Global Options

These options are available regardless of which command is invoked.

FlagDescription
-v, --version, versionPrint version and exit
-h, --help, helpPrint usage summary
docs, doc, man, manualPrint detailed built-in documentation

Environment Variables

Environment variables override flag defaults. They are useful for CI/CD or Docker environments where flags would be repetitive. All variables use the WAF_TESTER_ prefix (except the legacy WAFTESTER_INTEGRATION).

VariableDescription
WAF_TESTER_PAYLOAD_DIROverride default payload directory (./payloads). Used by the CLI, npm shim, and MCP server.
WAF_TESTER_TEMPLATE_DIROverride default Nuclei template directory (./templates/nuclei). Used by scan, template, and MCP commands.
WAF_TESTER_HTTP_ADDRDefault HTTP listen address for the MCP server when --http is not specified.
WAF_TESTER_BINARY_PATHOverride the resolved binary path. Primarily used by the npm shim for development or custom installations.
WAFTESTER_INTEGRATIONSet to any non-empty value to enable integration tests that make real HTTP requests. Test suite only.

Glossary

Key terms used throughout this reference:

TermMeaning
Auto-calibrateAutomatically determines baseline response characteristics (size, word count, status code) and excludes noise from results. Use -ac to enable.
BypassA payload that reaches the application without being blocked by the WAF. This is what you are testing for.
Chain modeApplies multiple mutation transforms sequentially to a single payload, exponentially expanding the payload space.
EvasionA technique that transforms a payload to avoid WAF pattern matching while preserving its attack semantics.
F1 scoreHarmonic mean of precision and recall. Ranges from 0 to 1. Higher is better. An F1 of 0.95 means the WAF catches most attacks with few false positives.
False positive (FP)A legitimate request that the WAF incorrectly blocks. High FP rates break real users.
FilterExcludes responses matching criteria from results. The inverse of a matcher.
FUZZ keywordA placeholder in URLs, headers, or body. WAFtester substitutes each wordlist entry at this position.
MatcherSelects responses that meet criteria (status code, size, regex). Only matched responses appear in output.
MCCMatthews Correlation Coefficient. A balanced metric that accounts for true/false positives/negatives. Ranges from -1 to +1. Above 0.8 is strong.
MutationA transformation applied to a payload: encoding (base64, URL, hex), case changes, comment injection, null bytes, etc.
Paranoia levelControls how aggressive the test corpus is, corresponding to ModSecurity CRS paranoia levels (1-4). Higher = more edge cases, more traffic.
Realistic modeSends browser-like headers (Accept, Accept-Language, Referer, realistic User-Agent) to mimic organic traffic and avoid bot detection.
Smart modeWAF-aware adaptive scanning that detects blocking patterns and adjusts payloads, timing, and evasion techniques automatically.
TamperA named transformation technique (e.g., space2comment, between, urlenc) that modifies payloads to evade WAF rules. Written as .tengo scripts.
TPRTrue Positive Rate (recall). The percentage of attack payloads correctly blocked by the WAF.

Commands

auto

Aliases: superpower, sp

The most powerful command in WAFtester. Runs a multi-phase autonomous assessment that chains together endpoint discovery, leaky path detection, parameter mining, WAF vendor fingerprinting, smart tamper selection, 2,800+ payload testing with adaptive rate limiting, false-positive assessment, and browser-based validation into a single invocation. An AI “brain” coordinates phases, learns from responses, and adjusts strategy in real time.

Results are written to a workspace directory containing JSON, Markdown, and HTML reports. Use --resume to continue an interrupted scan from the last checkpoint.

When to use: You want a single command that does everything. Ideal for first-time assessments, CI/CD pipelines, and hands-off security audits.

When NOT to use: On production systems without --smart-mode=stealth and a conservative rate limit. The default mode sends 2,800+ payloads at 200 req/s, which can trigger WAF bans, alert SOC teams, or degrade application performance. Use scan with a narrow -types filter when you only need to test specific categories.

Target

Specify one or more URLs to scan. At least one target is required.

FlagShortTypeDefaultDescription
-target-ustring[]Target URL(s)
-lstringFile containing target URLs
-stdinboolfalseRead targets from stdin

Core

Controls concurrency, rate limiting, timeouts, and the workspace output. These settings directly affect scan speed and stealth.

FlagTypeDefaultDescription
-servicestringService type hint for payload selection (e.g., wordpress, api, spa)
-payloadsstring./payloadsPayload directory
-cint50Concurrent workers
-rlint200Rate limit (requests/second)
-timeoutint10Request timeout in seconds
-skip-verifyboolfalseSkip TLS certificate verification
-depthint3Crawl depth for endpoint discovery
-output-dirstringWorkspace output directory
-vboolfalseVerbose output
-no-cleanboolfalsePreserve workspace directory after scan
-dry-runboolfalsePreview scan plan without executing
-yesboolfalseSkip interactive confirmations
-scan-configstringScan configuration file

Smart Mode

Smart mode adapts scanning behavior based on detected WAF responses. It analyzes blocking patterns and adjusts payloads, timing, and evasion techniques to maximize coverage while minimizing detection.

FlagTypeDefaultDescription
-smartboolfalseEnable WAF-aware adaptive scanning
-smart-modestringstandardSmart mode profile: stealth (slow, minimal footprint), standard (balanced), aggressive (fast, noisy), bypass (focus on finding bypasses)
-smart-verboseboolfalseShow smart mode decision details

Tamper Engine

Tamper techniques transform payloads to evade WAF pattern matching. Techniques include encoding variants, comment injection, case manipulation, whitespace substitution, and protocol-level tricks. Use --tamper-auto to let WAFtester pick the best tampers for the detected WAF.

FlagTypeDefaultDescription
-tamperstringComma-separated tamper techniques (e.g., space2comment,between)
-tamper-autoboolfalseAuto-select tampers based on detected WAF vendor
-tamper-profilestringstandardTamper profile: stealth (minimal transforms), standard (common bypasses), aggressive (heavy encoding), bypass (all techniques)
-tamper-dirstringDirectory of custom .tengo script tampers to load before the scan

Phases

The auto command runs multiple phases sequentially. These flags control which phases execute. Disable phases you don’t need to speed up the scan.

FlagTypeDefaultDescription
-assessbooltrueRun assessment phase (F1, MCC, FPR metrics)
-assess-corpusstringbuiltin,leipzigFalse positive corpus for assessment
-leaky-pathsbooltrueCheck for exposed sensitive paths
-leaky-categoriesstringLeaky path categories to check
-discover-paramsbooltrueDiscover hidden parameters
-param-wordliststringCustom parameter discovery wordlist
-full-reconboolfalseFull reconnaissance pass
-browserbooltrueRun browser-based validation phase
-browser-headlessboolfalseRun browser in headless mode
-browser-timeoutdurationBrowser action timeout
-no-detectboolfalseSkip WAF vendor detection

Brain

The brain is an AI coordination layer that observes scan results in real time, identifies patterns (e.g., which payloads get blocked vs. pass), and adjusts the scan strategy. It recommends focus areas, suggests tamper switches, and detects anomalous WAF behavior.

FlagTypeDefaultDescription
-brainbooltrueEnable AI-powered scan intelligence
-brain-verboseboolfalseShow brain reasoning output (recommendations, learning events)

Resume

The auto command writes checkpoints after each phase. If a scan is interrupted (Ctrl+C, timeout, crash), use --resume to pick up from the last completed phase without re-running earlier work.

FlagTypeDefaultDescription
-resumeboolfalseResume scan from last checkpoint
-checkpointstringExplicit checkpoint file path (default: auto-detected from workspace)

Scan Control

Fine-grained control over what gets tested and how aggressively.

FlagTypeDefaultDescription
-intensitystringnormalScan intensity level
-groupstringTest group filter
-skip-groupstringSkip specific test groups
-adaptive-ratebooltrueEnable adaptive rate limiting
-ja3-rotateboolfalseRotate JA3 TLS fingerprints
-ja3-profilestringSpecific JA3 profile
-report-formatsstringjson,md,htmlOutput report formats

API Spec

Drive the scan from an API specification file. WAFtester parses endpoints, parameters, schemas, and authentication requirements from the spec and generates targeted test payloads. Supports OpenAPI 3.x, Swagger 2.0, Postman Collections, HAR files, AsyncAPI, GraphQL schemas, and gRPC reflection.

FlagTypeDefaultDescription
-specstringAPI spec file path (OpenAPI, Swagger, Postman, HAR, AsyncAPI, GraphQL, gRPC)
-spec-urlstringAPI spec URL (fetched at runtime)

Plus the full set of output flags and enterprise integration flags.

Examples

# Full autonomous assessment
waftester auto -u https://target.com

# With smart tamper selection
waftester auto -u https://target.com --smart --tamper-auto

# Custom tampers + increased rate
waftester auto -u https://target.com --tamper-dir=./my-tampers -rl 500

# Resume interrupted scan
waftester auto -u https://target.com --resume

# API spec-driven assessment
waftester auto -u https://api.example.com --spec openapi.yaml

scan

Targeted vulnerability scanning across 50+ attack categories including SQL injection, XSS, SSTI, SSRF, LFI, RFI, command injection, LDAP injection, NoSQL injection, prototype pollution, CRLF injection, XXE, and more. Each category uses curated payloads with WAF-specific evasion variants.

Unlike auto, the scan command gives you direct control over which attack types to run, how results are filtered, and how output is formatted. It does not run discovery or assessment phases.

When to use: You know what you want to test and need precise control. Ideal for targeted scans, regression testing, and integration into custom scripts.

When NOT to use: Against targets you do not own or have written authorization to test. Even with -types limiting the scope, every payload is a real attack attempt that will appear in server and WAF logs.

Target

Specify one or more URLs to scan. Targets can also be read from a file or piped via stdin.

FlagShortTypeDefaultDescription
-target-ustring[]Target URL(s)
-lstringTarget list file
-stdinboolfalseRead targets from stdin

Core

Configure what gets scanned, how fast, and where results go.

FlagShortTypeDefaultDescription
-typesstringallAttack types to run (comma-separated, e.g., sqli,xss,ssti,cmdi)
-concurrencyint5Concurrent requests
-timeoutint10Request timeout in seconds
-skip-verifyboolfalseSkip TLS verification
-verboseboolfalseVerbose output
-outputstringOutput file
-jsonboolfalseJSON output format
-payloadsstring./payloadsPayload directory
-template-dirstring./templates/nucleiTemplate directory

Smart Mode

FlagTypeDefaultDescription
-smartboolfalseSmart WAF-adaptive mode
-smart-modestringstandardSmart profile
-smart-verboseboolfalseSmart mode details

Tamper Engine

FlagTypeDefaultDescription
-tamperstringTamper techniques
-tamper-autoboolfalseAuto-select tampers
-tamper-profilestringstandardTamper profile
-tamper-dirstringCustom .tengo tamper directory

Rate Limiting

Controls request throughput to avoid triggering rate-based WAF bans or overwhelming the target. Use -delay and -jitter for randomized spacing that mimics organic traffic.

FlagShortTypeDefaultDescription
-rate-limit-rlint50Requests per second
-rate-limit-per-host-rlphboolfalseApply rate limit per host
-delayduration0Delay between requests
-jitterduration0Random jitter added to delay

Request

Customize HTTP request properties. Use -proxy to route through Burp Suite or ZAP for inspection. Headers and cookies are applied to every request.

FlagShortTypeDefaultDescription
-proxy-xstringProxy URL (HTTP/HTTPS/SOCKS4/SOCKS5)
-user-agent-uastringCustom User-Agent header
-random-agent-raboolfalseRandomize User-Agent
-header-Hstring[]Custom headers (repeatable)
-cookie-bstringCookie string
-retries-rint2Retry count on failure
-max-errors-meint10Max errors before stopping
-follow-redirects-frbooltrueFollow HTTP redirects
-max-redirectsint10Maximum redirect chain length
-respect-robots-rrboolfalseRespect robots.txt directives
-max-depth-mxdint5Maximum crawl depth

OAuth

OAuth 2.0 authentication for scanning protected endpoints. WAFtester handles the token exchange automatically.

FlagTypeDefaultDescription
-oauth-client-idstringOAuth client ID
-oauth-auth-endpointstringOAuth authorization endpoint
-oauth-token-endpointstringOAuth token endpoint
-oauth-redirect-uristringOAuth redirect URI

Filtering

Narrow scan scope or results. Match flags select only results meeting criteria. Filter flags exclude results meeting criteria. Combine both for precise targeting.

FlagShortTypeDescription
-match-severity-msevstringMatch by severity level (critical, high, medium, low, info)
-filter-severity-fsevstringFilter out severity level
-match-category-mcatstringMatch by attack category
-filter-category-fcatstringFilter out category
-stop-on-first-sofboolStop after first finding
-exclude-types-etstringExclude attack types
-exclude-patterns-epstringExclude URL patterns
-include-patterns-ipstringInclude only matching URLs

Output Format

Control how results are displayed. For file exports (SARIF, JUnit, etc.), see output flags.

FlagShortTypeDefaultDescription
-formatstringconsoleOutput format (console, json, jsonl, csv, md, html)
-sarifboolfalseSARIF output
-mdboolfalseMarkdown output
-htmlboolfalseHTML output
-csvboolfalseCSV output
-silent-sboolfalseSuppress all output except results
-no-color-ncboolfalseDisable colored output
-timestamp-tsboolfalseAdd timestamps to output
-streamboolfalseStream results in real-time

Report

Metadata for generated reports. These values appear in report headers and footers.

FlagTypeDefaultDescription
-report-titlestringCustom report title
-report-authorstringReport author name
-include-evidencebooltrueInclude evidence in reports
-include-remediationbooltrueInclude remediation guidance

Scan Control

Limit scan scope, resume interrupted scans, or preview the test plan without executing.

FlagShortTypeDefaultDescription
-max-payloads-mpint0Maximum payloads per type (0 = unlimited)
-max-paramsint0Maximum parameters to test (0 = unlimited)
-resumeboolfalseResume from checkpoint
-checkpoint-cpstringCheckpoint file
-dry-run-drboolfalsePreview without executing
-no-detectboolfalseSkip WAF detection

Debug

Diagnostic flags for troubleshooting scan behavior. CPU and memory profiling write pprof files for go tool pprof analysis.

FlagShortTypeDefaultDescription
-debugboolfalseDebug mode
-debug-request-dreqboolfalsePrint raw requests
-debug-response-drespboolfalsePrint raw responses
-profileboolfalseCPU profiling
-mem-profileboolfalseMemory profiling

API Spec

FlagTypeDescription
-specstringAPI spec file
-spec-urlstringAPI spec URL

Plus output flags and enterprise integration flags.

Examples

# Scan for SQL injection and XSS
waftester scan -u https://target.com -types sqli,xss

# Full scan with smart mode
waftester scan -u https://target.com --smart --tamper-auto

# Custom tampers from a directory
waftester scan -u https://target.com --tamper-dir=./my-tampers

# With proxy and custom headers
waftester scan -u https://target.com -x http://127.0.0.1:8080 -H "Authorization: Bearer token"

# Multiple targets from file
waftester scan -l targets.txt -types all --json -o results.json

Related: auto (hands-off automated scanning), bypass (find WAF bypasses), assess (WAF effectiveness benchmarking). For API spec scanning, use the --spec flag or see the API Spec Scanning Guide.


run

The low-level test runner and the default command when no subcommand is provided. Executes test plans generated by learn or runs ad-hoc scans with full control over mutation engines, matchers, and filters.

The run command is heavily inspired by ffuf and nuclei workflows. It supports response matching (by status code, size, word count, line count, regex), response filtering, auto-calibration, mutations (encoding, chaining, evasion), and proxy replay for seamless integration with Burp Suite or ZAP.

When to use: You have a test plan from discover/learn, want mutation control, or need matcher/filter logic similar to ffuf.

Target

FlagShortTypeDefaultDescription
-target-ustring[]Target URL(s)
-lstringTarget list file
-planstringTest plan file (JSON)
-stdinboolfalseRead targets from stdin

Core

FlagShortTypeDefaultDescription
-concurrency-cintvariesConcurrent workers
-rate-limit-rlintvariesRate limit (req/s)
-retriesint1Retry count
-payloads-pstring./payloadsPayload directory
-categorystringAttack category filter
-severitystringSeverity filter
-dry-runboolfalsePreview without executing

Mutation

The mutation engine transforms payloads through encoders (base64, URL, HTML entity, hex, etc.), injection locations (query, body, header, path, fragment), and evasion techniques (case randomization, comment insertion, null bytes). Chain mode applies multiple transforms sequentially, exponentially expanding the payload space.

FlagShortTypeDefaultDescription
-mutation-mstringnoneMutation mode (none, quick, full, exhaustive)
-encodersstringEncoders to apply
-locationsstringInjection locations
-evasionsstringEvasion techniques
-chainboolfalseChain mutations
-max-chainint2Maximum chain depth

Matchers

Matchers select responses that meet criteria. Only matched responses appear in output. Use -auto-calibrate to automatically determine baseline response characteristics and filter noise.

FlagShortTypeDescription
-match-code-mcstringMatch HTTP status codes (e.g., 200,403, 200-299)
-match-size-msstringMatch response size
-match-words-mwstringMatch word count
-match-lines-mlstringMatch line count
-match-regex-mrstringMatch by regex pattern
-auto-calibrate-acboolAuto-calibrate matchers

Filters

Filters exclude responses that match criteria. The inverse of matchers. Combine matchers and filters for precise result selection.

FlagShortTypeDescription
-filter-code-fcstringFilter out status codes (e.g., 404,500)
-filter-size-fsstringFilter by response size
-filter-words-fwstringFilter by word count
-filter-lines-flstringFilter by line count
-filter-regex-frstringFilter by regex

Output

FlagShortTypeDefaultDescription
-output-ostringOutput file
-formatstringconsoleOutput format
-jsonl-jboolfalseJSONL output
-verbose-vboolfalseVerbose output
-silent-sboolfalseSilent mode
-no-color-ncboolfalseNo colored output
-statsboolfalseShow live stats
-stats-intervalint5Stats refresh interval (seconds)
-timestamp-tsboolfalseTimestamps
-noninteractive-niboolfalseNon-interactive mode
-store-response-srboolfalseStore raw responses to disk
-store-response-dir-srdstringresponsesResponse storage directory

Network

FlagShortTypeDefaultDescription
-proxy-xstringProxy URL
-replay-proxy-rpstringReplay proxy for findings
-snistringOverride TLS SNI hostname
-burpboolfalseUse Burp Suite proxy shortcut
-zapboolfalseUse OWASP ZAP proxy shortcut
-skip-verify-kboolfalseSkip TLS verification
-realistic-RboolfalseRealistic mode (browser-like behavior)
-detectbooltrueWAF detection

Examples

# Execute a test plan
waftester run --plan testplan.json -u https://target.com

# Quick scan with mutation
waftester run -u https://target.com -m quick --chain

# Match specific status codes
waftester run -u https://target.com -mc 200,403 -fc 404

# Store responses for analysis
waftester run -u https://target.com -sr -srd ./responses

Related: discoverlearnrun (three-step workflow). For simpler scanning, use scan instead.


bypass

Dedicated WAF bypass finder. Sends the full payload library against a target and identifies which payloads bypass the WAF (i.e., reach the application without being blocked). Results are ranked by confidence and categorized by attack type.

With --smart mode, the engine adapts in real time: it detects blocking patterns, switches tamper techniques, and focuses on the most promising bypass vectors.

When to use: You know a WAF is present and want to find what gets through. Pair with tampers --discover for maximum coverage.

When NOT to use: Without explicit authorization. Bypass payloads reach the application behind the WAF. If a payload succeeds, it has executed against the real application, not a sandbox.

Related: mutate (payload mutation engine), tampers (tamper technique management), vendor (identify the WAF first)

FlagShortTypeDefaultDescription
-target, -ustringTarget URL
-payloadsstring./payloadsPayload directory
-categorystringinjectionAttack category
-cint10Concurrent requests
-ostringbypasses.jsonOutput file
-kboolfalseSkip TLS verification
-streamboolfalseStream results
-realistic-RboolfalseRealistic mode
-acboolfalseAuto-calibrate
-smartboolfalseSmart WAF-adaptive mode
-smart-modestringbypassSmart profile
-smart-verboseboolfalseSmart mode details
-no-detectboolfalseSkip WAF detection

Plus enterprise integration flags.

Examples

# Find bypass payloads for injection attacks
waftester bypass -u https://target.com

# Smart bypass with auto-calibration
waftester bypass -u https://target.com --smart -ac

# Category-specific bypass
waftester bypass -u https://target.com --category xss

mutate

Payload mutation engine. Takes a set of payloads and generates variants by applying encoders (base64, URL, HTML entity, double-URL, hex, unicode), evasion techniques (case randomization, whitespace tricks, comment injection, null byte insertion), and injection location permutations (query string, POST body, headers, URL path, fragment).

Chain mode applies multiple transforms sequentially, producing an exponential payload space useful for deep WAF rule-set testing.

When to use: You want to expand a payload set to test WAF rule coverage, or need to generate evasion variants of known bypasses.

FlagShortTypeDefaultDescription
-target, -ustringTarget URL
-payloadsstring./payloadsPayload directory
-categorystringAttack category
-payload-filestringCustom payload file
-payloadstringSingle raw payload string
-modestringquickMutation mode
-encodersstringEncoders to apply
-locationsstringInjection locations
-evasionsstringEvasion techniques
-chainboolfalseChain mutations
-cint10Concurrency
-timeoutint10Timeout (seconds)
-kboolfalseSkip TLS
-realistic-RboolfalseRealistic mode
-acboolfalseAuto-calibrate
-smartboolfalseSmart mode
-smart-modestringSmart profile
-smart-verboseboolfalseSmart verbose
-ostringOutput file
-vboolfalseVerbose
-statsboolfalseShow stats
-dry-runboolfalsePreview mutations
-streamboolfalseStream results
-no-detectboolfalseSkip WAF detection

Plus enterprise integration flags.

Examples

# Quick mutation scan
waftester mutate -u https://target.com --mode quick

# Full mutation with chaining
waftester mutate -u https://target.com --mode full --chain

# Mutate a single payload
waftester mutate --payload "<script>alert(1)</script>" --encoders base64,url

fuzz

High-performance directory, file, and parameter fuzzer. Place the FUZZ keyword in the URL (or request body, headers) to mark the injection point. WAFtester substitutes each wordlist entry, sends the request, and applies matchers/filters to identify interesting responses.

Supports recursive directory discovery, file extension brute-forcing, multiple fuzzing modes (sniper, pitchfork, cluster bomb), and response extraction via regex or presets.

When to use: Directory discovery, parameter brute-forcing, virtual host enumeration, or any scenario where you need to iterate a wordlist against a URL pattern.

When NOT to use: With large wordlists against rate-limited or shared-hosting targets without throttling (-rate). A 100k-entry wordlist at full speed can trigger IP bans and affect other tenants on the same server.

Target

The FUZZ keyword marks where wordlist entries are substituted. Place it anywhere in the URL, path, query string, headers, or POST body.

FlagShortTypeDefaultDescription
-target-ustring[]Target URL(s) (use FUZZ as injection placeholder)
-lstringTarget list file
-stdinboolfalseRead stdin

Wordlist

Wordlist source and transformation options. Apply prefixes, suffixes, case changes, or shuffling before fuzzing.

FlagShortTypeDefaultDescription
-wstringWordlist file
-wtstringdirectoriesWordlist type
-wmaxint0Max entries (0 = unlimited)
-wskipint0Skip first N entries
-wshuffleboolfalseShuffle wordlist
-wlowerboolfalseLowercase all entries
-wupperboolfalseUppercase all entries
-wprefixstringPrefix each entry
-wsuffixstringSuffix each entry

Request

HTTP request configuration for fuzzing. Set methods, headers, cookies, extensions, rate limits, and threading.

FlagShortTypeDefaultDescription
-XstringGETHTTP method
-dstringPOST data
-HstringCustom header
-bstringCookie
-estringFile extensions (comma-separated)
-tint40Thread count
-rateint100Rate limit (req/s)
-timeoutint10Request timeout
-rboolfalseFollow redirects
-kboolfalseSkip TLS
-retriesint0Retries
-delayduration0Delay between requests
-jitterduration0Random jitter

Matchers

Select responses that match criteria. Only matched responses appear in results. Use auto-calibrate (-ac) to automatically determine baseline characteristics and exclude noise.

FlagShortTypeDefaultDescription
-mcstring200,204,301,302,307,401,403,405Match status codes
-msstringMatch response size
-mwstringMatch word count
-mlstringMatch line count
-mrstringMatch regex
-acboolfalseAuto-calibrate matchers
-calibration-words-cwstringCalibration words

Filters

Exclude responses matching criteria. The inverse of matchers.

FlagShortTypeDescription
-fcstringFilter status codes
-fsstringFilter response size
-fwstringFilter word count
-flstringFilter line count
-frstringFilter regex

Output

Control result display format and verbosity.

FlagShortTypeDefaultDescription
-ostringOutput file
-jsonboolfalseJSON output
-csvboolfalseCSV output
-html-outputboolfalseHTML output
-mdboolfalseMarkdown
-streamboolfalseStream results
-sboolfalseSilent mode
-ncboolfalseNo color
-verbose-vboolfalseVerbose
-timestamp-tsboolfalseTimestamps

Advanced

Recursive fuzzing, response storage, extraction, proxy, and debug options.

FlagShortTypeDefaultDescription
-recursionboolfalseEnable recursive fuzzing
-recursion-depth-rdint2Maximum recursion depth
-modestringsniperFuzzing mode
-fuzz-position-fpstringFuzz position marker
-extract-erstringExtract regex from responses
-extract-preset-eprstringExtraction preset
-store-response-srboolfalseStore responses
-store-response-dir-srdstring./responsesStorage directory
-store-only-matches-somboolfalseStore only matching responses
-proxy-xstringProxy URL
-debugboolfalseDebug mode
-debug-request-dreqboolfalseDebug requests
-debug-response-drespboolfalseDebug responses
-no-detectboolfalseSkip WAF detection

Plus enterprise integration flags.

Examples

# Directory fuzzing
waftester fuzz -u https://target.com/FUZZ -w wordlist.txt

# Parameter fuzzing with extensions
waftester fuzz -u https://target.com/FUZZ -w words.txt -e php,asp,html

# Recursive directory discovery
waftester fuzz -u https://target.com/FUZZ -w dirs.txt --recursion -rd 3

# Filter 404s and match by size
waftester fuzz -u https://target.com/FUZZ -w words.txt -fc 404 -ms 1234

probe

Multi-protocol HTTP probing and fingerprinting engine. For each target, probe performs TLS certificate analysis, JARM fingerprinting, technology detection (frameworks, CMS, languages), WAF identification, favicon hashing, CDN detection, HTTP/2 and WebSocket support checks, and DNS resolution.

Designed for processing large target lists efficiently. Pipe the output of subdomain enumeration tools directly into probe to quickly fingerprint an entire attack surface.

When to use: Asset inventory, technology mapping, WAF detection at scale, or pre-scan reconnaissance.

Related: vendor (dedicated WAF detection), discover (endpoint discovery)

Target

FlagShortTypeDefaultDescription
-target-ustring[]Target URL(s)
-list-lstringTarget list file
-stdinboolfalseRead stdin
-output-file-ostringOutput file

Probe Modules

Enable or disable individual probe modules. All are enabled by default. Disable modules you don’t need to speed up large scans.

FlagTypeDefaultDescription
-tlsbooltrueTLS certificate analysis
-headersbooltrueHTTP header analysis
-httpbooltrueHTTP probe
-wafbooltrueWAF detection
-faviconbooltrueFavicon hash
-jarmbooltrueJARM TLS fingerprint
-techbooltrueTechnology detection
-dnsbooltrueDNS resolution

Display Fields

Select which fields appear in output. By default, only the URL and status are shown. Enable additional fields to see server headers, technologies, IP addresses, CDN info, and more.

FlagShortTypeDescription
-clboolContent length
-ctboolContent type
-wcboolWord count
-lcboolLine count
-serverboolServer header
-methodboolHTTP method
-locationboolRedirect location
-titleboolPage title
-ipboolIP address
-asnboolASN information
-cdnboolCDN detection
-tech-detect-tdboolTechnologies
-cnameboolCNAME records
-http2boolHTTP/2 support
-pipelineboolPipeline support
-schemeboolURL scheme
-websocket-wsboolWebSocket support
-cpeboolCPE identifiers
-wordpress-wpboolWordPress detection
-favicon-hashboolFavicon hash value
-header-hashboolHeader hash
-show-versionboolDetected software version
-statsboolStatistics

Output Format

FlagShortTypeDefaultDescription
-json-jboolfalseJSON output
-jsonlboolfalseJSONL output
-csvboolfalseCSV output
-silentboolfalseSilent mode
-1boolfalseOne-liner output
-verbose-vboolfalseVerbose
-no-color-ncboolfalseNo color

Request

FlagShortTypeDefaultDescription
-xstringGETHTTP method
-bodystringRequest body
-HstringCustom headers
-random-agentboolfalseRandom User-Agent
-probeboolfalseProbe mode
-timeoutint10Timeout
-cint0Concurrency (0 = auto)
-threads-tint10Thread count

Network

FlagShortTypeDefaultDescription
-skip-verify-kboolfalseSkip TLS
-retriesint0Retries
-delayduration0Delay
-rate-limit-rlint0Rate limit
-rate-limit-per-host-rlphboolfalsePer-host rate limit
-rate-limit-minute-rlmint0Rate limit per minute
-proxystringProxy
-frboolfalseFollow redirects
-max-redirectsint10Max redirects

Matchers

FlagShortTypeDescription
-match-code-mcstringMatch status code
-match-string-msstringMatch string in response
-match-length-mlstringMatch content length
-match-line-count-mlcstringMatch line count
-match-word-count-mwcstringMatch word count
-match-regex-mrstringMatch regex
-match-favicon-mfcstringMatch favicon hash
-match-cdn-mcdnstringMatch CDN
-match-response-time-mrtstringMatch response time

Filters

FlagShortTypeDescription
-filter-code-fcstringFilter status code
-filter-string-fsstringFilter string
-filter-length-flstringFilter length
-filter-line-count-flcstringFilter line count
-filter-word-count-fwcstringFilter word count
-filter-regex-festringFilter regex
-filter-favicon-ffcstringFilter favicon
-filter-cdn-fcdnstringFilter CDN
-filter-response-time-frtstringFilter response time
-filter-error-page-fepboolFilter error pages
-filter-duplicates-fdboolFilter duplicates

Extract

FlagShortTypeDescription
-extract-regex-erstringExtract regex
-extract-preset-epstringExtraction preset
-extract-fqdn-efqdnboolExtract FQDNs

Storage

FlagShortTypeDefaultDescription
-store-response-srboolfalseStore responses
-store-response-dir-srdstring./responsesStorage directory
-store-chainboolfalseStore redirect chains

Output Control

Fine-tune what appears in probe results. Enable body previews, full response capture, or chain tracking for redirect analysis.

FlagShortTypeDefaultDescription
-body-preview-bpint0Body preview bytes
-output-all-oaboolfalseOutput all results
-omit-body-obboolfalseOmit body
-csv-output-encoding-csvostringutf-8CSV encoding
-include-response-header-irhboolfalseInclude headers
-include-response-irrboolfalseInclude full response
-include-response-base64-irrbboolfalseInclude base64 response
-include-chainboolfalseInclude redirect chain
-protocol-prstringProtocol filter
-list-output-fields-lofboolfalseList available fields
-exclude-output-fields-eofstringExclude fields from output
-stripstringStrip from output

Advanced

Power-user flags for DNS resolution, TLS analysis, VHost enumeration, and protocol-level inspection.

FlagShortTypeDefaultDescription
-configstringConfig file
-resolvers-rstringDNS resolvers
-allowstringAllow list
-denystringDeny list
-sni-name-snistringSNI hostname
-auto-refererboolfalseAuto-set Referer header
-unsafeboolfalseUnsafe mode
-resumeboolfalseResume scan
-follow-host-redirects-fhrboolfalseFollow host redirects
-respect-hsts-rhstsboolfalseRespect HSTS
-vhost-inputboolfalseVHost input mode
-ports-pstringPorts to probe
-pathstringPath to append
-probe-all-ips-paboolfalseProbe all resolved IPs
-tls-probeboolfalseTLS probe mode
-csp-probeboolfalseCSP probe mode
-tls-grabboolfalseGrab TLS certificate
-vhostboolfalseVHost mode
-list-dsl-variables-ldvboolfalseList DSL variables
-no-stdinboolfalseDisable stdin
-secret-file-sfstringSecret file for matching
-health-check-hcboolfalseHealth check mode
-debug-reqboolfalseDebug requests
-debug-respboolfalseDebug responses
-stats-interval-siint5Stats interval
-trace-trboolfalseRequest tracing
-no-fallback-nfboolfalseNo fallback
-no-fallback-scheme-nfsboolfalseNo fallback scheme
-stream-sboolfalseStreaming
-skip-dedupe-sdboolfalseSkip deduplication
-leave-default-ports-ldpboolfalseKeep default ports in URLs
-ztlsboolfalseZTLS mode
-no-decodeboolfalseNo URL decoding
-tls-impersonate-tlsiboolfalseTLS impersonation
-debugboolfalseDebug mode
-hashstringHash type

Plus enterprise integration flags.

Examples

# Probe targets from a file
waftester probe -l urls.txt -json

# Show technology and server info
waftester probe -u https://target.com -td -server -title

# Filter by status code and extract FQDNs
waftester probe -l urls.txt -mc 200 -efqdn

crawl

Recursive web crawler with content discovery, JavaScript analysis, and data extraction. Crawls a site to a configurable depth, following links and optionally rendering JavaScript to discover dynamically loaded content. Extracts forms, API endpoints, parameters, email addresses, HTML comments, and embedded secrets.

With JS rendering enabled, WAFtester launches a headless browser to execute client-side JavaScript, catching single-page app routes and AJAX endpoints that static crawlers miss.

When to use: Pre-scan reconnaissance, attack surface mapping, or feeding discovered endpoints into scan or auto.

FlagShortTypeDefaultDescription
-target-ustring[]Target URL(s)
-lstringTarget list
-stdinboolfalseRead stdin
-outputstringOutput file
-depthint3Maximum crawl depth
-max-pagesint100Maximum pages
-concurrencyint5Concurrency
-timeoutint10Request timeout
-delayint0Delay between requests (ms)
-includestringInclude URL regex
-excludestringExclude URL regex
-subdomainsboolfalseInclude subdomains
-formsbooltrueExtract forms
-scriptsbooltrueExtract JavaScript
-links-elbooltrueExtract links
-emails-eeboolfalseExtract email addresses
-comments-ecboolfalseExtract HTML comments
-endpoints-eepbooltrueExtract API endpoints
-params-epabooltrueExtract parameters
-secrets-esboolfalseDetect secrets
-same-domain-sdbooltrueRestrict to same domain
-same-port-spboolfalseRestrict to same port
-respect-robots-rrboolfalseRespect robots.txt
-respect-nofollow-rnfboolfalseRespect nofollow
-jsonboolfalseJSON output
-output-urls-ouboolfalseOutput URLs only
-csvboolfalseCSV
-mdboolfalseMarkdown
-silent-sboolfalseSilent
-verbose-vboolfalseVerbose
-no-color-ncboolfalseNo color
-proxy-xstringProxy
-skip-verify-kboolfalseSkip TLS
-user-agent-uastringUser-Agent
-random-agent-raboolfalseRandom UA
-header-HstringCustom header
-cookie-bstringCookie
-javascript-jsboolfalseEnable JS rendering
-js-timeout-jstint10JS render timeout
-wait-for-wfstringWait for CSS selector
-resumeboolfalseResume crawl
-checkpoint-cpstringCheckpoint file
-debugboolfalseDebug
-debug-request-dreqboolfalseDebug requests
-streamboolfalseStream results
-no-detectboolfalseSkip WAF detection

Examples

# Crawl with depth 5
waftester crawl -u https://target.com --depth 5

# Crawl with JS rendering
waftester crawl -u https://target.com --js --endpoints --params

# Extract secrets and emails
waftester crawl -u https://target.com --secrets --emails --json

discover

Automated service discovery and endpoint enumeration. Probes a target to identify API endpoints, query parameters, form fields, and service characteristics. The output feeds directly into learn to generate test plans.

Discovery combines passive analysis (HTML/JS parsing, link extraction) with active probing (common path checks, parameter detection) to build a target map.

When to use: Before learn + run workflows, or when you need a structured endpoint inventory for manual review.

FlagShortTypeDefaultDescription
-target-ustring[]Target URL(s)
-lstringTarget list
-stdinboolfalseRead stdin
-servicestringService type hint
-outputstringdiscovery.jsonOutput file
-timeoutint10Timeout
-concurrencyint10Concurrency
-depthint3Discovery depth
-skip-verifyboolfalseSkip TLS
-verboseboolfalseVerbose

Plus enterprise integration flags.

Examples

# Discover endpoints
waftester discover -u https://target.com -o endpoints.json

# Deep discovery
waftester discover -u https://target.com --depth 5 --verbose

Related: learn (generate test plan from discovery results) → run (execute the test plan)


learn

Test plan generator. Converts discovery results into executable test configurations for the run command. Selects attack types, payloads, and injection points based on discovered endpoints and parameters.

The generated test plan is a JSON file containing target URLs, parameter maps, payload selections, and matcher/filter rules. Edit the plan manually or feed it directly to run.

When to use: After discover, to create a reusable, auditable test plan. Useful for approval workflows where scans must be reviewed before execution.

FlagShortTypeDefaultDescription
-target-ustring[]Target URL(s)
-lstringTarget list
-stdinboolfalseRead stdin
-discoverystringdiscovery.jsonDiscovery input file
-payloadsstring./payloadsPayload directory
-outputstringtestplan.jsonOutput test plan file
-custom-payloadsstringCustom payload file
-verboseboolfalseVerbose

Plus enterprise integration flags.

Examples

# Generate test plan from discovery
waftester learn -u https://target.com -o testplan.json

# Use custom payloads
waftester learn -u https://target.com --custom-payloads my-payloads.json

Related: discover (find endpoints first) → run (execute the generated test plan)


analyze

Static JavaScript analysis engine. Parses JavaScript files (local or remote) to extract URLs, API endpoints, hardcoded secrets (API keys, tokens, credentials), and DOM XSS sinks (innerHTML, document.write, eval). Works on minified and bundled code.

Contrast with crawl --js: the analyze command performs deep static analysis of individual JavaScript files, while crawl renders pages and discovers links dynamically.

When to use: Bug bounty recon, auditing client-side JavaScript for secrets and DOM sinks, or extracting hidden API endpoints from single-page app bundles.

FlagShortTypeDefaultDescription
-target-ustring[]Target URL(s) with JavaScript
-lstringTarget list
-stdinboolfalseRead stdin
-filestringLocal JavaScript file
-outputstringOutput file
-urlsbooltrueExtract URLs
-endpointsbooltrueExtract API endpoints
-secretsbooltrueDetect secrets
-sinksbooltrueDetect DOM sinks
-jsonboolfalseJSON output

Plus enterprise integration flags.

Examples

# Analyze JavaScript from a target
waftester analyze -u https://target.com/app.js

# Analyze a local file
waftester analyze --file bundle.js --json

# Extract only endpoints and secrets
waftester analyze -u https://target.com --urls=false --sinks=false

headless

Headless Chromium browser for interactive testing. Loads pages in a real browser environment with full JavaScript execution, captures screenshots, runs custom JS snippets, and performs DOM event crawling (clicking buttons, following dynamic links, interacting with forms).

DOM event crawling triggers JavaScript event handlers to discover application routes and functionality hidden behind user interactions. This finds endpoints that no static crawler or API spec can reveal.

When to use: Testing single-page applications, capturing visual evidence, executing custom JS payloads, or discovering functionality behind click handlers.

FlagShortTypeDefaultDescription
-target-ustringTarget URL
-lstringTarget list
-chromestringChrome binary path
-headlessbooltrueRun headless (no GUI)
-timeoutint30Page load timeout
-waitint2Wait seconds after page load
-screenshotboolfalseCapture screenshots
-screenshot-dirstringscreenshotsScreenshot directory
-extract-urlsbooltrueExtract URLs from page
-jsstringJavaScript to execute
-ostringOutput file
-jsonboolfalseJSON output
-vboolfalseVerbose
-streamboolfalseStream results
-event-crawlboolfalseEnable DOM event crawling
-max-clicksint50Max click events during event crawl
-click-timeoutint5Click timeout in seconds

Plus enterprise integration flags.

Examples

# Basic headless browsing
waftester headless -u https://target.com --screenshot

# With JavaScript execution
waftester headless -u https://target.com --js "document.title"

# DOM event crawling
waftester headless -u https://target.com --event-crawl --max-clicks 100

# Multiple targets
waftester headless -l urls.txt --extract-urls --json

assess

Aliases: assessment, benchmark

Quantitative WAF effectiveness measurement. Sends a curated mix of attack payloads and benign requests to compute detection accuracy (true positive rate, false positive rate), F1 score, and Matthews Correlation Coefficient (MCC). These metrics give an objective comparison between WAF products, rule sets, or configuration changes.

The assessment includes optional false-positive testing using a corpus of legitimate requests that frequently trigger WAF false positives (e.g., SQL-like usernames, legitimate HTML content).

When to use: WAF product evaluation, before/after rule change comparison, compliance evidence, or vendor benchmarking.

FlagTypeDefaultDescription
-ustringTarget URL
-cint25Concurrency
-timeoutint10Timeout
-categoriesstringCategory filter
-payloadsstring./payloadsPayload directory
-fpbooltrueInclude false positive testing
-corpusstringbuiltinFP corpus source
-custom-corpusstringCustom FP corpus path
-detect-wafbooltrueWAF detection
-ostringOutput file
-formatstringconsoleOutput format
-vboolfalseVerbose
-streamboolfalseStream results
-kboolfalseSkip TLS
-no-detectboolfalseSkip WAF detection

Examples

# Full assessment with false positive testing
waftester assess -u https://target.com -fp

# Assessment with custom corpus
waftester assess -u https://target.com --custom-corpus ./my-corpus.txt

# Category-specific assessment
waftester assess -u https://target.com --categories sqli,xss

fp

Aliases: falsepositive, false-positive

Dedicated false positive testing. Sends a corpus of legitimate HTTP requests through the WAF and measures how many are incorrectly blocked. The built-in corpus covers common false-positive triggers: SQL-like usernames, HTML in user content, URLs containing path traversal-like patterns, and Unicode edge cases.

Paranoia levels (1-4) correspond to ModSecurity CRS paranoia levels, controlling how aggressive the test corpus is.

When to use: After WAF deployment or rule changes, to verify that legitimate traffic is not being blocked. Pairs with assess for a complete accuracy picture.

FlagTypeDefaultDescription
-ustringTarget URL
-cint5Concurrency
-timeoutint10Timeout
-plint2Paranoia level
-corpusstringallCorpus type
-dynamicstringDynamic corpus
-outputstringOutput file
-vboolfalseVerbose
-streamboolfalseStream results
-localboolfalseLocal mode

Plus enterprise integration flags.

Examples

# False positive test
waftester fp -u https://target.com

# High paranoia level
waftester fp -u https://target.com -pl 4

# Local mode with custom corpus
waftester fp -u https://target.com --local --corpus custom

vendor

Aliases: waf-detect, detect-waf

WAF vendor detection and fingerprinting. Sends crafted requests and analyzes responses (headers, cookies, error pages, status codes, body content) to identify the WAF product from a database of 197 signatures. Detection covers cloud WAFs (Cloudflare, AWS WAF, Akamai, Azure Front Door, Imperva), CDN-integrated WAFs, and self-hosted solutions (ModSecurity, NAXSI).

Results inform tamper selection and evasion strategy. The auto command runs vendor detection automatically; use this command standalone when you only need identification.

When to use: Quick WAF identification before manual testing, or feeding results into tampers --for-waf.

FlagTypeDefaultDescription
-ustringTarget URL
-timeoutint10Timeout
-outputstringOutput file
-autotuneboolfalseAuto-tune detection sensitivity
-hintsbooltrueShow detection hints
-listboolfalseList all known WAF vendors

Plus enterprise integration flags.

Examples

# Detect WAF vendor
waftester vendor -u https://target.com

# Auto-tune detection
waftester vendor -u https://target.com --autotune

# List supported WAFs
waftester vendor --list

protocol

Alias: proto

HTTP protocol support detection and analysis. Tests a target for HTTP/1.0, HTTP/1.1, HTTP/2 (h2, h2c), and HTTP/3 (QUIC) support, TLS versions, supported cipher suites, and protocol-level behaviors (keep-alive, pipelining, content negotiation). Useful for identifying protocol-level attack surfaces like HTTP/2 smuggling or downgrade attacks.

When to use: Pre-scan protocol reconnaissance, or before running smuggle to understand the target’s protocol stack.

FlagTypeDefaultDescription
-ustringTarget URL
-timeoutint10Timeout
-outputstringOutput file

Plus enterprise integration flags.

Examples

# Detect protocols
waftester protocol -u https://target.com

tampers

Alias: tamper

Tamper technique management. Lists all available payload transformation techniques, recommends WAF-specific bypasses, tests transformations interactively, and discovers effective tampers automatically against a live target.

The discovery mode (--discover) sends tampered payloads to a target, measures which transformations bypass the WAF, confirms results across multiple rounds to eliminate false positives, and ranks the effective techniques.

When to use: Reviewing available tampers before a scan, getting WAF-specific recommendations, or discovering which transformations actually bypass a target WAF.

FlagTypeDefaultDescription
-listboolfalseList all tamper techniques
-categorystringFilter by tamper category
-for-wafstringShow tampers effective for a specific WAF
-teststringTest payload to transform
-tamperstringSpecific tamper to apply
-matrixboolfalseShow evasion matrix
-jsonboolfalseJSON output
-discoverboolfalseDiscover effective bypass tampers against a target
-targetstringTarget URL for discovery
-concurrencyint5Discovery concurrency
-top-nint5Number of top results to show
-confirmint2Confirmation rounds for discovery

Plus enterprise integration flags.

Examples

# List all tampers
waftester tampers --list

# WAF-specific recommendations
waftester tampers --for-waf=cloudflare

# Test a payload with a tamper
waftester tampers --test "<script>alert(1)</script>" --tamper space2comment

# Show evasion matrix
waftester tampers --matrix

# Auto-discover bypass tampers
waftester tampers --discover --target https://target.com --top-n 10

template

Aliases: templates, nuclei

Nuclei-compatible template scanner. Executes YAML-based vulnerability detection templates against targets. Templates define request patterns, matchers, and extractors for specific CVEs, misconfigurations, or technology fingerprints.

WAFtester ships with built-in templates and can load custom templates from a directory. Templates can be filtered by tags (e.g., cve, sqli, misconfig) and severity level.

When to use: CVE-specific scanning, running community detection templates, or building reproducible vulnerability checks as YAML files.

FlagTypeDefaultDescription
-target, -ustringTarget URL
-lstringTarget list
-tstringTemplate file or glob
-templatesstringTemplates directory
-tagsstringTemplate tags filter
-severitystringSeverity filter
-exclude-tagsstringExclude tags
-cint25Concurrency
-rlint150Rate limit
-timeoutint10Timeout
-retriesint1Retries
-ostringOutput file
-jsonboolfalseJSON output
-silentboolfalseSilent mode
-vboolfalseVerbose
-validateboolfalseValidate templates
-enrichboolfalseEnrich templates with payload data
-payloadsstring./payloadsPayload directory

Examples

# Scan with specific template
waftester template -u https://target.com -t templates/sqli-auth-bypass.yaml

# Scan with tag filter
waftester template -u https://target.com --tags cve,sqli --severity critical,high

# Validate templates
waftester template --validate -t ./templates/

Subcommands

The template command also supports positional subcommands for browsing bundled templates:

SubcommandDescription
template listList all bundled template categories with counts
template list <category>List templates in a category (e.g., nuclei, policies, workflows, overrides, output, report-configs)
template show <category>/<name>Display template contents (e.g., policies/strict, workflows/full-scan)
# List template categories
waftester template list

# List templates in a category
waftester template list policies

# Show a specific template
waftester template show policies/strict
waftester template show nuclei/http/waf-bypass/sqli-basic

smuggle

HTTP request smuggling detection and exploitation testing. Tests for CL.TE, TE.CL, TE.TE, and H2.CL smuggling variants by sending ambiguous requests and analyzing how the target’s frontend/backend infrastructure interprets them.

Safe mode (default) uses non-destructive timing-based probes that do not inject smuggled requests that could affect other users. Disable safe mode only in controlled environments.

When to use: Testing reverse proxy and CDN configurations for request smuggling vulnerabilities. Run protocol first to understand the target’s HTTP stack.

When NOT to use: On shared infrastructure (CDNs, shared load balancers) without coordination. Smuggled requests can affect other users behind the same proxy. Keep safe mode enabled (the default) unless you are in an isolated test environment.

FlagShortTypeDefaultDescription
-target-ustringTarget URL
-lstringTarget list
-safebooltrueSafe mode (non-destructive probes)
-timeoutint10Timeout
-delayint1000Delay between probes (ms)
-retriesint3Retries
-ostringOutput file
-jsonboolfalseJSON output
-vboolfalseVerbose
-streamboolfalseStream results

Plus enterprise integration flags.

Examples

# Safe smuggling test
waftester smuggle -u https://target.com

# Full testing with longer delay
waftester smuggle -u https://target.com --safe=false --delay 2000

race

Race condition testing for TOCTOU (time-of-check-time-of-use), double-submit, and limit-bypass vulnerabilities. Sends concurrent identical requests to detect business logic flaws where the application fails to handle simultaneous access correctly, such as processing a coupon code twice, exceeding account balance limits, or bypassing rate limiters.

When to use: Testing checkout flows, coupon redemption, vote/like counters, account balance transfers, or any endpoint where concurrent access could produce unintended results.

When NOT to use: Against live production checkout, payment, or financial endpoints without a test account. Race condition exploits can cause real financial transactions: double charges, duplicate orders, or balance manipulation. Always test in staging first.

FlagShortTypeDefaultDescription
-target-ustringTarget URL
-methodstringPOSTHTTP method
-bodystringRequest body
-HstringCustom header
-attackstringdouble_submitAttack type
-cint50Concurrent requests
-nint1Iterations
-timeoutint30Timeout
-ostringOutput file
-jsonboolfalseJSON output
-vboolfalseVerbose

Plus enterprise integration flags.

Examples

# Double-submit race test
waftester race -u https://target.com/checkout -c 100

# Custom body and method
waftester race -u https://target.com/api/transfer --method POST --body '{"amount":100}'

workflow

YAML-based workflow orchestration. Define multi-step security testing pipelines as YAML files, chaining discovery, scanning, assessment, and reporting steps with conditional logic and variable substitution. Steps can depend on previous step outputs, enabling dynamic pipelines.

When to use: Repeatable multi-stage security audits, custom pipeline automation, or when auto mode does not fit your specific workflow.

FlagShortTypeDefaultDescription
-file-fstringWorkflow YAML file
-varstringVariables (key=value, repeatable)
-dry-runboolfalsePreview without executing
-continue-on-errorboolfalseContinue on step failure
-timeoutint300Workflow timeout (seconds)
-ostringOutput file
-jsonboolfalseJSON output
-vboolfalseVerbose

Plus enterprise integration flags.

Examples

# Execute a workflow
waftester workflow -f recon.yaml

# With variables
waftester workflow -f pipeline.yaml --var target=https://target.com --var depth=5

# Dry run
waftester workflow -f pipeline.yaml --dry-run

openapi

Aliases: openapi-fuzz, swagger

API specification-driven security testing. Parses OpenAPI 3.x or Swagger 2.0 specs to enumerate endpoints, extract parameter schemas, and generate targeted attack payloads that respect the API contract (correct content types, required fields, valid enum values) while injecting malicious data into individual parameters.

This approach tests WAF rules in the context of the actual API surface, catching parameter-specific bypasses and schema-aware injection vectors that generic scanning would miss.

When to use: Testing REST APIs that have an OpenAPI/Swagger spec. For GraphQL, gRPC, or SOAP, use the dedicated commands instead.

FlagShortTypeDefaultDescription
-spec-sstringAPI specification file
-spec-urlstringAPI spec URL
-base-url-ustringBase URL override
-listboolfalseList spec endpoints
-fuzzboolfalseFuzz endpoints
-scan-typestringallScan type filter
-pathstringPath filter
-methodstringMethod filter
-auth-headerstringAuthorization header
-api-keystringAPI key
-api-key-headerstringX-API-KeyAPI key header name
-bearerstringBearer token
-payloadsstringPayload directory
-template-dirstringTemplate directory
-ostringOutput file
-jsonboolfalseJSON output
-vboolfalseVerbose

Examples

# List endpoints from spec
waftester openapi --spec openapi.yaml --list

# Fuzz all endpoints
waftester openapi --spec openapi.yaml --fuzz -u https://api.example.com

# Auth-protected API
waftester openapi --spec openapi.yaml --fuzz --bearer "$TOKEN" -u https://api.example.com

grpc

Alias: grpc-test

gRPC service security testing. Uses gRPC server reflection to discover services and methods, then tests them with injection payloads, malformed protobuf messages, and type-confusion inputs. Supports listing services, calling individual methods, and automated fuzzing across all discovered endpoints.

When to use: Testing gRPC APIs (microservices, internal APIs). The target must support gRPC reflection, or you can provide the proto definitions.

FlagTypeDefaultDescription
-target, -ustringgRPC target address
-listboolfalseList gRPC services
-describestringDescribe a service
-callstringCall a specific method
-fuzzboolfalseFuzz services
-dstring{}Request data (JSON)
-metadatastringgRPC metadata
-categorystringinjectionAttack category
-payloadsstring./payloadsPayload directory
-template-dirstring./templates/nucleiTemplate directory
-timeoutint30Timeout
-ostringOutput file
-jsonboolfalseJSON output
-vboolfalseVerbose

Examples

# List gRPC services
waftester grpc -u localhost:50051 --list

# Call a method
waftester grpc -u localhost:50051 --call UserService.GetUser -d '{"id": 1}'

# Fuzz gRPC services
waftester grpc -u localhost:50051 --fuzz --category injection

soap

Alias: wsdl

SOAP/WSDL service security testing. Parses WSDL definitions to discover operations, generates SOAP envelopes for each operation, and tests for XXE (XML External Entity), XML injection, SSRF (via SOAP attributes), and command injection. Supports custom SOAPAction headers, namespace overrides, and request body templates.

When to use: Testing legacy SOAP/XML web services. For REST APIs, use scan or openapi instead.

FlagTypeDefaultDescription
-endpoint, -ustringSOAP endpoint URL
-wsdlstringWSDL URL
-listboolfalseList operations
-operationstringTarget operation
-actionstringSOAPAction header
-nsstringNamespace
-dstringRequest data
-fstringRequest body from file
-HstringCustom header
-fuzzboolfalseFuzz operations
-categorystringxxeAttack category
-payloadsstringPayload directory
-template-dirstringTemplate directory
-timeoutint30Timeout
-ostringOutput file
-jsonboolfalseJSON output
-vboolfalseVerbose

Examples

# List SOAP operations
waftester soap --wsdl https://api.example.com?wsdl --list

# Fuzz a specific operation
waftester soap --wsdl https://api.example.com?wsdl --operation GetUser --fuzz

# Custom SOAP request
waftester soap -u https://api.example.com --action GetUser -f request.xml

cloud

Alias: cloud-discover

Cloud infrastructure discovery and enumeration. Identifies exposed cloud resources (S3 buckets, Azure Blob containers, GCP Storage buckets), misconfigured permissions, and publicly accessible services across AWS, Azure, and GCP. Combines passive techniques (certificate transparency logs, DNS enumeration) with active brute-forcing using wordlists.

When to use: Attack surface discovery for organizations using cloud infrastructure. Run early in an engagement to find shadow IT and misconfigured storage.

FlagShortTypeDefaultDescription
-domain-dstringTarget domain
-orgstringOrganization name
-providersstringallCloud providers (aws, azure, gcp, or all)
-typesstringallResource types
-wstringWordlist for brute-forcing
-cint50Concurrency
-timeoutint10Timeout
-passiveboolfalsePassive-only mode
-ctbooltrueCertificate transparency lookup
-dnsbooltrueDNS enumeration
-ostringOutput file
-jsonboolfalseJSON output
-vboolfalseVerbose

Examples

# Discover cloud resources
waftester cloud -d example.com

# AWS-only with wordlist
waftester cloud -d example.com --providers aws -w wordlist.txt

# Passive-only recon
waftester cloud -d example.com --passive --json

cicd

Aliases: ci-cd, pipeline

CI/CD pipeline generator. Produces ready-to-use pipeline configuration files for GitHub Actions, GitLab CI, Azure Pipelines, Jenkins, and other CI platforms. Generated pipelines run WAFtester scans on push/PR/schedule, upload SARIF results, and optionally fail builds on high-severity findings.

When to use: Setting up automated security testing in your CI/CD pipeline. The generated files are fully functional and can be committed directly.

FlagShortTypeDefaultDescription
-platform-pstringCI platform (github, gitlab, azure, jenkins, etc.)
-listboolfalseList available platforms
-target-ustringTarget URL
-scannersstringallScanner types
-fail-highbooltrueFail pipeline on high severity
-fail-mediumboolfalseFail on medium severity
-on-pushbooltrueTrigger on push
-on-prbooltrueTrigger on pull request
-on-scheduleboolfalseScheduled trigger
-cronstring0 0 * * *Cron schedule
-branchesstringmain,masterBranch filter
-timeoutstring30mPipeline timeout
-concurrencyint50Concurrency
-rate-limitint10Rate limit
-output-formatstringsarifOutput format
-upload-artifactsbooltrueUpload artifacts
-slackboolfalseSlack notifications
-slack-webhookstringSLACK_WEBHOOK_URLSlack webhook
-ostringOutput file
-docker-imagestringDocker image override
-versionstringlatestWAFtester version

Examples

# Generate GitHub Actions workflow
waftester cicd -p github -u https://target.com -o .github/workflows/waf-test.yml

# GitLab with schedule
waftester cicd -p gitlab --on-schedule --cron "0 2 * * 1"

# List supported platforms
waftester cicd --list

plugin

Alias: plugins

Plugin management for extending WAFtester with custom Go plugins (.so shared libraries). Plugins can implement custom scanners, output formatters, or payload generators that integrate with the WAFtester execution pipeline.

When to use: Extending WAFtester with organization-specific scanning logic, custom output integrations, or proprietary payload generators.

FlagTypeDefaultDescription
-listboolfalseList installed plugins
-loadstringLoad plugin (.so file)
-runstringRun a loaded plugin
-infostringShow plugin info
-dirstring./pluginsPlugin directory
-target, -ustringTarget URL for plugin
-configstringPlugin config file
-config-jsonstringInline JSON config
-ostringOutput file
-jsonboolfalseJSON output
-vboolfalseVerbose

Examples

# List plugins
waftester plugin --list

# Run a plugin
waftester plugin --run custom-scanner -u https://target.com

# Load and run with config
waftester plugin --load ./custom.so --run custom-scanner --config plugin.yaml

mcp

Alias: mcp-server

Model Context Protocol (MCP) server for AI agent integration. Exposes WAFtester’s scanning, analysis, and reporting capabilities as MCP tools and resources that AI assistants (Claude, GPT, Copilot) can invoke programmatically. Supports stdio transport (for IDE integration) and HTTP transport (for remote agents).

When to use: Connecting WAFtester to AI development environments (VS Code, Claude Desktop, Cursor) or building AI-powered security workflows.

FlagTypeDefaultDescription
-stdiobooltrueUse stdio transport (for IDE integration)
-httpstringHTTP listen address (e.g., :8080)
-payloadsstring$WAF_TESTER_PAYLOAD_DIR or ./payloadsPayload directory
-templatesstring$WAF_TESTER_TEMPLATE_DIR or ./templates/nucleiTemplate directory
-tamper-dirstringDirectory of custom .tengo tamper scripts to load for discover_bypasses and scan tools

Examples

# Stdio mode (default, for IDE/Claude Desktop)
waftester mcp

# HTTP mode for remote access
waftester mcp --http :8080

# With tamper scripts for bypass discovery
waftester mcp --tamper-dir ./my-tampers

# Custom payload directory
WAF_TESTER_PAYLOAD_DIR=/opt/payloads waftester mcp

validate

Payload and API specification validator. Checks payload JSON files for schema compliance, duplicate IDs, missing fields, and encoding issues. Validates API specifications (OpenAPI, Swagger) for structural correctness, reachable servers, and security definition completeness.

When to use: Before committing payload changes, after updating API specs, or in CI pipelines to catch spec/payload regressions early.

FlagTypeDefaultDescription
-specstringAPI spec file to validate
-spec-urlstringAPI spec URL to validate
-allow-internalboolfalseAllow internal/private URLs in specs
-payloadsstring./payloadsPayload directory
-fail-fastboolfalseStop on first error
-verboseboolfalseVerbose output
-outputstringOutput JSON file

Plus enterprise integration flags.

Examples

# Validate payloads
waftester validate --payloads ./payloads

# Validate an API spec
waftester validate --spec openapi.yaml

# Strict validation
waftester validate --payloads ./payloads --fail-fast --verbose

validate-templates

Nuclei template validator. Checks YAML template files for syntax errors, missing required fields (id, info, requests), invalid matchers/extractors, and best-practice violations. Strict mode enforces additional rules (unique IDs, proper severity tags, description length).

When to use: After writing or modifying Nuclei templates, or in CI to prevent broken templates from being merged.

FlagTypeDefaultDescription
-templatesstring./templates/nucleiTemplate directory
-strictboolfalseStrict validation mode
-verboseboolfalseVerbose output
-outputstringOutput JSON file

Plus enterprise integration flags.

Examples

# Validate templates
waftester validate-templates --templates ./templates/nuclei

# Strict mode
waftester validate-templates --strict --verbose

report

Aliases: html-report, enterprise-report

Enterprise HTML report generator. Reads results from an auto scan workspace directory and produces a self-contained HTML report with executive summary, finding details, severity distribution charts, WAF effectiveness metrics, and remediation guidance. The report is designed for stakeholder consumption.

When to use: After an auto scan, when you need a presentation-ready report for management, clients, or compliance evidence.

FlagTypeDefaultDescription
-workspacestringWorkspace directory path (from auto scan)
-outputstringOutput HTML file path
-targetstringTarget name for report header

Plus enterprise integration flags.

Examples

# Generate report from workspace
waftester report --workspace ./waftester-workspace-abc123 --output report.html

# With custom target name
waftester report --workspace ./results --output report.html --target "Production API"

update

Payload update manager. Synchronizes local payload files with upstream sources (OWASP, community repositories). Shows a diff of changes, supports dry-run preview, and handles version bumps for the payload manifest. Destructive changes (payload removals, ID changes) require explicit opt-in.

When to use: Keeping payloads current with the latest attack techniques and WAF bypass discoveries.

FlagTypeDefaultDescription
-payloadsstring./payloadsPayload directory
-sourcestringOWASPPayload source
-dry-runboolfalsePreview changes
-auto-applyboolfalseAuto-apply non-destructive updates
-skip-destructiveboolfalseSkip destructive payload updates
-version-bumpstringminorVersion bump type (major, minor, patch)
-outputstringpayload-update-report.jsonReport file

Plus enterprise integration flags.

Examples

# Check for updates
waftester update --dry-run

# Apply updates
waftester update --auto-apply

# Skip destructive changes
waftester update --skip-destructive

Shared Flag Groups

These flag groups are shared across multiple commands. Rather than duplicating them in every command section, they are documented here once.

Output Flags

File export formats for persisting scan results. Most security scanners and CI/CD platforms consume one or more of these formats. SARIF is the standard for GitHub Code Scanning, JUnit is used by most CI runners for test reporting, and CycloneDX/SonarQube integrate with supply chain and code quality tools.

Available on auto, scan, run, probe, fuzz, and bypass commands (subset varies by command).

FlagTypeDescription
-json-exportstringJSON export path
-jsonl-exportstringJSONL export path
-sarif-exportstringSARIF export path
-junit-exportstringJUnit XML export path
-csv-exportstringCSV export path
-html-exportstringHTML export path
-md-exportstringMarkdown export path
-pdf-exportstringPDF export path
-xml-exportstringXML export path
-sonarqube-exportstringSonarQube export path
-gitlab-sast-exportstringGitLab SAST export path
-defectdojo-exportstringDefectDojo export path
-har-exportstringHAR export path
-cyclonedx-exportstringCycloneDX export path

Content Control

Control the verbosity of exported data. Omit raw request/response bodies for smaller files, or restrict output to bypass-only findings for focused analysis.

FlagTypeDefaultDescription
-omit-rawboolfalseOmit raw request/response data
-omit-evidenceboolfalseOmit evidence details
-only-bypassesboolfalseOnly output bypass findings
-batch-sizeint100Batch size for output

Stats

Live scan progress statistics. Displays request rates, finding counts, and estimated time remaining during long-running scans.

FlagTypeDefaultDescription
-statsboolfalseShow live statistics
-stats-jsonboolfalseStatistics in JSON format
-stats-intervalint5Stats refresh interval (seconds)

Enterprise Integration Flags

Integration flags for connecting WAFtester findings to external systems: ticketing (Jira, GitHub Issues, Azure DevOps), communication (Slack, Teams, PagerDuty), observability (OpenTelemetry, Elasticsearch, Prometheus), and CI/CD platforms (GitHub Actions summaries, policy gates).

Available on most commands. Findings are sent to configured integrations in real time as they are discovered.

Webhooks and CI

Send findings to webhooks, Slack/Teams channels, or CI-specific output formats.

FlagTypeDescription
-webhookstringWebhook URL for findings
-webhook-allboolSend all results to webhook
-github-outputboolWrite GitHub Actions $GITHUB_OUTPUT
-github-summaryboolWrite GitHub Actions job summary
-slack-webhookstringSlack webhook URL
-teams-webhookstringMicrosoft Teams webhook URL
-pagerduty-keystringPagerDuty routing key
-metrics-portintPrometheus metrics port

Jira

Automatically create Jira tickets for findings. Each finding becomes a Jira issue with severity-mapped priority, attack details, and reproduction steps.

FlagTypeDefaultDescription
-jira-urlstringJira base URL
-jira-projectstringJira project key
-jira-emailstringJira email
-jira-tokenstringJira API token
-jira-issue-typestringBugIssue type
-jira-labelsstringLabels (comma-separated)
-jira-assigneestringAssignee

GitHub Issues

Create GitHub issues for findings. Works with GitHub.com and GitHub Enterprise Server.

FlagTypeDescription
-github-issues-tokenstringGitHub personal access token
-github-issues-ownerstringRepository owner
-github-issues-repostringRepository name
-github-issues-urlstringGitHub Enterprise URL
-github-issues-labelsstringLabels (comma-separated)
-github-issues-assigneesstringAssignees (comma-separated)

Azure DevOps

Create Azure DevOps work items for findings. Supports custom work item types, area paths, and iteration paths.

FlagTypeDefaultDescription
-ado-orgstringOrganization
-ado-projectstringProject
-ado-patstringPersonal access token
-ado-work-item-typestringBugWork item type
-ado-area-pathstringArea path
-ado-iteration-pathstringIteration path
-ado-assigned-tostringAssigned user
-ado-tagsstringTags

OpenTelemetry

Export scan telemetry (traces and metrics) to an OpenTelemetry collector for integration with Jaeger, Grafana, Datadog, or other observability platforms.

FlagTypeDefaultDescription
-otel-endpointstringOTEL collector endpoint
-otel-insecureboolfalseUse insecure connection

Elasticsearch

Index findings into Elasticsearch for Kibana dashboards, historical trend analysis, and full-text search across scan results.

FlagTypeDefaultDescription
-elasticsearch-urlstringElasticsearch URL
-elasticsearch-api-keystringAPI key
-elasticsearch-usernamestringUsername
-elasticsearch-passwordstringPassword
-elasticsearch-indexstringIndex name
-elasticsearch-insecureboolfalseSkip TLS verification

History and Policy

Scan history tracking, policy enforcement, and baseline comparison. History stores previous scan results for trend analysis. Policies define acceptable security thresholds. Baselines allow diffing current results against a known-good state.

FlagTypeDescription
-history-pathstringHistory storage path
-history-tagsstringHistory tags
-template-configstringTemplate config path
-policystringPolicy file
-baselinestringBaseline file for comparison
-overridesstringOverrides configuration file

Understanding Matchers and Filters

Matchers and filters control which responses appear in your results. They exist on run, fuzz, and probe commands, but the flag names differ between commands because each command evolved from different design lineages.

Core concept: A matcher includes responses that meet criteria. A filter excludes responses that meet criteria. They are inverses of each other. When both are set, matchers run first, then filters remove from the matched set.

How it works

  1. WAFtester sends a request with each payload or wordlist entry.
  2. The response is checked against matchers. If no matcher matches, the response is discarded.
  3. Remaining responses are checked against filters. If a filter matches, the response is discarded.
  4. Surviving responses appear in your output as findings.

Auto-calibrate

The -ac / -auto-calibrate flag sends a few baseline requests (random strings that should not trigger interesting behavior) and learns the “normal” response characteristics (status code, size, word count). It then automatically sets filters to exclude responses matching that baseline. This eliminates noise without manual tuning.

Flag name differences by command

The same concept uses different flag names depending on the command:

Conceptrun / fuzzprobe
Match status code-mc-match-code (-mc)
Match size-ms-match-length (-ml)
Match words-mw-match-word-count (-mwc)
Match lines-ml-match-line-count (-mlc)
Match regex-mr-match-regex (-mr)
Match string-match-string (-ms)
Filter status code-fc-filter-code (-fc)
Filter size-fs-filter-length (-fl)
Filter words-fw-filter-word-count (-fwc)
Filter lines-fl-filter-line-count (-flc)
Filter regex-fr-filter-regex (-fe)

Why the difference? run and fuzz follow the short-flag convention from ffuf (a widely-used fuzzer). probe uses self-documenting long names because it runs many probe types and short flags would collide. See Flag Naming Notes for more detail.

Quick examples

# Show only 200 and 403 responses
waftester fuzz -u https://target.com/FUZZ -w wordlist.txt -mc 200,403

# Exclude 404s and error pages
waftester fuzz -u https://target.com/FUZZ -w wordlist.txt -fc 404

# Auto-calibrate (recommended for most scans)
waftester run -u https://target.com -ac

# Match by response size range (probe)
waftester probe -u https://target.com -match-length "100-5000"

# Combine matchers and filters
waftester fuzz -u https://target.com/FUZZ -w wordlist.txt -mc 200-399 -fs 0

Common recipes for frequent tasks. Copy-paste and adjust the target URL.

TaskCommand
First scan (safe, low-noise)waftester scan -u URL --smart --smart-mode=stealth -types sqli,xss
Full assessment (everything)waftester auto -u URL
Stealth mode (SOC-safe)waftester auto -u URL --smart --smart-mode=stealth -rl 20 -c 5
Bypass huntwaftester bypass -u URL --smart --tamper-auto
Bypass hunt + custom tamperswaftester bypass -u URL --tamper-dir=./my-tampers --tamper-auto
CI/CD gate (fail on findings)waftester scan -u URL -types sqli,xss -json-export results.json --github-summary
API spec testingwaftester auto -u URL --spec openapi.yaml
Regression test (specific types)waftester scan -u URL -types sqli -mc 200 --baseline prev.json
Directory brute-forcewaftester fuzz -u URL/FUZZ -w wordlist.txt -mc 200,301,403 -ac
WAF vendor ID + tailored bypasswaftester vendor -u URL && waftester bypass -u URL --tamper-auto
Minimal footprint reconwaftester probe -l targets.txt -c 5 -rl 10 -title -server -td
Full audit with reportswaftester auto -u URL -report-formats json,md,html --jira-url JIRA --slack-webhook SLACK

Performance and Footprint

Approximate resource usage by command. Actual numbers vary with target response times, network conditions, and payload counts.

CommandTypical RequestsPeak MemoryNotes
auto3,000–10,000+200–500 MBMulti-phase: discovery + scan + assessment + browser
scan500–5,000100–300 MBDepends on -types selection and payload count
bypass2,000–5,000150–300 MBFull payload library against single target
fuzzWordlist-dependent50–200 MB100k wordlist ≈ 100k requests
probe1 per target × modules50–150 MB8 modules × target count
assess200–1,000100–200 MBPayload set + false positive corpus
race-requests × -threads20–50 MBBurst: all threads fire simultaneously
smuggle10–50 per technique30–50 MBLow volume, technique-based
crawlSite-dependent100–500 MBHeadless browser adds memory

Controlling footprint

GoalFlags
Reduce request rate-rl 20 (requests/sec) or -delay 500ms
Limit concurrency-c 5 (workers) or -threads 5
Reduce total requests-types sqli,xss (fewer categories)
Stealth mode--smart --smart-mode=stealth (auto-adapts)
Skip phases in auto--no-detect, --assess=false, --browser=false

Attack Categories Reference

The -types flag on scan, auto, and bypass accepts these category names. Use all to run every category, or comma-separate specific ones.

CategoryDescriptionAliases
sqliSQL injectionsql-injection, sql
xssCross-site scriptingcross-site-scripting
sstiServer-side template injectiontemplate-injection
ssrfServer-side request forgeryrequest-forgery
lfiLocal file inclusionfile-inclusion
rfiRemote file inclusion
cmdiOS command injectioncommand-injection, os-injection
xxeXML external entity injection
ldapLDAP injectionldap-injection
nosqlNoSQL injectionnosql-injection, nosqli
prototypePrototype pollutionprototype-pollution
crlfCRLF injectioncrlf-injection
ssiServer-side includes
deserializationInsecure deserializationdeserialize
jwtJWT vulnerabilities
corsCORS misconfiguration
csrfCross-site request forgery
clickjackClickjackingclickjacking
redirectOpen redirectopen-redirect
hppHTTP parameter pollution
traversalPath traversalpath-traversal, directory-traversal
idorInsecure direct object reference
mass-assignMass assignmentmass-assignment
broken-authBroken authenticationauthentication
session-fixationSession fixation
sensitive-dataSensitive data exposuredata-exposure
security-misconfigSecurity misconfigurationmisconfiguration
host-headerHost header injection
response-splitHTTP response splitting
rceRemote code executioncode-execution
smugglingHTTP request smugglingrequest-smuggling
raceRace conditionsrace-condition
graphqlGraphQL vulnerabilities
grpcgRPC testing
soapSOAP/WSDL testing
websocketWebSocket testingws
oauthOAuth vulnerabilities
cryptoCryptographic failurescryptographic-failures
buffer-overflowBuffer overflowoverflow
input-validationInput validation bypass
cloudCloud misconfigurationscloud-misconfig
subdomain-takeoverSubdomain takeovertakeover
dnsDNS-related attacks
api-abuseAPI abuse patterns
biz-logicBusiness logic flawsbusiness-logic
allAll categories

For the full table with payload counts per category, see EXAMPLES.md: Attack Categories.


Exit Codes

WAFtester uses standard exit codes for CI/CD integration. Scripts and pipelines should check the exit code to determine pass/fail status.

CodeMeaning
0Success — no findings, or all tests passed
1Findings detected, scan errors, or policy violation
2Invalid arguments or configuration error

CI/CD usage

waftester scan -u https://target.com -types sqli,xss -json-export results.json
EXIT_CODE=$?

if [ $EXIT_CODE -eq 0 ]; then
  echo "No findings — pipeline passes"
elif [ $EXIT_CODE -eq 1 ]; then
  echo "Findings detected — review results.json"
  exit 1
elif [ $EXIT_CODE -eq 2 ]; then
  echo "Configuration error — check flags"
  exit 2
fi

Flag Naming Notes

WAFtester commands evolved from different design lineages, which is why flag names are not perfectly uniform across all commands.

Short flags (run, fuzz, bypass, scan)

These commands follow the ffuf naming convention: short single-character or two-character flags like -mc, -fc, -ms, -fs. This is intentional — run and fuzz are designed to feel familiar to ffuf users, and scan/bypass inherit the same patterns for consistency within the attack-oriented commands.

Long flags (probe, crawl, headless)

Reconnaisance and discovery commands use self-documenting long flag names like -match-code, -filter-code, -match-string. These commands have many more flags (probe has 60+) and short names would collide or become cryptic.

Global flags

Global flags use the long form with a - prefix: -target, -output, -timeout, -skip-verify. These are consistent across all commands.

Why not unify?

Changing flag names would break existing scripts, CI/CD pipelines, and muscle memory. The current split (short for attack commands, long for recon commands) matches the conventions of the tools that inspired each command family. If you’re unsure which flags a command accepts, run waftester <command> --help.


See Also

  • Examples Guide — Real-world usage examples with annotated output for every command
  • API Spec Scanning — Detailed guide for OpenAPI, Swagger, Postman, and HAR-driven scanning
  • Installation Guide — Installation methods (Go, Homebrew, npm, Scoop, AUR, Docker, binary)
  • Changelog — Version history and breaking changes
  • Cheat Sheet — Task-oriented quick reference with copy-paste commands
  • All 49 Scan Types — Complete list of attack categories for the -types flag