Pikachu靶场-Cross-Site Scripting
字数 1602 2025-08-11 21:26:33

XSS漏洞详解与实战教学

1. XSS概述

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

XSS分类

  1. 反射型XSS:非持久化,需要欺骗用户点击恶意链接
  2. 存储型XSS:持久化,恶意脚本存储在服务器上
  3. DOM型XSS:通过修改DOM环境在客户端执行,不经过服务器

XSS危害

  • 在OWASP TOP10中一直属于前三
  • 主要危害前端浏览器用户
  • 可窃取用户cookie、会话信息
  • 可进行钓鱼攻击、键盘记录等

防御原则

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

2. 反射型XSS实战

反射型XSS(GET)

  1. 测试输入:'"<>等特殊字符可原样输出,无过滤
  2. 前端限制输入长度时,可通过审查元素修改长度限制
  3. 有效payload:<script>alert(/xss/)</script>
  4. 后台代码通常直接输出用户输入,不做任何处理

反射型XSS(POST)

  1. 需要先登录(如admin/123456)
  2. 登录后直接输入payload:<script>alert(/xss/)</script>
  3. 触发弹窗

3. 存储型XSS实战

  1. 测试输入:'"<>等特殊字符可原样输出
  2. 直接输入payload:<script>alert(/xss/)</script>
  3. 后台代码特点:
    • 对message进行转义(防SQL注入)
    • 将message存入数据库
    • 每次页面加载都会执行存储的恶意脚本
  4. 持久性:每次访问该页面都会触发弹窗

4. DOM型XSS实战

基本DOM型XSS

  1. 输入测试代码'"<>显示与输入不同
  2. 攻击原理:通过getElementById获取值并拼接HTML
  3. 有效payload:
    • '>(鼠标悬停触发)
    • ' onclick="alert('xss')">(点击触发)

DOM型XSS-X

  1. 攻击流程:
    • 输入payload
    • 点击"请说出你的伤心往事"
    • 点击"有些费尽心机..."
    • 触发XSS
  2. 有效payload:
    • '>
    • ' onclick="alert('xss')">

5. XSS盲打

  1. 特点:payload不会在前端显示,只影响后台管理员
  2. 输入常规payload:<script>alert(/xss/)</script>
  3. 管理员在后台查看时会触发XSS

6. XSS过滤绕过技术

大小写绕过

  1. <script>被过滤时,尝试大小写变体:
    • <SCRIPT>alert(/xss/)</sCRIpt>

替代标签

  1. 当script标签被过滤时,使用其他可执行JS的标签:
    • ``
    • ``

7. htmlspecialchars绕过

  1. htmlspecialchars()函数转换:
    • &&amp;
    • "&quot;
    • '&#039;
    • <&lt;
    • >&gt;
  2. 当单引号未被转义时,构造payload:
    • #' onclick='alert(/xss/)

8. href属性XSS

  1. 在a标签的href属性中,可使用javascript伪协议:
    • javascript:alert(/xss/)
  2. 点击链接即可触发

9. JS输出XSS

  1. 输入被赋值给JS变量时,可闭合原有JS代码:
    • </script><script>alert(/xss/)</script>';alert(1);//

防御建议

  1. 对所有用户输入进行严格过滤
  2. 根据输出上下文进行适当的编码/转义
  3. 使用CSP(内容安全策略)限制脚本执行
  4. 设置HttpOnly标志保护cookie
  5. 对富文本内容使用白名单过滤

总结

XSS攻击方式多样,防御需要全面考虑输入输出处理。理解各种XSS类型的原理和利用方式,才能有效防范此类漏洞。

XSS漏洞详解与实战教学 1. XSS概述 XSS(跨站脚本)全称Cross-Site Scripting,简称为"CSS",为避免与前端层叠样式表的缩写"CSS"冲突,故又称XSS。 XSS分类 反射型XSS :非持久化,需要欺骗用户点击恶意链接 存储型XSS :持久化,恶意脚本存储在服务器上 DOM型XSS :通过修改DOM环境在客户端执行,不经过服务器 XSS危害 在OWASP TOP10中一直属于前三 主要危害前端浏览器用户 可窃取用户cookie、会话信息 可进行钓鱼攻击、键盘记录等 防御原则 输入过滤 :对输入进行过滤,不允许可能导致XSS攻击的字符输入 输出转义 :根据输出点的位置对输出到前端的内容进行适当转义 2. 反射型XSS实战 反射型XSS(GET) 测试输入: '"<> 等特殊字符可原样输出,无过滤 前端限制输入长度时,可通过审查元素修改长度限制 有效payload: <script>alert(/xss/)</script> 后台代码通常直接输出用户输入,不做任何处理 反射型XSS(POST) 需要先登录(如admin/123456) 登录后直接输入payload: <script>alert(/xss/)</script> 触发弹窗 3. 存储型XSS实战 测试输入: '"<> 等特殊字符可原样输出 直接输入payload: <script>alert(/xss/)</script> 后台代码特点: 对message进行转义(防SQL注入) 将message存入数据库 每次页面加载都会执行存储的恶意脚本 持久性:每次访问该页面都会触发弹窗 4. DOM型XSS实战 基本DOM型XSS 输入测试代码 '"<> 显示与输入不同 攻击原理:通过 getElementById 获取值并拼接HTML 有效payload: '> (鼠标悬停触发) ' onclick="alert('xss')"> (点击触发) DOM型XSS-X 攻击流程: 输入payload 点击"请说出你的伤心往事" 点击"有些费尽心机..." 触发XSS 有效payload: '> ' onclick="alert('xss')"> 5. XSS盲打 特点:payload不会在前端显示,只影响后台管理员 输入常规payload: <script>alert(/xss/)</script> 管理员在后台查看时会触发XSS 6. XSS过滤绕过技术 大小写绕过 当 <script> 被过滤时,尝试大小写变体: <SCRIPT>alert(/xss/)</sCRIpt> 替代标签 当script标签被过滤时,使用其他可执行JS的标签: `` `` 7. htmlspecialchars绕过 htmlspecialchars() 函数转换: & → &amp; " → &quot; ' → &#039; < → &lt; > → &gt; 当单引号未被转义时,构造payload: #' onclick='alert(/xss/) 8. href属性XSS 在a标签的href属性中,可使用javascript伪协议: javascript:alert(/xss/) 点击链接即可触发 9. JS输出XSS 输入被赋值给JS变量时,可闭合原有JS代码: </script><script>alert(/xss/)</script>';alert(1);// 防御建议 对所有用户输入进行严格过滤 根据输出上下文进行适当的编码/转义 使用CSP(内容安全策略)限制脚本执行 设置HttpOnly标志保护cookie 对富文本内容使用白名单过滤 总结 XSS攻击方式多样,防御需要全面考虑输入输出处理。理解各种XSS类型的原理和利用方式,才能有效防范此类漏洞。