来玩玩pikachu靶场之XSS模块
字数 1618 2025-08-11 22:57:16
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 SRC="" onerror="alert('XSS')">- 利用img标签的onerror事件
- 当图片加载失败时触发
-
其他HTML标签利用:
- body标签的onload事件
- 其他支持事件处理的HTML元素
-
符号测试:
- 逐个测试特殊符号是否被过滤
- 寻找未被过滤的符号组合
-
大小写混合:
<ScRiPt>alert('XSS')</sCrIpT> -
编码绕过:
- 使用HTML实体编码
- URL编码
- Unicode编码
六、防御建议
-
输入验证:
- 严格限制输入内容的类型和格式
- 过滤特殊字符和脚本标签
-
输出编码:
- 根据输出上下文(HTML/JS/CSS/URL)进行适当编码
- 使用安全的API进行DOM操作
-
内容安全策略(CSP):
- 限制脚本来源
- 防止内联脚本执行
-
HttpOnly标志:
- 设置cookie的HttpOnly属性
- 防止通过document.cookie窃取
-
框架安全:
- 使用现代前端框架的安全机制
- 避免不安全的DOM操作