【漏洞案例】三个XSS案例带你拓宽挖洞思路
字数 1594 2025-09-23 19:27:46
XSS漏洞挖掘实战案例教学文档
1. XSS漏洞概述
XSS(跨站脚本攻击)是一种常见的Web安全漏洞,攻击者能够在受害者的浏览器中执行恶意脚本。XSS漏洞具有以下特点:
- 学习门槛低,适合安全入门
- 挖掘范围广,几乎所有输入输出点都可能存在
- 危害程度从低危到高危不等
2. 文件上传型XSS案例
2.1 漏洞发现过程
- 目标网站:某教育系统
- 攻击路径:个人信息->单位logo上传功能
- 技术细节:
- 上传接口:
/api/app-api/infra/file/upload - 修改请求参数:
- 文件名改为
xx.html - 文件内容为
<script>alert(1)</script>
- 文件名改为
- 服务器返回文件存储路径
- 直接访问上传的HTML文件触发XSS
- 上传接口:
2.2 漏洞原理
- 文件上传功能未对文件类型和内容进行严格过滤
- 服务器直接存储并允许执行HTML文件中的脚本
- 文件访问权限控制不严
2.3 修复建议
- 限制上传文件类型为图片格式
- 对上传文件内容进行检查
- 设置上传文件的访问权限
- 对HTML文件进行特殊处理或禁止上传
3. 存储桶配置不当型XSS案例
3.1 漏洞发现过程
- 目标系统:某管理系统
- 初始访问:
- 账号:admin
- 密码:空(通过JS审计发现的逻辑漏洞)
- 攻击路径:
- 用户管理处点击用户头像,获取头像URL
- 发现Host为
obs.xxx.xxx:10443 - 直接访问
https://obs.xxx.xxx:10443/xxxxx/发现存储桶可列目录 - 使用PUT方法写入HTML文件:
<script>alert(1)</script> - 访问
https://obs.xxx.xxx:10443/xxxxx/spike.html触发XSS
3.2 漏洞原理
- 云存储桶配置不当导致:
- 匿名访问
- 目录列表
- 文件写入权限
- 组合漏洞:
- 登录绕过(空密码)
- 存储桶列目录
- 任意文件写入
- XSS执行
3.3 修复建议
- 加强认证机制,禁止空密码
- 配置存储桶访问权限:
- 禁止匿名访问
- 关闭目录列表
- 限制写入权限
- 对存储内容进行安全扫描
- 设置CSP等浏览器安全策略
4. 站内信存储型XSS案例
4.1 漏洞发现过程
- 目标功能:站内信系统
- 攻击路径:
- 在发送站内信的"主题"字段插入XSS payload
- 返回发件箱查看已发送邮件
- 主题字段未过滤导致XSS执行
4.2 漏洞原理
- 用户输入未经过滤直接存储并显示
- 输出时未进行HTML实体编码
- 前后端均缺乏有效的输入验证
4.3 修复建议
- 对所有用户输入进行过滤和转义
- 实施严格的输出编码
- 使用安全的富文本处理库
- 设置Content Security Policy
5. XSS漏洞挖掘方法论
5.1 挖掘思路
- 寻找所有用户输入点:
- 表单输入
- URL参数
- 文件上传
- HTTP头
- 追踪数据流向:
- 存储到数据库
- 写入文件
- 反射到页面
- 测试输出点:
- HTML正文
- JavaScript代码
- 属性值
- CSS样式
5.2 常用测试payload
<script>alert(1)</script>
<svg onload=alert(1)>
"><script>alert(1)</script>
javascript:alert(1)
5.3 高级技巧
- 结合其他漏洞:
- 文件上传+HTML执行
- 存储桶配置+XSS
- CSRF+XSS
- 绕过过滤:
- 大小写变异
- 编码绕过
- 利用HTML5新特性
- 持久化攻击:
- 存储型XSS
- DOM-based XSS
6. 防御措施总结
-
输入验证:
- 白名单过滤
- 数据类型检查
- 长度限制
-
输出编码:
- HTML实体编码
- JavaScript编码
- URL编码
-
安全配置:
- 设置HttpOnly标志
- 实施Content Security Policy
- 禁用危险的内联脚本
-
安全开发:
- 使用安全的框架和模板引擎
- 定期安全培训
- 代码审计和安全测试
7. 总结
通过这三个案例可以看出XSS漏洞的广泛存在形式和多样化的攻击场景。安全人员应当:
- 保持对XSS漏洞的高度敏感
- 掌握多种挖掘技巧
- 理解漏洞背后的根本原因
- 能够提出有效的修复方案
XSS漏洞虽然基础,但变化多端,需要安全人员持续学习和实践。