Bug bounty focused XSS recon pipeline: subdomains → live hosts → URLs → filtering → JS/DOM analysis → report
Low-noise recon • High-signal output • Shareable report • Burp Suite Integration
FOXss is a Python-based recon orchestrator built for XSS hunting.
Instead of dumping millions of URLs, FOXss tries to output actionable artifacts:
- Live subdomains (httpx)
- Collected URLs from multiple sources:
- Katana (active crawling with form-fill + known-files)
- GAU (4 providers: wayback, commoncrawl, otx, urlscan)
- Waybackurls (all versions)
- Urlfinder (aggressive mode with status filtering)
- Cleanly separated files:
- XSS candidates (query-string URLs)
- JS URLs
- Endpoints (no query)
- JavaScript/DOM analysis
- extracts hidden endpoints (absolute + relative paths)
- flags basic DOM sink / secret-like patterns
- Generates a modern white-themed HTML report (
xss_report.html) with inline CSS/JS - JSON export for automation and CI/CD pipelines
- Burp Suite integration via proxy support
- Resumable scans with continue mode
- Flexible filtering with exclude/include patterns
- 🎯 13+ CLI Options - Verbose, silent, proxy, threads, timeout, and more
- 🔄 Resume Scans - Continue interrupted scans with
-cflag - 📊 JSON Export - API-friendly output for automation
- 🔐 Burp Suite - Proxy support for manual analysis
- 🎨 Beautiful Terminal UI - Progress bars, statistics, and colored output
- ⚡ Smart Auto-scaling - Adapts thread counts based on target size
- 🎯 URL Filtering - Exclude/include patterns for targeted scanning
- 🚀 Skip Options - Skip crawling or JS analysis for faster runs
- 📈 Comprehensive Stats - Detailed summary at the end of each scan
FOXss is an automation framework; the external tools do the heavy lifting.
# Install
git clone https://github.com/caneraktas1337/foxss.git
cd foxss
pip install .# Uninstall
sudo pip uninstall -y foxss 2>/dev/null; sudo pip3 uninstall -y foxss 2>/dev/null; sudo python3 -m pip uninstall -y foxss 2>/dev/null; sudo rm -f $(command -v foxss 2>/dev/null); sudo find / -iname "*foxss*" -exec rm -rf {} + 2>/dev/null# Run
foxss scan example.com# Open report
xdg-open recon_example.com/xss_report.html 2>/dev/null || open recon_example.com/xss_report.html- Python:
>= 3.8 - Go: recommended (for installing/maintaining Go-based recon tools)
- OS: Linux/macOS recommended
pip install .pip install -e .FOXss can attempt to install missing tools via Go:
foxss --install-depsNote: this relies on
go install ...@latestand expects a working Go environment.
FOXss expects these tools to exist in your $PATH:
| Category | Tool | Purpose |
|---|---|---|
| Subdomain | subfinder |
subdomain discovery |
| Subdomain | samoscout |
extra discovery |
| Probing | httpx |
live subdomain probing |
| Crawling | katana |
crawling + endpoints |
| URLs | gau |
historical URLs |
| URLs | waybackurls |
Wayback URLs |
| URLs | urlfinder |
passive URL discovery (scope-aware) |
| Runtime | curl |
JS fetch (range-limited) |
Optional: add
dalfoxin your workflow to validate findings onxss_candidates.txt/xss_endpoints.txt.
foxss scan example.com# Verbose mode with custom output directory
foxss scan example.com -v -o my_scan
# Burp Suite integration (proxy)
foxss scan example.com -p http://127.0.0.1:8080
# Silent mode with JSON export
foxss scan example.com -s -j
# Continue previous scan
foxss scan example.com -c
# Exclude certain URL patterns
foxss scan example.com -e ".*\.pdf,.*admin.*"
# Fast scan (skip JS analysis)
foxss scan example.com --skip-js
# Custom threads and timeout
foxss scan example.com -t 50 --timeout 30
# API-only scan
foxss scan example.com -i ".*/api/.*"Usage: foxss scan <target> [OPTIONS]
OUTPUT OPTIONS:
-o, --output DIR Custom output directory (default: recon_<target>)
-j, --json Export results to JSON format
SCANNING OPTIONS:
-v, --verbose Enable verbose/debug output
-s, --silent Silent mode (minimal output)
-c, --continue Continue previous scan (resume)
FILTERING OPTIONS:
-e, --exclude REGEX Exclude URL patterns (comma-separated)
-i, --include REGEX Include only URL patterns (comma-separated)
NETWORK OPTIONS:
-p, --proxy URL HTTP proxy (e.g., http://127.0.0.1:8080)
-t, --threads NUM Override default thread count
--timeout SEC Override default timeout (seconds)
ADVANCED OPTIONS:
--skip-crawling Skip URL crawling phase
--skip-js Skip JavaScript analysis
--only-new Only scan new URLs/subdomains
GLOBAL OPTIONS:
-h, --help Show this help message
--install-deps Auto-install missing tools
Bug Bounty Workflow:
# 1. Initial discovery
foxss scan target.com -o initial_scan
# 2. Deep analysis with Burp
foxss scan target.com -v -p http://127.0.0.1:8080 -o deep_scan
# 3. Continue if interrupted
foxss scan target.com -c
# 4. Export for reporting
foxss scan target.com -j -o final_reportCI/CD Pipeline:
foxss scan target.com -s -j --skip-js -o /builds/resultsQuick Recon:
foxss scan target.com -s --skip-jsFOXss creates a workspace per target:
recon_example.com/
├── subdomains.txt # discovered subdomains
├── active_subdomains.txt # live subdomains (httpx probed)
├── urls.txt # collected URLs
├── urls_filtered.txt # filtered URLs (non-static)
├── new_urls.txt # new URLs (not in history)
├── endpoints.txt # unique endpoints (no query)
├── endpoint_paths.txt # unique paths
├── xss_candidates.txt # URLs with query strings ⭐
├── active_urls.txt # active/live URLs (curl probed)
├── active_urls_status.txt # URLs with status codes
├── xss_endpoints.txt # endpoint patterns (FUZZ placeholders)
├── xss_endpoints_qs.txt # endpoints with query strings
├── xss_endpoints_new.txt # new endpoint patterns
├── xss_high_risk.txt # high-risk XSS candidates ⭐
├── xss_parameters.txt # unique parameter names
├── js_urls.txt # JavaScript files
├── js_endpoints.txt # endpoints extracted from JS
├── js_xss_candidates.txt # XSS candidates from JS ⭐
├── js_sinks.txt # DOM XSS sinks found ⭐
├── js_secrets.txt # secrets/tokens found ⭐
├── hidden_params.txt # hidden parameter candidates
├── xss_reflections.txt # reflection test results ⭐
├── xss_report.html # HTML report (shareable) 📊
├── scan_results.json # JSON export (with -j flag) 📊
└── tmp/ # temporary files
- xss_high_risk.txt → High-impact parameter patterns
- xss_candidates.txt → Best starting point for XSS testing
- js_xss_candidates.txt → XSS candidates from JavaScript
- js_sinks.txt → Potential DOM XSS vulnerabilities
- xss_reflections.txt → URLs where input is reflected
- xss_report.html → Visual overview of all findings
When using -j or --json flag, a scan_results.json file is created:
{
"scan_info": {
"target": "example.com",
"scan_date": "2025-12-21 14:30:00",
"output_directory": "recon_example.com"
},
"statistics": {
"subdomains": 1234,
"active_subdomains": 567,
"urls_total": 45678,
"xss_candidates": 234,
"js_sinks": 12
},
"files": {
"xss_candidates": "path/to/xss_candidates.txt",
"html_report": "path/to/xss_report.html"
},
"results": {
"high_risk_xss": [...],
"js_sinks": [...],
"js_secrets": [...]
}
}FOXss is configurable via environment variables:
| Variable | Default | Description |
|---|---|---|
PARALLEL_JOBS |
12 |
parallel URL checks / curl jobs |
FOXSS_HTTPX_THREADS |
60 |
httpx threads |
FOXSS_HTTPX_SUB_CHUNK |
5000 |
lines per chunk when probing subdomains |
FOXSS_HTTPX_TIMEOUT |
7 |
httpx timeout (seconds) |
FOXSS_HTTPX_RETRIES |
2 |
httpx retries |
FOXSS_KATANA_WORKERS |
3 |
katana concurrent workers per host |
FOXSS_KATANA_DEPTH |
4 |
katana crawl depth |
FOXSS_GAU_WORKERS |
6 |
gau concurrent workers |
FOXSS_GAU_TIMEOUT |
60 |
gau timeout (seconds) |
FOXSS_WAYBACK_WORKERS |
6 |
wayback concurrent workers |
FOXSS_WAYBACK_TIMEOUT |
60 |
wayback timeout (seconds) |
FOXSS_URLFINDER_WORKERS |
6 |
urlfinder concurrent workers |
FOXSS_URLFINDER_TIMEOUT |
20 |
urlfinder timeout (seconds) |
| Variable | Default | Description |
|---|---|---|
JS_MAX_FILES |
120 |
max JS files to download/analyze |
HVT_MAX_URLS |
80 |
max "high-value target" URLs considered |
| Variable | Default | Description |
|---|---|---|
FOXSS_UA |
random preset | custom User-Agent |
FOXSS_XFF |
random IP | custom X-Forwarded-For |
FOXSS_PROXY |
none | HTTP proxy URL |
| Variable | Description |
|---|---|
FOXSS_VERBOSE |
Enable verbose/debug output (0/1) |
FOXSS_SILENT |
Enable silent mode (0/1) |
NO_COLOR |
Disable colored output |
| Variable | Description |
|---|---|
BLIND_XSS_DOMAIN |
your blind XSS domain |
COLLAB_DOMAIN |
alias/alternative var |
High-performance scan:
export FOXSS_HTTPX_THREADS=80
export FOXSS_KATANA_WORKERS=8
export PARALLEL_JOBS=30
foxss scan example.comConservative scan (slow targets):
export FOXSS_HTTPX_THREADS=20
export FOXSS_HTTPX_TIMEOUT=15
export FOXSS_KATANA_WORKERS=2
foxss scan example.comWith proxy:
export FOXSS_PROXY=http://127.0.0.1:8080
foxss scan example.com
- Reduce threads:
export FOXSS_HTTPX_THREADS=20 - Reduce chunk size:
export FOXSS_HTTPX_SUB_CHUNK=1500 - Keep output directory on a local SSD (avoid slow network drives).
- Some programs block passive collectors; rely more on
katana+gau+waybackurls. - Lower urlfinder chunk size:
export FOXSS_URLFINDER_CHUNK=10
FOXss embeds inline CSS/JS into xss_report.html. If it looks unstyled:
- ensure the scan finished cleanly (report not truncated)
- open with a browser, not a text viewer
Start from:
xss_candidates.txtxss_high_risk.txtjs_xss_candidates.txt
PRs/issues are welcome.
When opening an issue, please include:
- tool versions (
httpx -version,katana -version, etc.) - a small sample of problematic input/output
- OS + Python version
Use FOXss only on targets you own or where you have explicit permission.
You are responsible for following program rules and applicable laws.
See LICENSE.
Caner Aktaş
X (Twitter): @caneraktas_
GitHub: @caneraktas1337
- 📖 Detailed Features Guide (EN)
- 📖 Detailed Features Guide (TR)
- 🐛 Report Issues
- ⭐ Give a Star
- 📦 Releases
Made with ❤️ for the bug bounty community
