Skip to content
stamparmPublic

About

Damn Small XSS Scanner

Resources

Stars

429 stars

Watchers

26 watching

Forks

Latest commit

 

History

135 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Damn Small XSS Scanner Tests Python 3.x License

Damn Small XSS Scanner (DSXS) is a fully functional Cross-site scripting vulnerability scanner (supporting GET and POST parameters) written in under 100 lines of code.

Vulnerable

As of optional settings it supports HTTP proxy together with HTTP header values User-Agent, Referer and Cookie.

Sample runs

$ python3 dsxs.py -h
Damn Small XSS Scanner (DSXS) < 100 LoC (Lines of Code) #v0.4a
 by: Miroslav Stampar (@stamparm)

Usage: dsxs.py [options]

Options:
  --version          show program's version number and exit
  -h, --help         show this help message and exit
  -u URL, --url=URL  Target URL (e.g. "http://www.target.com/page.htm?id=1")
  --data=DATA        POST data (e.g. "query=test")
  --cookie=COOKIE    HTTP Cookie header value
  --user-agent=UA    HTTP User-Agent header value
  --referer=REFERER  HTTP Referer header value
  --proxy=PROXY      HTTP proxy address (e.g. "http://127.0.0.1:8080")
$ python3 dsxs.py -u "http://testphp.vulnweb.com/search.php?test=query" --data="s
earchFor=foobar"
Damn Small XSS Scanner (DSXS) < 100 LoC (Lines of Code) #v0.4a
 by: Miroslav Stampar (@stamparm)

* scanning GET parameter 'test'
* scanning POST parameter 'searchFor'
 (i) POST parameter 'searchFor' appears to be XSS vulnerable (">.xss.<", outside
 of tags, no filtering)

scan results: possible vulnerabilities found
$ python3 dsxs.py -u "http://public-firing-range.appspot.com/address/location.has
h/replace"
Damn Small XSS Scanner (DSXS) < 100 LoC (Lines of Code) #v0.4a
 by: Miroslav Stampar (@stamparm)

 (i) page itself appears to be XSS vulnerable (DOM)
  (o) ...<script>
      var payload = window.location.hash.substr(1);location.replace(payload); 

    </script>...
 (x) no usable GET/POST parameters found

scan results: possible vulnerabilities found

Tests

The tests/ directory holds a regression suite that runs the real CLI against deterministic localhost fixtures - no third party target is ever contacted:

$ python3 -m unittest discover -s tests

Set DSXS_ORACLE_JOBS to cap how many browsers the oracle runs at once (it defaults to the CPU count, up to four); each one is a full browser process, so memory is usually the binding constraint.

Besides one fixture per supported context (and per non-vulnerable counterpart), the suite contains a ground truth oracle: if a Chromium/Chrome binary is available, every fixture is additionally attacked with real breakout payloads inside a headless browser, and DSXS' verdict is required to match whatever the browser actually executed. The DOM XSS sinks are validated the same way, with the payload delivered through the fragment or the query string exactly as a browser hands it to the page (i.e. percent encoded and undecoded).

Requirements

Python version 3.x is required for running this program. Running the test suite additionally needs openssl (for the throwaway TLS certificate) and, for the browser oracle, an installed Chromium/Chrome (skipped automatically when missing).

About

Damn Small XSS Scanner

Resources

Stars

429 stars

Watchers

26 watching

Forks

Releases

Packages

Used by

Contributors

Languages