SM0GXSS — XSS scanner for authorized security testing
Project description
SM0GXSS
Context-aware XSS scanner — reflected, DOM, stored, and blind XSS with headless-browser verification and WAF evasion.
+----------------------------------------------------------------+
| |
| _____ __ __ ___ _______ __ _____ _____ |
| / ____| \/ |/ _ \ / ____\ \ / // ____/ ____| |
| | (___ | \ / | | | | | __ \ V /| (___| (___ |
| \___ \| |\/| | | | | | |_ | > < \___ \\___ \ |
| ____) | | | | |_| | |__| |/ . \ ____) |___) | |
| |_____/|_| |_|\___/ \_____/_/ \_\_____/_____/ |
+================================================================+
Highlights
- 🎯 Many techniques — reflected, DOM, stored, blind, header-injected, path-based, CRLF, open-redirect, GraphQL, and WebSocket XSS.
- 🧠 Context-aware payloads — detects the injection context (HTML body / attribute / JS / URL) and tailors the payload set per zone.
- 🛡️ WAF fingerprinting + evasion — identifies the wall and adapts payload encodings to get past it.
- 🌐 Headless-browser verification — confirms DOM/stored XSS by actually loading the page and watching for
alert()(optional, via[browser]). - 🕸️ Surface discovery — built-in crawler, form discovery, and OpenAPI ingestion.
- 📄 Reports — terminal summary plus JSON, SARIF (CI / code-scanning), and HTML output.
Install
pip install sm0g-xss # core scanner
pip install "sm0g-xss[browser]" # + headless-browser verification (selenium)
This pulls the engine dependency (sm0g_engine) automatically.
From source (development)
git clone <repo> && cd SM0GXSS
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]" # editable install + test/lint tooling
pytest -q # run the suite
Quick start
# scan a single URL
sm0gxss "https://target.tld/page?q=test"
# crawl first, then scan reflected + DOM
sm0gxss "https://target.tld/" --crawl --crawl-depth 2 --technique RD
# DOM XSS with headless-browser confirmation (needs the browser extra)
sm0gxss "https://target.tld/#q=test" --technique D --browser --poc
Techniques
Pass any combination to --technique (default: all):
| Flag | Technique |
|---|---|
R |
Reflected XSS |
D |
DOM-based XSS |
B |
Blind XSS (needs --blind-host) |
S |
Stored XSS (needs --stored-url) |
H |
Header-injected XSS |
P |
Path-based XSS |
C |
CRLF injection |
W |
WebSocket XSS (with --websocket) |
G |
GraphQL XSS (with --graphql) |
Q |
Open redirect |
sm0gxss "https://target.tld/?q=1" --technique RD --risk 2 --level 2
Usage
sm0gxss <url> [options]
| Option | Description | Default |
|---|---|---|
--technique RDBSHPCWGQ |
Techniques to run (see table above) | all |
--risk 1-3 |
Payload aggressiveness | 1 |
--level 1-3 |
Injection-point depth | 1 |
--crawl / --crawl-depth N |
Crawl the site first / crawler depth | off / 3 |
--browser |
Headless-browser verification (needs [browser]) |
off |
--blind-host HOST |
Callback host for blind XSS | — |
--stored-url URL |
Where to read back stored XSS | — |
--probe-headers |
Inject into HTTP request headers | off |
--graphql / --websocket |
Enable GraphQL / WebSocket probing | off |
--openapi PATH/URL |
Seed surfaces from an OpenAPI spec | — |
--evasion MODE |
WAF-evasion transform(s) | — |
--shuffle |
Shuffle payload order | off |
--poc |
Emit ready-to-click PoC links | off |
--login-url / --login-user / --login-pass |
Authenticate before scanning | — |
-H "Name: Value" |
Add a header (repeatable) | — |
--cookies "k=v; ..." |
Cookie string | — |
--proxy URL |
Route through an HTTP proxy | — |
--random-agent |
Rotate the User-Agent | off |
--threads N |
Concurrency | 5 |
--timeout N / --delay S |
Request timeout / per-request delay | 15 / 0 |
--verify-ssl |
Verify TLS certificates | off |
-d, --data BODY |
POST body | — |
--output-json / --output-sarif / --output-html PATH |
Write reports | — |
-v, --verbose |
Verbose output | off |
Output & reports
- Terminal — a summary table of every finding (active + passive).
--output-json/--output-sarif/--output-html— machine-readable / CI / shareable reports. SARIF plugs straight into code-scanning pipelines.
Ethical use & authorization
SM0GXSS is built for authorized security testing only — penetration tests, bug-bounty programs within their stated scope, CTFs, security research, and systems you own or operate (lab/staging).
- Get explicit, written permission before scanning any system you do not own. Running an active scanner against third-party systems without authorization is illegal in most jurisdictions and can cause disruption.
- Stay in scope. Respect bug-bounty rules, rate limits, and out-of-scope lists. Use
--delay/--threadsto avoid overloading a target. - Blind/OOB and headless modes reach external infrastructure (your callback host, a real browser loading the page) — only point them at assets you control or are authorized to test.
- Handle findings responsibly — disclose privately to the asset owner; never exploit, pivot, or exfiltrate beyond what the engagement authorizes.
You are solely responsible for how you use this tool. The authors assume no liability for misuse or damage.
License
AGPL-3.0-or-later — Copyright (c) 2026 SM0G-SEC by roc1t1z3not.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sm0g_xss-0.1.5.tar.gz.
File metadata
- Download URL: sm0g_xss-0.1.5.tar.gz
- Upload date:
- Size: 33.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2320fe935e7cf4ae18966c81a40ecbc796181035695271748dd21d3519d6a174
|
|
| MD5 |
5feb08c3637eff4161311fe41f18ead3
|
|
| BLAKE2b-256 |
5969331a35231e999a8dada45a57608b7405c7afcbe65e9ab7311ad71ef2f908
|
File details
Details for the file sm0g_xss-0.1.5-py3-none-any.whl.
File metadata
- Download URL: sm0g_xss-0.1.5-py3-none-any.whl
- Upload date:
- Size: 47.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93e588f4cc80d2aaab0fc2ee1ba0c9c79c70f4f91546b0cab2566fe6357104f6
|
|
| MD5 |
27ca5428257d84e2a0ee17b0bdeaf393
|
|
| BLAKE2b-256 |
bf3db30f2b2fa50b8808364e61300474477eeb0cedd2b9ddbb8410117856fcfa
|