2022-01-10 21:42:56
一次有趣的逻辑漏洞挖洞经历:在线学习系统水平越权漏洞挖掘
在浏览网页时,发现一个对外开放的Edu类在线学习平台(类似MOOC系统),具备注册、登录功能。基于经验判断,权限划分功能模块(如用户数据操作)可能存在逻辑漏洞,遂展开测试并成功发现水平越权漏洞,最终被评定为中危漏洞。
发现过程XSS与文件上传测试:在个人信息修改处尝试存储型XSS,在头像上传处测试任意文件上传(未发现漏洞)。
核心功能分析:发现系统包含“点赞”“收藏”“评论”“笔记”等交互功能,这些功能通常涉及用户数据操作,成为重点测试目标。

创建笔记:通过Burp Suite拦截请求,发现笔记以JSON格式传输,包含三个参数:
content(笔记内容)
resourceId(资源ID,从133开始非连续)
videoId(视频ID)返回包仅包含操作状态和时间戳,无权限校验字段。
删除笔记:删除请求中新增id参数(如47),但该ID与用户无关,疑似全站笔记总数递增生成。

参数无鉴权:删除请求仅依赖id参数,未校验用户权限或关联性。
跨账号操作测试:
注册账号B,发表评论并记录其id(如46)。
使用账号A的删除请求包,将id修改为46并发送,返回成功响应。
登录账号B确认,评论已被删除。

ID生成机制缺陷笔记/评论的id采用全站递增模式(如A账号创建笔记ID为47,B账号创建则为48),与用户无关且可预测。
删除接口无鉴权后端仅通过id定位数据,未校验请求用户与数据所有者的关联性,导致水平越权。例如:
攻击者可遍历id范围,删除全站用户笔记。
评论、收藏等功能的删除接口存在同类问题。
准备测试账号注册两个账号A和B,确保系统生成不同id的数据(如笔记、评论)。
抓包分析接口
创建数据:记录正常请求包格式(如JSON参数)。
删除数据:提取id参数,观察是否依赖用户身份。
构造越权请求使用账号A的删除接口,将id替换为账号B的数据ID,发送请求并验证结果。
确认影响范围检查账号B的个人中心,确认数据是否被删除。
漏洞本质开发者为简化逻辑,直接通过id操作数据而未校验权限,导致水平越权。此类问题常见于用户资产(如笔记、图片库)的增删改查功能。
修复方案
后端鉴权:在删除接口中增加用户身份校验(如userId与id的关联性验证)。
ID随机化:采用UUID或哈希值替代递增ID,增加预测难度。
最小权限原则:限制接口操作范围,避免全站数据暴露。
安全测试建议
重点关注用户数据操作接口(如删除、修改)。
测试参数是否依赖用户身份,是否存在越权可能。
使用不同账号交叉验证权限边界。

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