来玩玩pikachu靶场之XSS模块
字数 1618 2025-08-11 22:57:16

XSS漏洞原理与实战教学文档

一、XSS概述

XSS(跨站脚本)全称Cross-Site Scripting,简称为"CSS",为避免与前端层叠样式表的缩写"CSS"冲突,故又称XSS。

XSS分类

  1. 反射型XSS
  2. 存储型XSS
  3. DOM型XSS

XSS漏洞在OWASP TOP10排名中一直属于前三,危害较大。XSS是一种发生在前端浏览器端的漏洞,危害对象主要是前端用户。

漏洞成因

程序对输入和输出没有做合适的处理,导致精心构造的字符输出在前端时被浏览器当作有效代码解析执行。

防御措施

  1. 输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入
  2. 输出转义:根据输出点的位置对输出到前端的内容进行适当转义

二、反射型XSS

反射型XSS(GET)

攻击步骤:

  1. 发现输入框提交后参数出现在URL中(如?message=666)
  2. 尝试直接输入<script>alert("XSS")</script>
  3. 若前端有字符限制,可直接修改URL参数
  4. 提交后成功执行JS代码

特点:

  • 攻击代码在URL中
  • 需要诱骗用户点击特定链接
  • 非持久化攻击

反射型XSS(POST)

与GET的区别:

  1. GET请求在浏览器刷新或回退时无害,POST数据会被重新提交
  2. GET可被书签收藏,POST不行
  3. GET可缓存,POST不行
  4. GET数据在浏览器历史中可见,POST不可见
  5. GET编码只能用ASCII,POST无限制
  6. GET参数在URL中可见,POST在REQUEST BODY中不可见
  7. GET相对不安全,POST相对安全
  8. GET参数长度一般限制2048字符(与WEB服务器相关),POST无限制

攻击步骤:

  1. 发现表单提交后参数不在URL中
  2. 使用工具(Burp或Firefox的Hackbar)修改POST参数
  3. 插入XSS代码如<script>alert(document.cookie)</script>
  4. 提交后成功执行

三、存储型XSS

攻击步骤:

  1. 在留言板等可持久化存储的地方输入XSS代码
  2. <script>alert(document.cookie)</script>
  3. 提交后代码被存储到服务器
  4. 任何用户访问受影响页面时都会触发XSS

特点:

  • 攻击代码存储在服务器上
  • 危害所有访问受影响页面的用户
  • 持久化攻击
  • 常见于留言板、评论系统等

四、DOM型XSS

攻击步骤:

  1. 分析页面源码,查找DOM操作相关代码
  2. 构造特殊payload利用DOM操作
  3. 例如发现<a href='#'>what do you see?</a>这样的代码
  4. 构造payload:#' onclick="alert(666)">
  5. 最终形成:<a href='#' onclick="alert(666)">'>what do you see?</a>

特点:

  • 不经过服务器处理,纯前端漏洞
  • 通过修改DOM环境来执行恶意代码
  • 较难检测和防御

五、XSS绕过技巧

当直接插入<script>标签被过滤时,可尝试以下方法:

  1. 使用HTML事件属性

    <IMG SRC="" onerror="alert('XSS')">
    
    • 利用img标签的onerror事件
    • 当图片加载失败时触发
  2. 其他HTML标签利用

    • body标签的onload事件
    • 其他支持事件处理的HTML元素
  3. 符号测试

    • 逐个测试特殊符号是否被过滤
    • 寻找未被过滤的符号组合
  4. 大小写混合

    <ScRiPt>alert('XSS')</sCrIpT>
    
  5. 编码绕过

    • 使用HTML实体编码
    • URL编码
    • Unicode编码

