对学校澡堂的漏洞挖掘
字数 1204 2025-08-20 18:17:53

学校澡堂预约系统水平越权漏洞挖掘与分析

漏洞背景

该漏洞存在于某高校澡堂预约系统中,由于疫情限流措施,学生需要通过微信公众号预约洗澡时间。系统存在严重的设计缺陷,导致攻击者可以越权操作他人账号,包括预约澡堂、修改个人信息甚至重置他人密码。

信息搜集阶段

  1. 目标确认

    • 系统URL:http://xxx.xxx.com:8082/brmclg/
    • 开放端口:8080、8081、8082分别对应三个学校的预约系统
    • 系统类型:基于云平台的Web应用
  2. 初步探测

    • 传统漏洞扫描未发现明显漏洞
    • 系统未强制要求微信客户端访问,允许常规浏览器访问

漏洞发现过程

1. 用户ID枚举

  • 登录系统后生成固定格式的用户ID(如20627)
  • 通过与其他用户(如室友)账号对比,发现ID为连续数字(20626、20627)
  • 确认ID非随机生成,存在可预测性

2. 水平越权漏洞

澡堂预约功能

  • 预约请求中包含loginid=20627参数
  • 修改该参数为其他用户ID(如20626)可成功为他人预约
  • 验证:登录被攻击账号确认预约已生效

个人信息修改功能

  • 修改个人信息请求同样包含用户ID参数
  • 通过修改ID可越权修改他人邮箱等敏感信息

3. 密码重置漏洞

  • 系统密码重置仅通过邮箱验证
  • 结合邮箱修改漏洞:
    1. 先越权修改目标用户邮箱
    2. 然后通过"忘记密码"功能重置密码
    3. 新密码将发送至攻击者控制的邮箱
  • 最终可完全接管目标账号

漏洞原理分析

  1. 会话管理缺陷

    • 系统仅依赖前端传递的用户ID进行身份验证
    • 未在服务端校验会话与请求用户ID的匹配性
  2. 缺乏权限校验

    • 所有功能接口未实施最小权限原则
    • 关键操作未验证当前用户是否有权操作目标资源
  3. 密码重置设计缺陷

    • 仅依赖单因素(邮箱)验证
    • 允许未经验证修改关键安全信息(邮箱)

漏洞修复建议

  1. 会话管理改进

    • 使用服务端生成的会话令牌替代可预测的用户ID
    • 每次请求验证会话与操作对象的所属关系
  2. 权限校验强化

    • 实施基于角色的访问控制(RBAC)
    • 关键操作前验证current_user == target_user
  3. 密码重置流程加固

    • 增加多因素认证(如短信验证码)
    • 修改邮箱等敏感操作需二次验证
    • 设置修改安全信息后的冷却期
  4. 日志与监控

    • 记录所有敏感操作日志
    • 设置异常操作告警(如频繁修改他人信息)

渗透测试经验总结

  1. 信息搜集的扩展性

    • 不仅关注传统资产(域名/IP/端口)
    • 还需收集业务逻辑、用户凭证模式等"软信息"
  2. 业务逻辑测试重点

    • 参数可预测性测试(如用户ID)
    • 关键功能接口的权限校验验证
    • 数据流完整路径分析(如密码重置流程)
  3. 漏洞挖掘方法论

    • 传统漏洞扫描无效时转向业务逻辑测试
    • 关注"功能交互"而非仅"技术实现"
    • 水平越权常源于服务端信任前端传递的参数

该案例展示了即使简单的ID参数篡改也可能导致严重的安全问题,强调了在系统设计中实施纵深防御策略的重要性。

学校澡堂预约系统水平越权漏洞挖掘与分析 漏洞背景 该漏洞存在于某高校澡堂预约系统中,由于疫情限流措施,学生需要通过微信公众号预约洗澡时间。系统存在严重的设计缺陷,导致攻击者可以越权操作他人账号,包括预约澡堂、修改个人信息甚至重置他人密码。 信息搜集阶段 目标确认 : 系统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参数篡改也可能导致严重的安全问题,强调了在系统设计中实施纵深防御策略的重要性。