in a field of echoes,
follow the one that runs.

Dalfox hunts XSS.

An open-source scanner for reflected, stored, and DOM-based XSS, written in Rust. It finds the parameters, probes each context, and proves every hit in the parsed HTML and JavaScript before it reports it.

Run it as a command, a REST server, or an MCP tool. One engine underneath, and every finding graded by the evidence behind it.

install

One binary. Nothing else to set up.

  • Homebrew
  • Snap
  • Arch (AUR)
  • Chocolatey
  • Nix
  • Cargo
  • Docker
$ brew install dalfox

Prebuilt binaries for macOS, Linux, and Windows are on the releases page. The installation guide covers every channel, including Docker and building from source.

run

One command, a verified finding.

Point Dalfox at a target. It discovers the parameters, probes which characters survive in each context, injects payloads, and checks the hit in the parsed DOM before it reports it.

dalfox · scanzsh
$dalfox scan https://xss-game.appspot.com/level1/frame
6:42PM INF start scan to https://xss-game.appspot.com/level1/frame
6:42PM INF found reflected 1 params
└── query valid_specials="/\'{`<>"();=|}[.:]+,$-" invalid_specials=""
6:42PM WRN XSS found 1 XSS
[POC][V][GET][inHTML] ...?query=%3Csvg%20onload%3Dalert%281%29%20class%3Ddlx444fc070%3E
├── Issue: XSS payload DOM object identified
├── Payload: <svg onload=alert(1) class=dlx444fc070>
└── L13: …results were found for <b><svg onload=alert(1) class=dlx444fc070></b>
6:42PM INF scan completed in 3.482 seconds

The [V] means the payload was found executing in the parsed response, not merely echoed back. The detection model explains every grade.

what it does

The whole XSS workflow, in one scanner.

discover
Finds parameters in the query, body, path, headers, cookies, forms, and fragments, then mines more from the DOM, a wordlist, and JSON keys.
probe
Per-character probes tell Dalfox where each parameter lands and which characters survive, so it only sends payloads that can work there.
verify
An HTML parser plus a JavaScript AST separate a reflection that executes from one that only echoes back. Findings carry their evidence.
evade
Fingerprints common WAFs and mutates payloads with encoding, case, whitespace, and entity tricks to get past them.
pipeline
Reads URLs, files, stdin, raw HTTP requests, HAR, and OpenAPI. Chains after your crawler, proxy, or recon tools in CI.
report
Plain, JSON, JSONL, Markdown, TOML, or SARIF for GitHub code scanning. Request and response bodies only when you ask.

modes

Six ways to run it.

Pick the shape that fits your target. Every mode shares the same discovery and verification engine.

$dalfox scan https://target.app

Scan a single URL. Dalfox mines parameters, probes each context, and checks every hit in the parsed response.

$dalfox scan urls.txt

Scan a list of targets from a file, one URL per line, into one report.

$cat urls.txt | dalfox scan

Read targets from stdin, so Dalfox sits at the end of your crawler or recon pipeline.

$dalfox scan https://app/post --sxss --sxss-url https://app/feed

Inject on one endpoint, then check the page where the stored payload shows up.

$dalfox server

Run Dalfox as a long-lived REST API for async scan jobs, integrations, and dashboards.

$dalfox mcp

Expose Dalfox as MCP tools so agents and IDEs can run scans for you.

community

Built in the open, by hunters everywhere.

Dalfox is shaped by the people who run it. Open an issue, send a pull request, or share payloads with the community.

ESC