XSS的简要分析
字数 1428 2025-08-11 08:36:26

XSS注入攻击全面解析与防御指南

一、XSS攻击概述

跨站脚本攻击(XSS)是一种将恶意脚本注入到可信网站中的攻击方式,当用户访问被注入的页面时,恶意脚本会在用户浏览器中执行。

二、XSS类型详解

1. DOM型XSS

特点

  • 用户输入参数由前端JavaScript处理
  • 处理结果直接反馈到页面
  • 需要分析源代码中的处理逻辑

攻击方法

  • XSS盲打:插入的恶意代码只有管理员可见
  • 配合nc(netcat)工具抓取cookie
  • 盲插入技术(需进一步研究)

2. 反射型XSS

特点

  • 非持久化攻击
  • 恶意脚本通常通过URL参数传递
  • 需要诱骗用户点击特制链接

3. 存储型XSS

特点

  • 持久化攻击
  • 恶意脚本存储在服务器端
  • 影响所有访问受影响页面的用户

攻击向量

  1. 基本注入:<script>alert(1)</script>
  2. 绕过闭合标签:<textarea></textarea><script>alert(1)</script></textarea>
  3. 利用未闭合标签:<input type="name" value="' + input + '"><script>alert(1)</script>
  4. 利用img标签:`` (不需要引号)

三、XSS绕过技术

1. 大小写绕过

示例

function render (input) {
  input = input.replace(/script/ig, '')
  input = input.toUpperCase()
  return '<h1>' + input + '</h1>'
}

绕过方法

  • 使用大小写混合:<ScRiPt>alert(1)</ScRiPt>
  • 使用双写绕过:<scrscriptipt>alert(1)</scrscriptipt>

2. Unicode编码绕过

方法

  • 使用Unicode编码特殊字符
  • 例如使用ſ(长s)代替s

3. 注释绕过

示例

