Updated Jul 15, 2026

Recon

Identify the WAF in front of a URL

Fingerprint web application firewalls and test tamper bypasses.

Agent

overview

What whatwaf does

whatwaf sends crafted payloads at a URL, matches responses to firewall signatures, then can evaluate tamper scripts that may evade the block. Reach for it when you need the product name before heavier scanning.

Operator knobs: --url for one host, --list plus --threads for estates, --skip to stop after identification, --json or --csv for structured results, and --ra for a random user-agent.

Trickest runs whatwaf as a managed recon step that takes a URL or list and writes a file and a folder. Pair with wafw00f for a second fingerprint, then tune scanners to the defense you found.

source github.com/Ekultek/WhatWaf

use cases

Where whatwaf fits

Identify the WAF before active scanning

Run --url against a target so later fuzzing and nuclei templates account for the firewall product.

Fingerprint only, skip bypass tests

Pass --skip when you need the vendor name without spending time on tamper-script evaluation.

Batch-check a URL list

Feed --list of hosts and raise --threads so an estate gets WAF-tagged in one pass.

Capture JSON for workflow branching

Enable --json so downstream nodes can route differently when Cloudflare, ModSecurity, or no WAF is present.

reference

whatwaf inputs and flags

30 inputs
NameTypeFlagDescription
urlSTRING--urlSingle URL to detect protection on.
listFILE--listFile of URLs, one per line, to detect protection on.
skipBOOLEAN--skipIdentify the firewall without checking bypasses.
jsonBOOLEAN--jsonWrite output to a JSON file.
threadsSTRING--threadsNumber of parallel request threads (default 1).
determine-webserverBOOLEAN--determine-webserverAttempt to identify the backend web server.
fingerprintBOOLEAN--fingerprintSave all fingerprints for further investigation.
random-user-agentBOOLEAN--raUse a random user-agent for HTTP requests.

Showing key inputs. whatwaf exposes 30 inputs in total.

Full flag reference (30 inputs)
NameTypeFlagDescription
csvBOOLEAN--csvSend the output to a CSV file
urlSTRING--urlPass a single URL to detect the protection
burpFILE--burpPass a Burp Suite request file to perform WAF evaluation
dataSTRING--dataSend this data with the POST request (*default=random)
hideBOOLEAN--hideHide the banner during the run
jsonBOOLEAN--jsonSend the output to a JSON file
listFILE--listPass a file containing URL's (one per line) to detect the protection
postBOOLEAN--postSend a POST request (*default=GET)
skipBOOLEAN--skipSkip checking for bypasses and just identify the firewall
testBOOLEAN--testTest the connection to the website before starting (*default=True)
yamlBOOLEAN--yamlSend the output to a YAML file
proxySTRING--proxyProvide a proxy to run behind in the format type://address:port (IE socks5://10.54.127.4:1080) (*default=None)
encodeSTRING--encodeEncode a provided payload using provided tamper script(s) you are able to payy multiple tamper script load paths to this argument and the payload will be tampered as requested
googlerFILE--googlerPass a JSON file from the Googler CMD line tool (IE googler -n 100 --json >> googler.json)
headersSTRING--headersAdd your own custom headers to the request. To use multiple separate headers by comma. Your headers need to be exact(IE: Set-Cookie=a345ddsswe,X-Forwarded-For:127.0.0.1) (*default=None)
threadsSTRING--threadsSend requests in parallel (specify number of threads (*default=1)
timeoutSTRING--timeoutControl the timeout time of the requests (*default=15)
verboseBOOLEAN--verboseRun in verbose mode (more output)
payloadsSTRING--payloadsProvide your own payloads separated by a comma IE AND 1=1,AND 2=2
throttleSTRING--throttleProvide a sleep time per request (*default=0)
force-sslBOOLEAN--force-sslForce the assignment of HTTPS instead of HTTP while processing (*default=HTTP unless otherwise specified by URL)
force-fileBOOLEAN--force-fileForce the creation of a file even if there is no protection identified
tamper-intSTRING--tamper-intControl the amount of tampers that are displayed (*default=5)
user-agentSTRING--paProvide your own personal agent to use it for the HTTP requests
verify-numSTRING--verify-numChange the request amount to verify if there really is not a WAF present(*default=5)
encode-listSTRING--encode-listEncode a file containing payloads (one per line) by passing the path and load path, files can only encoded using a single tamper script load path
fingerprintBOOLEAN--fingerprintSave all fingerprints for further investigation
payload-listFILE--plProvide a file containing a list of payloads 1 per line
random-user-agentBOOLEAN--raUse a random user-agent for the HTTP requests (*default=whatwaf/2.1.6.3 (Language=3.10.12; Platform=Linux))
determine-webserverBOOLEAN--determine-webserverAttempt to determine what web server is running on the backend (IE Apache, Nginx, etc.. *default=False)

example

Run whatwaf

whatwaf · command
# identify WAF only (no bypass attempts), JSON outwhatwaf --url https://example.com --skip --json --ra
sample output
[~] checking https://example.com[+] detected: Cloudflare[~] checking https://api.example.com[+] detected: AWS WAF[~] checking https://www.example.com[+] detected: ModSecurity[~] checking https://staging.example.com[*] no WAF detected[~] checking https://198.51.100.55[+] detected: Imperva

guidance

Choosing whatwaf

Run whatwaf before scanning to learn whether a WAF guards the target and which tampers to try. It detects and suggests bypasses; it does not exploit. Pair with wafw00f for a second detection opinion, and with a scanner for the actual testing.

wafw00f

Focused WAF fingerprinter. Strong at identification; whatwaf adds tamper-bypass suggestions.

nuclei

Template scanner that can include WAF-detection templates as part of a broader run.

whatweb

Identifies web technologies broadly, including some firewall signals, rather than focusing on WAF bypass.

faq

whatwaf questions

Run whatwaf --url https://example.com, or set the url input on the Trickest node.

Run whatwaf yourself

A URL feeds WhatWaf, which fingerprints the firewall in the path before nuclei scans the host and writes findings as a queryable output.

Facts on this page come from the live Trickest tool library.