记一次有趣的逻辑漏洞挖洞经历

记一次有趣的逻辑漏洞挖洞经历
最新回答
姊‘妝濃孒

2022-01-10 21:42:56

一次有趣的逻辑漏洞挖洞经历:在线学习系统水平越权漏洞挖掘

在浏览网页时,发现一个对外开放的Edu类在线学习平台(类似MOOC系统),具备注册、登录功能。基于经验判断,权限划分功能模块(如用户数据操作)可能存在逻辑漏洞,遂展开测试并成功发现水平越权漏洞,最终被评定为中危漏洞。

发现过程
  1. 初步探测功能点注册账号后,对系统功能进行全面测试:

    XSS与文件上传测试:在个人信息修改处尝试存储型XSS,在头像上传处测试任意文件上传(未发现漏洞)。

    核心功能分析:发现系统包含“点赞”“收藏”“评论”“笔记”等交互功能,这些功能通常涉及用户数据操作,成为重点测试目标。

  1. 笔记功能抓包分析

    创建笔记:通过Burp Suite拦截请求,发现笔记以JSON格式传输,包含三个参数:

    content(笔记内容)

    resourceId(资源ID,从133开始非连续)

    videoId(视频ID)返回包仅包含操作状态和时间戳,无权限校验字段。

    删除笔记:删除请求中新增id参数(如47),但该ID与用户无关,疑似全站笔记总数递增生成。

  1. 越权漏洞验证

    参数无鉴权:删除请求仅依赖id参数,未校验用户权限或关联性。

    跨账号操作测试

    注册账号B,发表评论并记录其id(如46)。

    使用账号A的删除请求包,将id修改为46并发送,返回成功响应。

    登录账号B确认,评论已被删除。

漏洞成因
  1. ID生成机制缺陷笔记/评论的id采用全站递增模式(如A账号创建笔记ID为47,B账号创建则为48),与用户无关且可预测。

  2. 删除接口无鉴权后端仅通过id定位数据,未校验请求用户与数据所有者的关联性,导致水平越权。例如:

    攻击者可遍历id范围,删除全站用户笔记。

    评论、收藏等功能的删除接口存在同类问题。

漏洞复现步骤
  1. 准备测试账号注册两个账号A和B,确保系统生成不同id的数据(如笔记、评论)。

  2. 抓包分析接口

    创建数据:记录正常请求包格式(如JSON参数)。

    删除数据:提取id参数,观察是否依赖用户身份。

  3. 构造越权请求使用账号A的删除接口,将id替换为账号B的数据ID,发送请求并验证结果。

  4. 确认影响范围检查账号B的个人中心,确认数据是否被删除。

总结与建议
  1. 漏洞本质开发者为简化逻辑,直接通过id操作数据而未校验权限,导致水平越权。此类问题常见于用户资产(如笔记、图片库)的增删改查功能。

  2. 修复方案

    后端鉴权:在删除接口中增加用户身份校验(如userId与id的关联性验证)。

    ID随机化:采用UUID或哈希值替代递增ID,增加预测难度。

    最小权限原则:限制接口操作范围,避免全站数据暴露。

  3. 安全测试建议

    重点关注用户数据操作接口(如删除、修改)。

    测试参数是否依赖用户身份,是否存在越权可能。

    使用不同账号交叉验证权限边界。

此次挖掘再次证明,权限校验是系统安全的核心环节。开发者需避免“重功能轻安全”的思维,安全人员也应持续关注此类逻辑漏洞,提升测试深度。