Updated Jul 15, 2026

Scanners

Crawl and fuzz a web app for injection flaws

Black-box crawler and fuzzer for web app injection classes.

Agent

overview

What wapiti does

Point wapiti at a live base URL after a prober confirms the host answers. It crawls pages, forms, and parameters, then injects payloads and reads responses for SQLi, XSS, SSRF, and related classes without needing source access.

Bound the run with --scope (page, folder, domain, url), --depth, --level, and --scan-force. Load modules with --module and write csv, html, json, txt, or xml via --format.

Trickest runs wapiti as a managed scanner node that takes a URL and emits a file plus a results folder. Prefer nuclei when you need template-driven CVE checks across many hosts.

source github.com/wapiti-scanner/wapiti

use cases

Where wapiti fits

Audit a single application end to end

Point wapiti at a base URL, let it crawl the scope, and fuzz every discovered form and parameter for injection and disclosure flaws in one run.

Scope a scan to a folder or domain

Set the scan scope to page, folder, domain, or url so the crawler stays inside the area you are authorized to test instead of wandering off-site.

Tune attack pressure to the target

Use the attack level and scan-force settings to run a polite pass on a fragile app or an aggressive pass on a hardened one.

Emit a machine-readable report

Write JSON or XML output so the findings feed a triage stage or a ticketing step instead of a human reading an HTML page.

reference

wapiti inputs and flags

34 inputs
NameTypeFlagDescription
urlSTRING--urlThe base URL used to define the scan scope
scopeSTRING--scopeSet scan scope (page, folder, domain, url, or punk)
moduleSTRING--moduleList of modules to load
levelSTRING--levelSet attack level
depthSTRING--depthSet how deep the scanner should explore the website
formatSTRING--formatSet output format. Supported: csv, html, json, txt, xml. Default is html.
scan-forceSTRING--scan-forceEasy way to reduce the number of scanned and attacked URLs. Possible values: paranoid, sneaky, polite, normal, aggressive, insane
max-scan-timeSTRING--max-scan-timeSet how many seconds you want the scan to last (floats accepted)

Showing key inputs. wapiti exposes 34 inputs in total.

Full flag reference (34 inputs)
NameTypeFlagDescription
urlSTRING--urlThe base URL used to define the scan scope
dataSTRING--dataUrlencoded data to send with the base URL if it is a POST request
skipSTRING--skipSkip attacking given parameter(s)
colorBOOLEAN--colorColorize output
depthSTRING--depthSet how deep the scanner should explore the website
levelSTRING--levelSet attack level
proxySTRING--proxySet the HTTP(S) proxy to use. Supported: http(s) and socks proxies
scopeSTRING--scopeSet scan scope (page, folder, domain, url, or punk)
startSTRING--startAdds a url to start scan with
tasksSTRING--tasksNumber of concurrent tasks to use for the exploration (crawling) of the target.
cookieFILE--cookieSet a JSON cookie file to use.
formatSTRING--formatSet output format. Supported: csv, html, json, txt, xml. Default is html.
headerSTRING--headerSet a custom header to use for every requests
moduleSTRING--moduleList of modules to load
removeSTRING--removeRemove this parameter from urls
excludeSTRING--excludeAdds a url to exclude from the scan
timeoutSTRING--timeoutSet timeout for requests in seconds
verboseSTRING--verboseSet verbosity level (0: quiet, 1: normal, 2: verbose)
endpointSTRING--endpointURL serving as endpoint for both attacker and target
auth-credSTRING--auth-credSet HTTP authentication credentials
auth-typeSTRING--auth-typeSet the authentication type to use (basic, digest, ntlm, or post)
scan-forceSTRING--scan-forceEasy way to reduce the number of scanned and attacked URLs. Possible values: paranoid, sneaky, polite, normal, aggressive, insane
user-agentSTRING--user-agentSet a custom user-agent to use for every requests
verify-sslSTRING--verify-sslSet SSL check (0 or 1, default is 0)
dns-endpointSTRING--dns-endpointDomain serving as DNS endpoint for Log4Shell attack
no-bugreportBOOLEAN--no-bugreportDon't send automatic bug report when an attack module fails
max-scan-timeSTRING--max-scan-timeSet how many seconds you want the scan to last (floats accepted)
max-parametersSTRING--max-parametersURLs and forms having more than MAX input parameters will be erased before attack.
drop-set-cookieBOOLEAN--drop-set-cookieIgnore Set-Cookie header from HTTP responses
max-attack-timeSTRING--max-attack-timeSet how many seconds you want each attack module to last (floats accepted)
external-endpointSTRING--external-endpointURL serving as endpoint for target
internal-endpointSTRING--internal-endpointURL serving as endpoint for attacker
max-files-per-dirSTRING--max-files-per-dirSet how many pages the scanner should explore per directory
max-links-per-pageSTRING--max-links-per-pageSet how many (in-scope) links the scanner should extract for each page

example

Run wapiti

wapiti · command
# crawl example.com in domain scope, XSS+SQL modules, JSON reportwapiti --url https://example.com/ --scope domain --module xss,sql --level 1 --depth 3 --format json --max-scan-time 600
sample output
[*] Wapiti 3.x - a web application vulnerability scanner[*] Target: https://example.com/[*] Scope: domain[+] https://example.com/login[+] https://example.com/search?q=[+] https://example.com/api/v1/items[*] Attack module xss loaded[*] Attack module sql loaded[!] XSS found in GET https://example.com/search?q=[!] SQL Injection found in GET https://example.com/product?id=[*] Report saved as report.json

guidance

Choosing wapiti

Reach for wapiti when you need an automated black-box audit of a web app's forms and parameters. Crawl and fuzz one confirmed-live target. For template-driven CVE checks across many hosts, use nuclei instead.

nuclei

Template-driven scanner for known CVEs and misconfigurations. wapiti fuzzes parameters generically instead.

wascan

Another black-box fuzzing scanner. wapiti has a broader, better-maintained module set.

nikto

Classic server scanner focused on known files and configs. wapiti goes deeper into form and parameter injection.

faq

wapiti questions

No. It works black-box over HTTP, crawling the app and fuzzing the forms and URLs it finds, so it runs against any backend stack.

Run wapiti yourself

A target is confirmed live by httpx, then Wapiti crawls and fuzzes it before the findings land as a queryable output.

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