Updated Jul 14, 2026

Vulnerabilities

Mine parameters and verify XSS in headless

Parameter mining and XSS testing with headless verification.

Agent

overview

What dalfox does

Takes parameterized URLs from a crawler or gau feed and turns them into verified XSS findings. Mines parameters, then tests reflected, stored, and DOM contexts before writing structured output.

Point url at one target or file at a list (or Burp/ZAP raw data). Narrow with --param, add --blind for out-of-band callbacks, deepen DOM checks with --deep-domxss, and emit plain, json, or jsonl via --report-format.

Compared with kxss, dalfox spends more time on parameter mining and headless confirmation. Compared with nuclei, it stays on XSS instead of multi-class templates. Skip headless only when you accept weaker DOM and inJS verification.

source github.com/hahwul/dalfox

use cases

Where dalfox fits

Mine and test parameters for XSS

Let DalFox discover parameters in the DOM and dictionary, then test each for reflected, stored, and DOM-based cross-site scripting in one pass.

Run stored XSS workflows

Use stored-XSS mode with a trigger URL so DalFox injects on one page and verifies execution on the page that renders the stored value.

Add blind XSS detection

Set a blind XSS domain so payloads call back when they fire in contexts you cannot see, catching issues a reflected check would miss.

Feed results into automation

Emit JSON or JSONL and use found-action to fire a command on each hit, so a scheduled scan notifies or routes findings automatically.

reference

dalfox inputs and flags

67 inputs
NameTypeFlagDescription
single-urlSTRINGurlSingle target mode: scan one URL and its parameters.
target-listFILEfileFile mode: a list of target URLs, or raw Burp/ZAP data.
paramSTRING--paramOnly test the parameters you name.
blind-xss-domainSTRING--blindBlind XSS callback domain for out-of-band payloads.
custom-payloadsFILE--custom-payloadLoad extra XSS payloads from a file.
report-formatSTRING--report-formatReport format: plain, json, or jsonl.
deep-domxssBOOLEAN--deep-domxssRun more DOM XSS payloads through the headless browser.
found-actionFILE--found-actionRun a command on each weak or confirmed finding.

Showing key inputs. dalfox exposes 67 inputs in total.

