随手挖洞 | 一次捡的逻辑漏洞 CNVD
字数 1894 2025-08-18 11:36:53
逻辑漏洞挖掘实战教学:水平越权与账号接管漏洞分析
漏洞概述
本教学文档基于FreeBuf文章《随手挖洞 | 一次捡的逻辑漏洞 CNVD》中描述的实际漏洞案例,详细分析水平越权、账号接管等逻辑漏洞的发现过程和技术细节。
漏洞类型
- 水平越权漏洞:通过修改ID参数可越权访问/修改其他用户数据
- 账号接管漏洞:通过替换token/cookie可获取其他用户权限
- 信息泄露漏洞:通过参数遍历可获取系统敏感信息
漏洞发现过程
1. 目标发现
- 通过安全社区分享获知目标系统存在弱口令:
admin/admin123 - 目标系统为"XX后台管理系统V2.0",注册资本5000万,教育类系统
2. 资产收集
-
主站资产收集:
- 通过F12开发者工具获取网站icon图标
- 将图标路径上传至资产测绘平台进行icon搜索
- 发现约400个相关资产
-
小程序资产收集:
- 发现目标单位有相关微信小程序
- 小程序可能存在与主站相同的漏洞
3. 漏洞验证步骤
水平越权漏洞验证
-
后台管理系统验证:
- 使用弱口令
admin/admin123成功登录系统 - 创建两个测试用户:
- test/test123 (ID:3)
- test1/test123 (ID:2)
- 登录test用户,尝试修改密码为12345678
- 抓包发现请求中包含用户ID参数
- 将ID参数从3(test)改为2(test1)后放包
- 验证结果:
- test1用户无法用原密码test123登录
- 可用新密码12345678登录
- test用户密码未改变
- 使用弱口令
-
小程序越权验证:
- 注册两个小程序账号:
- 账号A (member_id:2622)
- 账号B (member_id:2623)
- 使用账号A修改个人信息并抓包
- 修改member_id参数为2623(账号B)后提交
- 验证账号B信息已被修改
- 注册两个小程序账号:
账号接管漏洞验证
-
Token替换攻击:
- 注册新账号,在"选择报考年份"时拦截请求
- 修改ID参数,观察返回的其他用户token
- 在其他操作中替换为获取的token
- 可成功以其他用户身份访问VIP权限内容
-
Cookie替换攻击:
- 在"我的"页面抓包
- 替换cookie中的token值为其他用户的token
- 可完全接管目标账号
信息泄露漏洞验证
- 通过遍历member_id参数
- 可获取系统中所有学员的个人信息
漏洞原理分析
-
水平越权根本原因:
- 系统仅依赖前端传递的ID参数识别用户身份
- 后端未校验请求中的ID与当前会话用户是否匹配
- 无权限验证机制
-
账号接管根本原因:
- 系统使用可预测/不变的token机制
- token与用户ID绑定关系可被枚举
- 无会话有效性验证机制
-
信息泄露根本原因:
- 无访问控制列表(ACL)机制
- 无速率限制或防遍历机制
漏洞利用影响
-
水平越权影响:
- 可批量修改所有用户数据
- 可篡改其他用户敏感信息
- 可导致数据完整性破坏
-
账号接管影响:
- 可获取高权限账户(VIP/管理员)
- 可查看敏感业务数据
- 可进行进一步攻击
-
信息泄露影响:
- 所有用户隐私数据暴露
- 可能违反数据保护法规
修复建议
-
权限验证机制:
// 伪代码示例:后端权限验证 function updateUserInfo(requestUserId, sessionUserId) { if(requestUserId != sessionUserId) { throw new UnauthorizedException(); } // 继续处理合法请求 } -
会话管理改进:
- 使用随机不可预测的token
- 实现token过期机制
- 每次登录生成新token,使旧token失效
-
参数处理改进:
- 不要直接信任前端传递的ID参数
- 从会话中获取真实用户身份
- 对敏感操作实施二次验证
-
访问控制增强:
- 实现基于角色的访问控制(RBAC)
- 对敏感接口实施速率限制
- 记录所有敏感操作日志
-
临时解决方案:
- 对所有敏感操作添加权限验证
- 禁用或限制ID参数遍历
漏洞挖掘技巧总结
-
资产发现技巧:
- 利用icon等特征进行资产测绘
- 关注目标的小程序、公众号等衍生平台
-
漏洞挖掘方法论:
- 重点关注ID等标识参数
- 测试参数修改对业务逻辑的影响
- 尝试替换cookie/token等认证要素
- 测试参数遍历可能性
-
逻辑漏洞常见触发点:
- 用户身份识别参数(id, userid, member_id等)
- 会话管理要素(cookie, token, session等)
- 业务流程状态参数
防御体系建议
-
安全开发规范:
- 实施最小权限原则
- 默认拒绝所有请求
- 服务端严格校验所有输入
-
安全测试流程:
- 代码审计中重点检查权限验证
- 渗透测试中模拟越权测试
- 自动化测试中加入逻辑漏洞检测
-
监控与响应:
- 监控异常参数修改行为
- 记录完整操作日志
- 建立应急响应机制
总结
本案例展示了逻辑漏洞的典型发现过程,强调了权限验证缺失导致的严重后果。安全开发中必须贯彻"不信任任何用户输入"的原则,所有敏感操作都应实施严格的权限验证和会话管理。