Pikachu靶场通关之XSS(跨站脚本)
字数 1807 2025-08-15 21:32:26
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()函数默认转换:
&→&"→"'→'<→<>→>
- 绕过方法:当单引号未被转义时使用
- Payload:
#' onclick='alert(/xss/)
- Payload:
9. href输出XSS
- 当常规方法失效时,使用JavaScript伪协议:
- Payload:
javascript:alert(/xss/)
- Payload:
- 点击链接即可触发
10. JS输出XSS
- 方法1:闭合原有script标签
- Payload:
</script><script>alert(/xss/)</script>
- Payload:
- 方法2:闭合JS语句并注释剩余部分
- Payload:
';alert(1);//
- Payload:
四、高级技巧与防御
常见Payload集合
- 基本弹窗:
<script>alert(1)</script> - 图片标签:``
- SVG标签:
<svg onload=alert(1)> - 事件处理:
<body onload=alert(1)> - 伪协议:
<a href="javascript:alert(1)">click</a>
防御最佳实践
- 实施严格的输入验证
- 根据上下文使用适当的输出编码
- HTML实体编码:
<,>等 - JavaScript编码:
\x3cscript\x3e - URL编码:
%3Cscript%3E
- HTML实体编码:
- 使用CSP(Content Security Policy)策略
- 设置HttpOnly标志保护cookie
- 使用现代框架(如React, Vue)的内置XSS防护
五、总结
XSS漏洞危害严重且形式多样,攻击者可以通过多种方式绕过基础防御。全面防御XSS需要结合输入过滤、输出编码、CSP策略等多层防护措施。开发人员应充分了解各种XSS变种及其利用方式,才能构建真正安全的Web应用。