Pikachu靶场-Cross-Site Scripting
字数 1602 2025-08-11 21:26:33
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()函数转换:&→&"→"'→'<→<>→>
- 当单引号未被转义时,构造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类型的原理和利用方式,才能有效防范此类漏洞。