Pikachu靶场通关之XSS(跨站脚本)
字数 1807 2025-08-15 21:32:26

XSS(跨站脚本)漏洞全面解析与实战指南

一、XSS概述

Cross-Site Scripting简称为"XSS"(为避免与CSS样式表冲突),是一种发生在前端浏览器端的漏洞,危害对象主要是前端用户。在OWASP TOP10漏洞排名中长期位居前三。

XSS主要类型

  1. 反射型XSS:非持久化,需要用户点击特定构造的链接
  2. 存储型XSS:持久化,恶意脚本被存储在服务器上
  3. DOM型XSS:完全在客户端执行,不涉及服务器端

二、XSS漏洞原理

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

防御措施

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

三、XSS实战利用

1. 反射型XSS(GET)

  • 测试方法:输入'"<>等特殊字符观察是否被过滤
  • Payload:<script>alert(/xss/)</script>
  • 特点:后台代码原封不动输出用户输入

2. 反射型XSS(POST)

  • 需要先登录(如admin/123456)
  • 登录后直接输入Payload触发

3. 存储型XSS

  • 测试方法:输入'"<>观察过滤情况
  • Payload:<script>alert(/xss/)</script>
  • 特点:恶意代码被存储在数据库中,每次访问页面都会触发

4. DOM型XSS

  • 特点:完全在客户端执行,不经过服务器
  • Payload 1:'>(鼠标悬停触发)
  • Payload 2:' onclick="alert('xss')">(点击触发)
  • 原理:通过闭合原有标签并插入新标签实现攻击

5. DOM型XSS-X

  • 攻击过程:
    1. 输入Payload
    2. 点击"请说出你的伤心往事"
    3. 点击"有些费尽心机..."
    4. 触发XSS

6. XSS盲打

  • 特点:Payload不会在前端显示,只影响后台管理员
  • 方法:提交常规Payload后,管理员查看后台时触发
  • 后台地址示例:/xssblind/admin_login.php

7. XSS过滤绕过

  • 大小写绕过<SCRIPT>alert(/xss/)</sCRIpt>
  • 替代标签
    • ``
    • ``
  • 原理:当<script>被过滤时,使用其他可执行JS的HTML标签

8. htmlspecialchars绕过

  • htmlspecialchars()函数默认转换:
    • &&amp;
    • "&quot;
    • '&#039;
    • <&lt;
    • >&gt;
  • 绕过方法:当单引号未被转义时使用
    • Payload:#' onclick='alert(/xss/)

9. href输出XSS

  • 当常规方法失效时,使用JavaScript伪协议:
    • Payload:javascript:alert(/xss/)
  • 点击链接即可触发

10. JS输出XSS

  • 方法1:闭合原有script标签
    • Payload:</script><script>alert(/xss/)</script>
  • 方法2:闭合JS语句并注释剩余部分
    • Payload:';alert(1);//

四、高级技巧与防御

常见Payload集合

  1. 基本弹窗:<script>alert(1)</script>
  2. 图片标签:``
  3. SVG标签:<svg onload=alert(1)>
  4. 事件处理:<body onload=alert(1)>
  5. 伪协议:<a href="javascript:alert(1)">click</a>

防御最佳实践

  1. 实施严格的输入验证
  2. 根据上下文使用适当的输出编码
    • HTML实体编码:&lt;, &gt;
    • JavaScript编码:\x3cscript\x3e
    • URL编码:%3Cscript%3E
  3. 使用CSP(Content Security Policy)策略
  4. 设置HttpOnly标志保护cookie
  5. 使用现代框架(如React, Vue)的内置XSS防护

五、总结

XSS漏洞危害严重且形式多样,攻击者可以通过多种方式绕过基础防御。全面防御XSS需要结合输入过滤、输出编码、CSP策略等多层防护措施。开发人员应充分了解各种XSS变种及其利用方式,才能构建真正安全的Web应用。

XSS(跨站脚本)漏洞全面解析与实战指南 一、XSS概述 Cross-Site Scripting简称为"XSS"(为避免与CSS样式表冲突),是一种发生在前端浏览器端的漏洞,危害对象主要是前端用户。在OWASP TOP10漏洞排名中长期位居前三。 XSS主要类型 反射型XSS :非持久化,需要用户点击特定构造的链接 存储型XSS :持久化,恶意脚本被存储在服务器上 DOM型XSS :完全在客户端执行,不涉及服务器端 二、XSS漏洞原理 XSS漏洞形成的主要原因是程序对输入和输出没有做合适的处理,导致精心构造的字符输出在前端时被浏览器当作有效代码解析执行。 防御措施 输入过滤 :对输入进行过滤,不允许可能导致XSS攻击的字符输入 输出转义 :根据输出点的位置对输出到前端的内容进行适当转义 三、XSS实战利用 1. 反射型XSS(GET) 测试方法:输入 '"<> 等特殊字符观察是否被过滤 Payload: <script>alert(/xss/)</script> 特点:后台代码原封不动输出用户输入 2. 反射型XSS(POST) 需要先登录(如admin/123456) 登录后直接输入Payload触发 3. 存储型XSS 测试方法:输入 '"<> 观察过滤情况 Payload: <script>alert(/xss/)</script> 特点:恶意代码被存储在数据库中,每次访问页面都会触发 4. DOM型XSS 特点:完全在客户端执行,不经过服务器 Payload 1: '> (鼠标悬停触发) Payload 2: ' onclick="alert('xss')"> (点击触发) 原理:通过闭合原有标签并插入新标签实现攻击 5. DOM型XSS-X 攻击过程: 输入Payload 点击"请说出你的伤心往事" 点击"有些费尽心机..." 触发XSS 6. XSS盲打 特点:Payload不会在前端显示,只影响后台管理员 方法:提交常规Payload后,管理员查看后台时触发 后台地址示例: /xssblind/admin_login.php 7. XSS过滤绕过 大小写绕过 : <SCRIPT>alert(/xss/)</sCRIpt> 替代标签 : `` `` 原理:当 <script> 被过滤时,使用其他可执行JS的HTML标签 8. htmlspecialchars绕过 htmlspecialchars()函数默认转换: & → &amp; " → &quot; ' → &#039; < → &lt; > → &gt; 绕过方法:当单引号未被转义时使用 Payload: #' onclick='alert(/xss/) 9. href输出XSS 当常规方法失效时,使用JavaScript伪协议: Payload: javascript:alert(/xss/) 点击链接即可触发 10. JS输出XSS 方法1:闭合原有script标签 Payload: </script><script>alert(/xss/)</script> 方法2:闭合JS语句并注释剩余部分 Payload: ';alert(1);// 四、高级技巧与防御 常见Payload集合 基本弹窗: <script>alert(1)</script> 图片标签: `` SVG标签: <svg onload=alert(1)> 事件处理: <body onload=alert(1)> 伪协议: <a href="javascript:alert(1)">click</a> 防御最佳实践 实施严格的输入验证 根据上下文使用适当的输出编码 HTML实体编码: &lt; , &gt; 等 JavaScript编码: \x3cscript\x3e URL编码: %3Cscript%3E 使用CSP(Content Security Policy)策略 设置HttpOnly标志保护cookie 使用现代框架(如React, Vue)的内置XSS防护 五、总结 XSS漏洞危害严重且形式多样,攻击者可以通过多种方式绕过基础防御。全面防御XSS需要结合输入过滤、输出编码、CSP策略等多层防护措施。开发人员应充分了解各种XSS变种及其利用方式,才能构建真正安全的Web应用。