六、防御建议

  1. 输入验证

    • 严格限制输入内容的类型和格式
    • 过滤特殊字符和脚本标签
  2. 输出编码

    • 根据输出上下文(HTML/JS/CSS/URL)进行适当编码
    • 使用安全的API进行DOM操作
  3. 内容安全策略(CSP)

    • 限制脚本来源
    • 防止内联脚本执行
  4. HttpOnly标志

    • 设置cookie的HttpOnly属性
    • 防止通过document.cookie窃取
  5. 框架安全

    • 使用现代前端框架的安全机制
    • 避免不安全的DOM操作
XSS漏洞原理与实战教学文档 一、XSS概述 XSS(跨站脚本)全称Cross-Site Scripting,简称为"CSS",为避免与前端层叠样式表的缩写"CSS"冲突,故又称XSS。 XSS分类 反射型XSS 存储型XSS DOM型XSS XSS漏洞在OWASP TOP10排名中一直属于前三,危害较大。XSS是一种发生在前端浏览器端的漏洞,危害对象主要是前端用户。 漏洞成因 程序对输入和输出没有做合适的处理,导致精心构造的字符输出在前端时被浏览器当作有效代码解析执行。 防御措施 输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入 输出转义:根据输出点的位置对输出到前端的内容进行适当转义 二、反射型XSS 反射型XSS(GET) 攻击步骤: 发现输入框提交后参数出现在URL中(如?message=666) 尝试直接输入 <script>alert("XSS")</script> 若前端有字符限制,可直接修改URL参数 提交后成功执行JS代码 特点: 攻击代码在URL中 需要诱骗用户点击特定链接 非持久化攻击 反射型XSS(POST) 与GET的区别: GET请求在浏览器刷新或回退时无害,POST数据会被重新提交 GET可被书签收藏,POST不行 GET可缓存,POST不行 GET数据在浏览器历史中可见,POST不可见 GET编码只能用ASCII,POST无限制 GET参数在URL中可见,POST在REQUEST BODY中不可见 GET相对不安全,POST相对安全 GET参数长度一般限制2048字符(与WEB服务器相关),POST无限制 攻击步骤: 发现表单提交后参数不在URL中 使用工具(Burp或Firefox的Hackbar)修改POST参数 插入XSS代码如 <script>alert(document.cookie)</script> 提交后成功执行 三、存储型XSS 攻击步骤: 在留言板等可持久化存储的地方输入XSS代码 如 <script>alert(document.cookie)</script> 提交后代码被存储到服务器 任何用户访问受影响页面时都会触发XSS 特点: 攻击代码存储在服务器上 危害所有访问受影响页面的用户 持久化攻击 常见于留言板、评论系统等 四、DOM型XSS 攻击步骤: 分析页面源码,查找DOM操作相关代码 构造特殊payload利用DOM操作 例如发现 <a href='#'>what do you see?</a> 这样的代码 构造payload: #' onclick="alert(666)"> 最终形成: <a href='#' onclick="alert(666)">'>what do you see?</a> 特点: 不经过服务器处理,纯前端漏洞 通过修改DOM环境来执行恶意代码 较难检测和防御 五、XSS绕过技巧 当直接插入 <script> 标签被过滤时,可尝试以下方法: 使用HTML事件属性 : 利用img标签的onerror事件 当图片加载失败时触发 其他HTML标签利用 : body标签的onload事件 其他支持事件处理的HTML元素 符号测试 : 逐个测试特殊符号是否被过滤 寻找未被过滤的符号组合 大小写混合 : 编码绕过 : 使用HTML实体编码 URL编码 Unicode编码 六、防御建议 输入验证 : 严格限制输入内容的类型和格式 过滤特殊字符和脚本标签 输出编码 : 根据输出上下文(HTML/JS/CSS/URL)进行适当编码 使用安全的API进行DOM操作 内容安全策略(CSP) : 限制脚本来源 防止内联脚本执行 HttpOnly标志 : 设置cookie的HttpOnly属性 防止通过document.cookie窃取 框架安全 : 使用现代前端框架的安全机制 避免不安全的DOM操作