Full flag reference (67 inputs)
NameTypeFlagDescription
sxssSTRINGsxssUse Stored XSS mode
debugBOOLEAN--debugDebug mode
paramSTRING--paramOnly testing selected parameters
cookieSTRING--cookieAdd custom cookie
reportBOOLEAN--reportShow detail report
payloadBOOLEANpayloadPayload mode, make and enum payloads
use-bavBOOLEAN--use-bavSkipping BAV(Basic Another Vulnerability) analysis
workersSTRING--workerNumber of worker (default 100)
no-colorBOOLEAN--no-colorNot use colorize
only-pocSTRING--only-pocShows only the PoC code for the specified pattern (g: grep / r: reflected / v: verified)
post-dataSTRING--dataUsing POST Method and add Body data
use-proxySTRING--proxySend all request to proxy server. Example: http://127.0.0.1:8080
mining-domBOOLEAN--mining-domFind new parameter in DOM (attribute/js value) (default true)
no-spinnerBOOLEAN--no-spinnerNot use spinner
output-allBOOLEAN--output-allAll log write mode
single-urlSTRINGurlUse single target mode
config-fileFILE--configUsing config from file
deep-domxssBOOLEAN--deep-domxssDOM XSS Testing with more payloads on headless [so slow]
http-methodSTRING--methodForce overriding HTTP Method. Example: PUT (default "GET")
mining-dictBOOLEAN--mining-dictFind new parameter with dictionary attack, default is Gf-Patterns=>XSS (default true)
target-listFILEfileUse file mode(targets list or rawdata)
timeout-secSTRING--timeoutSecond of timeout (default 10)
found-actionFILE--found-actionIf found weak/vuln, action(cmd) to next. Example: './notify.sh'
ignore-paramSTRING--ignore-paramIgnore this parameter when scanning. Example: --ignore-param api_token --ignore-param csrf_token
custom-headerSTRING--headerAdd custom headers
report-formatSTRING--report-formatFormat of --report flag [plain/json/jsonl] (default "plain")
skip-greppingBOOLEAN--skip-greppingSkipping built-in grepping
skip-headlessBOOLEAN--skip-headlessSkipping headless browser base scanning[DOM XSS and inJS verify]
stdout-formatSTRING--formatStdout output format. Supported plain / json
file-mode-httpBOOLEAN--httpUsing force http on rawdata mode
only-discoveryBOOLEAN--only-discoveryOnly testing parameter analysis
output-requestBOOLEAN--output-requestInclude raw HTTP requests in the results
cookie-from-rawFILE--cookie-from-rawLoad cookie from burp raw http request. Example: request.txt
custom-payloadsFILE--custom-payloadAdd custom payloads from file
output-responseBOOLEAN--output-responseInclude raw HTTP responses in the results
remote-payloadsSTRING--remote-payloadsUsing remote payload for XSS testing. Supported: portswigger/payloadbox. Example: portswigger,payloadbox
skip-mining-allBOOLEAN--skip-mining-allSkipping ALL parameter mining
skip-mining-domBOOLEAN--skip-mining-domSkipping DOM base parameter mining
blind-xss-domainSTRING--blindAdd your blind xss domain. Example: hahwul.xss.ht
custom-grep-fileFILE--grepUsing custom grepping file.Example: ./samples/sample_grep.json
follow-redirectsBOOLEAN--follow-redirectsFollowing redirection
mining-dict-wordFILE--mining-dict-wordCustom wordlist file for param mining. Example: word.txt
remote-wordlistsSTRING--remote-wordlistsUsing remote wordlists for param mining. Supported: burp/assetnote. Example: burp
skip-mining-dictBOOLEAN--skip-mining-dictSkipping Dict base parameter mining
custom-alert-typeSTRING--custom-alert-typeChange alert value type. Example: none / str,none (default "none")
custom-user-agentSTRING--user-agentAdd custom UserAgent
delay-milisecondsSTRING--delayMilliseconds between send to same host (1000==1s)
file-mode-rawdataFILE--rawdataUsing req rawdata from Burp/ZAP
skip-xss-scanningBOOLEAN--skip-xss-scanningSkipping XSS Scanning
sxss-mode-triggerSTRING--triggerChecking this url after inject sxss code. Example: https://~~/profile
custom-alert-valueSTRING--custom-alert-valueChange alert value. Example: document.cookie (default "1")
sxss-mode-sequenceSTRING--sequenceSet sequence to first number. Example: https://~/view?no=SEQNC 3 (default -1)
ignore-status-codesSTRING--ignore-returnIgnore scanning from return code. Example: 302,403,404
do-not-print-all-logsBOOLEAN--silenceNot printing all logs
payload-mode-entity-gfBOOLEAN--entity-gfEnumerate a gf-patterns xss params
payload-mode-enum-attrBOOLEAN--enum-attrEnumerate a in-attr xss payloads
payload-mode-enum-htmlBOOLEAN--enum-htmlEnumerate a in-html xss payloads
payload-mode-enum-injsBOOLEAN--enum-injsEnumerate a in-js xss payloads
payload-mode-make-bulkBOOLEAN--make-bulkMake bulk payloads for stored xss
use-only-custom-payloadBOOLEAN--only-custom-payloadOnly testing custom payload (required parameter custom-payloads)
payload-mode-encoder-urlBOOLEAN--encoder-urlEncoding output
payload-mode-enum-commonBOOLEAN--enum-commonEnumerate a common xss payloads
payload-mode-remote-payloadboxBOOLEAN--remote-payloadboxEnumerate a payloadbox's xss payloads
payload-mode-entity-useful-tagsBOOLEAN--entity-useful-tagsEnumerate a useful tags for xss
payload-mode-remote-portswiggerBOOLEAN--remote-portswiggerEnumerate a portswigger xss cheatsheet payloads
payload-mode-entity-event-handlerBOOLEAN--entity-event-handlerEnumerate a event handlers for xss
payload-mode-entity-special-charsBOOLEAN--entity-special-charsEnumerate a special chars for xss

example

Run dalfox

dalfox · command
# single URL: mine params, test for XSS, verify DOM/inJS in headless, emit jsonldalfox url 'https://example.com/?q=test' --blind https://xss.example.com --report-format jsonl # many targets from a file, run a command on every confirmed hitdalfox file urls.txt --found-action './notify.sh' --report-format jsonl
sample output
[*] Mining parameters via DOM and dictionary (Gf-Patterns)...[I] Found 3 testing points in DOM mining[*] Start scanning https://example.com/ ...[V] Triggered XSS payload (verified in headless) on param: q[POC][V][GET] https://example.com/?q=%22%3E%3Csvg%2Fonload%3Dalert%281%29%3E[POC][R][GET] https://example.com/search?keyword=%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E[POC][G][GET] https://example.com/item?id=1%27%22%3E%3C[*] Finished: 1 verified, 1 reflected, 1 grep-only across 3 params

guidance

Choosing dalfox

Use when you have parameterized URLs and want parameter analysis plus XSS testing in one pass. For a broad multi-class scan, run nuclei; for CRLF specifically, use crlfuzz. Feed URLs a crawler or gau collected.

xspear

Ruby XSS scanner. dalfox adds richer parameter mining and headless verification.

nuclei

Template-driven scanner covering many classes. Broader than dalfox XSS focus.

kxss

Lightweight reflected-XSS finder. Faster triage, less depth than dalfox.

faq

dalfox questions

Yes. A Go DOM parser tracks where input lands, and the headless engine confirms DOM and in-JavaScript execution. Add --deep-domxss for more browser payloads, or --skip-headless to trade verification for speed.

Run dalfox yourself

A target feeds gau to collect parameterized URLs, then dalfox mines and tests them for XSS and writes the confirmed findings as a queryable output.

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