function render (input) {
  input = input.replace(/[\/'"<]/g, '')
  return `<script>// alert('${input}')</script>`
}

绕过方法

  • 换行注入:\nalert(1)
  • 注释掉原有闭合:');alert(1)//

4. HTML实体编码绕过

示例

function escapeHtml(s) {
  return s.replace(/&/g, '&')
    .replace(/'/g, ''')
    .replace(/"/g, '"')
    .replace(/</g, '<')
    .replace(/>/g, '>')
    .replace(/\//g, '/')
}

绕过方法

  • 利用未过滤的上下文:``

5. JavaScript转义绕过

示例

function escapeJs (s) {
  return String(s)
    .replace(/\\/g, '\\\\')
    .replace(/'/g, '\\\'')
    .replace(/"/g, '\\"')
    .replace(/`/g, '\\`')
    .replace(/</g, '\\74')
    .replace(/>/g, '\\76')
    .replace(/\//g, '\\/')
    .replace(/\n/g, '\\n')
    .replace(/\r/g, '\\r')
    .replace(/\t/g, '\\t')
    .replace(/\f/g, '\\f')
    .replace(/\v/g, '\\v')
    .replace(/\0/g, '\\0')
}

绕过方法

  • 制造偶数个反斜杠:\");alert(1)//
  • 利用URL上下文:javascript:console.log("${s}")

四、高级攻击技术

1. Cookie窃取技术

方法

  • 使用nc监听:nc -lvp 4444
  • 注入代码获取cookie并发送到攻击者服务器
  • 需要声明变量并使用img标签

2. AngularJS ng-include攻击

方法

  • 包含外部恶意文件:ng-include='show_xss.php'
  • show_xss.php是攻击者控制的含有XSS的PHP文件

3. 防火墙绕过技术

方法

  • 多次编码payload
  • 测试防火墙解码次数
  • 使用混合编码方式

五、防御建议

  1. 输入验证和过滤

    • 对所有用户输入进行严格验证
    • 使用白名单而非黑名单
    • 过滤特殊字符和脚本标签
  2. 输出编码

    • 根据输出上下文(HTML, JavaScript, URL等)进行适当编码
    • 使用成熟的编码库而非自行实现
  3. 内容安全策略(CSP)

    • 实施严格的CSP策略
    • 限制内联脚本执行
    • 限制外部资源加载
  4. HttpOnly Cookie

    • 为敏感cookie设置HttpOnly标志
    • 防止JavaScript访问
  5. 框架安全特性

    • 使用现代框架的内置XSS防护
    • 避免直接操作DOM
  6. 定期安全测试

    • 进行渗透测试
    • 使用自动化扫描工具
    • 代码审计

通过理解这些攻击技术和防御方法,开发人员可以更好地保护Web应用免受XSS攻击的威胁。

XSS注入攻击全面解析与防御指南 一、XSS攻击概述 跨站脚本攻击(XSS)是一种将恶意脚本注入到可信网站中的攻击方式,当用户访问被注入的页面时,恶意脚本会在用户浏览器中执行。 二、XSS类型详解 1. DOM型XSS 特点 : 用户输入参数由前端JavaScript处理 处理结果直接反馈到页面 需要分析源代码中的处理逻辑 攻击方法 : XSS盲打:插入的恶意代码只有管理员可见 配合nc(netcat)工具抓取cookie 盲插入技术(需进一步研究) 2. 反射型XSS 特点 : 非持久化攻击 恶意脚本通常通过URL参数传递 需要诱骗用户点击特制链接 3. 存储型XSS 特点 : 持久化攻击 恶意脚本存储在服务器端 影响所有访问受影响页面的用户 攻击向量 : 基本注入: <script>alert(1)</script> 绕过闭合标签: <textarea></textarea><script>alert(1)</script></textarea> 利用未闭合标签: <input type="name" value="' + input + '"><script>alert(1)</script> 利用img标签: `` (不需要引号) 三、XSS绕过技术 1. 大小写绕过 示例 : 绕过方法 : 使用大小写混合: <ScRiPt>alert(1)</ScRiPt> 使用双写绕过: <scrscriptipt>alert(1)</scrscriptipt> 2. Unicode编码绕过 方法 : 使用Unicode编码特殊字符 例如使用ſ(长s)代替s 3. 注释绕过 示例 : 绕过方法 : 换行注入: \nalert(1) 注释掉原有闭合: ');alert(1)// 4. HTML实体编码绕过 示例 : 绕过方法 : 利用未过滤的上下文: `` 5. JavaScript转义绕过 示例 : 绕过方法 : 制造偶数个反斜杠: \");alert(1)// 利用URL上下文: javascript:console.log("${s}") 四、高级攻击技术 1. Cookie窃取技术 方法 : 使用nc监听: nc -lvp 4444 注入代码获取cookie并发送到攻击者服务器 需要声明变量并使用img标签 2. AngularJS ng-include攻击 方法 : 包含外部恶意文件: ng-include='show_xss.php' show_ xss.php是攻击者控制的含有XSS的PHP文件 3. 防火墙绕过技术 方法 : 多次编码payload 测试防火墙解码次数 使用混合编码方式 五、防御建议 输入验证和过滤 对所有用户输入进行严格验证 使用白名单而非黑名单 过滤特殊字符和脚本标签 输出编码 根据输出上下文(HTML, JavaScript, URL等)进行适当编码 使用成熟的编码库而非自行实现 内容安全策略(CSP) 实施严格的CSP策略 限制内联脚本执行 限制外部资源加载 HttpOnly Cookie 为敏感cookie设置HttpOnly标志 防止JavaScript访问 框架安全特性 使用现代框架的内置XSS防护 避免直接操作DOM 定期安全测试 进行渗透测试 使用自动化扫描工具 代码审计 通过理解这些攻击技术和防御方法,开发人员可以更好地保护Web应用免受XSS攻击的威胁。