对学校澡堂的漏洞挖掘
字数 1204 2025-08-20 18:17:53
学校澡堂预约系统水平越权漏洞挖掘与分析
漏洞背景
该漏洞存在于某高校澡堂预约系统中,由于疫情限流措施,学生需要通过微信公众号预约洗澡时间。系统存在严重的设计缺陷,导致攻击者可以越权操作他人账号,包括预约澡堂、修改个人信息甚至重置他人密码。
信息搜集阶段
-
目标确认:
- 系统URL:http://xxx.xxx.com:8082/brmclg/
- 开放端口:8080、8081、8082分别对应三个学校的预约系统
- 系统类型:基于云平台的Web应用
-
初步探测:
- 传统漏洞扫描未发现明显漏洞
- 系统未强制要求微信客户端访问,允许常规浏览器访问
漏洞发现过程
1. 用户ID枚举
- 登录系统后生成固定格式的用户ID(如20627)
- 通过与其他用户(如室友)账号对比,发现ID为连续数字(20626、20627)
- 确认ID非随机生成,存在可预测性
2. 水平越权漏洞
澡堂预约功能:
- 预约请求中包含
loginid=20627参数 - 修改该参数为其他用户ID(如20626)可成功为他人预约
- 验证:登录被攻击账号确认预约已生效
个人信息修改功能:
- 修改个人信息请求同样包含用户ID参数
- 通过修改ID可越权修改他人邮箱等敏感信息
3. 密码重置漏洞
- 系统密码重置仅通过邮箱验证
- 结合邮箱修改漏洞:
- 先越权修改目标用户邮箱
- 然后通过"忘记密码"功能重置密码
- 新密码将发送至攻击者控制的邮箱
- 最终可完全接管目标账号
漏洞原理分析
-
会话管理缺陷:
- 系统仅依赖前端传递的用户ID进行身份验证
- 未在服务端校验会话与请求用户ID的匹配性
-
缺乏权限校验:
- 所有功能接口未实施最小权限原则
- 关键操作未验证当前用户是否有权操作目标资源
-
密码重置设计缺陷:
- 仅依赖单因素(邮箱)验证
- 允许未经验证修改关键安全信息(邮箱)
漏洞修复建议
-
会话管理改进:
- 使用服务端生成的会话令牌替代可预测的用户ID
- 每次请求验证会话与操作对象的所属关系
-
权限校验强化:
- 实施基于角色的访问控制(RBAC)
- 关键操作前验证
current_user == target_user
-
密码重置流程加固:
- 增加多因素认证(如短信验证码)
- 修改邮箱等敏感操作需二次验证
- 设置修改安全信息后的冷却期
-
日志与监控:
- 记录所有敏感操作日志
- 设置异常操作告警(如频繁修改他人信息)
渗透测试经验总结
-
信息搜集的扩展性:
- 不仅关注传统资产(域名/IP/端口)
- 还需收集业务逻辑、用户凭证模式等"软信息"
-
业务逻辑测试重点:
- 参数可预测性测试(如用户ID)
- 关键功能接口的权限校验验证
- 数据流完整路径分析(如密码重置流程)
-
漏洞挖掘方法论:
- 传统漏洞扫描无效时转向业务逻辑测试
- 关注"功能交互"而非仅"技术实现"
- 水平越权常源于服务端信任前端传递的参数
该案例展示了即使简单的ID参数篡改也可能导致严重的安全问题,强调了在系统设计中实施纵深防御策略的重要性。