随手挖洞 | 一次捡的逻辑漏洞 CNVD
字数 1894 2025-08-18 11:36:53

逻辑漏洞挖掘实战教学:水平越权与账号接管漏洞分析

漏洞概述

本教学文档基于FreeBuf文章《随手挖洞 | 一次捡的逻辑漏洞 CNVD》中描述的实际漏洞案例,详细分析水平越权、账号接管等逻辑漏洞的发现过程和技术细节。

漏洞类型

  1. 水平越权漏洞:通过修改ID参数可越权访问/修改其他用户数据
  2. 账号接管漏洞:通过替换token/cookie可获取其他用户权限
  3. 信息泄露漏洞:通过参数遍历可获取系统敏感信息

漏洞发现过程

1. 目标发现

  • 通过安全社区分享获知目标系统存在弱口令:admin/admin123
  • 目标系统为"XX后台管理系统V2.0",注册资本5000万,教育类系统

2. 资产收集

  1. 主站资产收集

    • 通过F12开发者工具获取网站icon图标
    • 将图标路径上传至资产测绘平台进行icon搜索
    • 发现约400个相关资产
  2. 小程序资产收集

    • 发现目标单位有相关微信小程序
    • 小程序可能存在与主站相同的漏洞

3. 漏洞验证步骤

水平越权漏洞验证

  1. 后台管理系统验证

    • 使用弱口令admin/admin123成功登录系统
    • 创建两个测试用户:
      • test/test123 (ID:3)
      • test1/test123 (ID:2)
    • 登录test用户,尝试修改密码为12345678
    • 抓包发现请求中包含用户ID参数
    • 将ID参数从3(test)改为2(test1)后放包
    • 验证结果:
      • test1用户无法用原密码test123登录
      • 可用新密码12345678登录
      • test用户密码未改变
  2. 小程序越权验证

    • 注册两个小程序账号:
      • 账号A (member_id:2622)
      • 账号B (member_id:2623)
    • 使用账号A修改个人信息并抓包
    • 修改member_id参数为2623(账号B)后提交
    • 验证账号B信息已被修改

账号接管漏洞验证

  1. Token替换攻击

    • 注册新账号,在"选择报考年份"时拦截请求
    • 修改ID参数,观察返回的其他用户token
    • 在其他操作中替换为获取的token
    • 可成功以其他用户身份访问VIP权限内容
  2. Cookie替换攻击

    • 在"我的"页面抓包
    • 替换cookie中的token值为其他用户的token
    • 可完全接管目标账号

信息泄露漏洞验证

  • 通过遍历member_id参数
  • 可获取系统中所有学员的个人信息

漏洞原理分析

  1. 水平越权根本原因

    • 系统仅依赖前端传递的ID参数识别用户身份
    • 后端未校验请求中的ID与当前会话用户是否匹配
    • 无权限验证机制
  2. 账号接管根本原因

    • 系统使用可预测/不变的token机制
    • token与用户ID绑定关系可被枚举
    • 无会话有效性验证机制
  3. 信息泄露根本原因

    • 无访问控制列表(ACL)机制
    • 无速率限制或防遍历机制

漏洞利用影响

  1. 水平越权影响

    • 可批量修改所有用户数据
    • 可篡改其他用户敏感信息
    • 可导致数据完整性破坏
  2. 账号接管影响

    • 可获取高权限账户(VIP/管理员)
    • 可查看敏感业务数据
    • 可进行进一步攻击
  3. 信息泄露影响

    • 所有用户隐私数据暴露
    • 可能违反数据保护法规

修复建议

  1. 权限验证机制

    // 伪代码示例:后端权限验证
    function updateUserInfo(requestUserId, sessionUserId) {
        if(requestUserId != sessionUserId) {
            throw new UnauthorizedException();
        }
        // 继续处理合法请求
    }
    
  2. 会话管理改进

    • 使用随机不可预测的token
    • 实现token过期机制
    • 每次登录生成新token,使旧token失效
  3. 参数处理改进

    • 不要直接信任前端传递的ID参数
    • 从会话中获取真实用户身份
    • 对敏感操作实施二次验证
  4. 访问控制增强

    • 实现基于角色的访问控制(RBAC)
    • 对敏感接口实施速率限制
    • 记录所有敏感操作日志
  5. 临时解决方案

    • 对所有敏感操作添加权限验证
    • 禁用或限制ID参数遍历

漏洞挖掘技巧总结

  1. 资产发现技巧

    • 利用icon等特征进行资产测绘
    • 关注目标的小程序、公众号等衍生平台
  2. 漏洞挖掘方法论

    • 重点关注ID等标识参数
    • 测试参数修改对业务逻辑的影响
    • 尝试替换cookie/token等认证要素
    • 测试参数遍历可能性
  3. 逻辑漏洞常见触发点

    • 用户身份识别参数(id, userid, member_id等)
    • 会话管理要素(cookie, token, session等)
    • 业务流程状态参数

防御体系建议

  1. 安全开发规范

    • 实施最小权限原则
    • 默认拒绝所有请求
    • 服务端严格校验所有输入
  2. 安全测试流程

    • 代码审计中重点检查权限验证
    • 渗透测试中模拟越权测试
    • 自动化测试中加入逻辑漏洞检测
  3. 监控与响应

    • 监控异常参数修改行为
    • 记录完整操作日志
    • 建立应急响应机制

总结

本案例展示了逻辑漏洞的典型发现过程,强调了权限验证缺失导致的严重后果。安全开发中必须贯彻"不信任任何用户输入"的原则,所有敏感操作都应实施严格的权限验证和会话管理。

逻辑漏洞挖掘实战教学:水平越权与账号接管漏洞分析 漏洞概述 本教学文档基于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/管理员) 可查看敏感业务数据 可进行进一步攻击 信息泄露影响 : 所有用户隐私数据暴露 可能违反数据保护法规 修复建议 权限验证机制 : 会话管理改进 : 使用随机不可预测的token 实现token过期机制 每次登录生成新token,使旧token失效 参数处理改进 : 不要直接信任前端传递的ID参数 从会话中获取真实用户身份 对敏感操作实施二次验证 访问控制增强 : 实现基于角色的访问控制(RBAC) 对敏感接口实施速率限制 记录所有敏感操作日志 临时解决方案 : 对所有敏感操作添加权限验证 禁用或限制ID参数遍历 漏洞挖掘技巧总结 资产发现技巧 : 利用icon等特征进行资产测绘 关注目标的小程序、公众号等衍生平台 漏洞挖掘方法论 : 重点关注ID等标识参数 测试参数修改对业务逻辑的影响 尝试替换cookie/token等认证要素 测试参数遍历可能性 逻辑漏洞常见触发点 : 用户身份识别参数(id, userid, member_ id等) 会话管理要素(cookie, token, session等) 业务流程状态参数 防御体系建议 安全开发规范 : 实施最小权限原则 默认拒绝所有请求 服务端严格校验所有输入 安全测试流程 : 代码审计中重点检查权限验证 渗透测试中模拟越权测试 自动化测试中加入逻辑漏洞检测 监控与响应 : 监控异常参数修改行为 记录完整操作日志 建立应急响应机制 总结 本案例展示了逻辑漏洞的典型发现过程,强调了权限验证缺失导致的严重后果。安全开发中必须贯彻"不信任任何用户输入"的原则,所有敏感操作都应实施严格的权限验证和会话管理。