记一次逻辑漏洞挖掘
字数 1102 2025-08-06 08:35:27
逻辑漏洞挖掘实战:预约系统越权漏洞分析
漏洞发现背景
本次漏洞挖掘针对的是一个预约系统,主要目标是寻找越权访问漏洞。越权漏洞通常分为水平越权和垂直越权两种类型,本次发现的主要是水平越权漏洞,即能够访问其他用户的预约信息。
初步测试流程
-
常规测试方法:
- 首先输入测试信息进行预约
- 查看"我的预约"功能获取自己的预约信息
- 对查看预约信息的请求进行抓包分析
-
参数加密发现:
- 请求包中的
id和userid参数采用了Base64编码 - 进一步解码后发现参数实际上经过了二次加密处理
- 由于加密算法未知,直接解密尝试失败
- 请求包中的
关键突破点
-
删除功能分析:
- 删除预约功能的请求参数未加密
- 发现
id为6位数字格式 - 通过替换
id值可实现越权查看他人信息,但userid固定无法绕过
-
修改功能漏洞:
- 预约提交后可进行修改操作
- 修改请求的包体参数未加密
- 修改后的提交请求又变为加密参数
- 响应包会跳转到修改预约信息的界面
漏洞利用方法
-
参数篡改测试:
- 修改
appid后参数可正常返回 - 其他参数修改会导致错误
- 将
appid后数字改为目标id数字
- 修改
-
前端源码分析:
- 跳转后页面源码显示
appid加密参数已变为目标id的加密形式 - 系统自动完成了加密过程
- 跳转后页面源码显示
-
自动化利用:
- 编写脚本批量遍历
id参数 - 利用系统自动加密机制生成有效请求
- 成功实现越权查看他人预约信息
- 编写脚本批量遍历
技术要点总结
-
加密参数处理:
- 系统在不同功能点采用不一致的加密策略
- 修改功能暴露了加密前的原始参数
- 系统自动加密机制可被利用来生成有效加密参数
-
逻辑缺陷:
- 修改功能作为中间步骤未进行完整权限验证
- 前端跳转携带了敏感参数且可被篡改
- 加密机制存在设计缺陷,可通过特定路径绕过
防御建议
-
权限验证:
- 所有涉及用户数据的操作都应进行严格的权限检查
- 前后端均需验证用户与数据的归属关系
-
加密策略:
- 统一所有功能的参数加密方式
- 避免暴露原始ID或使用可预测的加密方式
- 考虑使用会话相关的动态加密密钥
-
业务流程:
- 修改功能应直接使用加密后的参数
- 避免在跳转过程中携带可篡改的敏感参数
- 关键操作应采用多因素验证机制
-
监控措施:
- 对异常ID访问模式进行监控
- 记录所有敏感操作的完整日志
漏洞挖掘经验
- 全面测试:不局限于单一功能点,需测试所有相关业务流程
- 参数分析:关注不同功能间参数处理的差异
- 流程跳转:特别注意页面跳转过程中携带的参数
- 自动化辅助:合理使用脚本提高测试效率
此案例展示了即使系统采用了加密措施,如果业务流程存在逻辑缺陷,仍然可能导致严重的安全问题。安全设计需要从整体流程考虑,而非单纯依赖加密等单点防护措施。