记一次有趣的逻辑漏洞挖洞经历
字数 1299 2025-08-23 18:31:09
逻辑漏洞挖掘教学:越权删除漏洞分析与复现
漏洞概述
本教学文档基于一篇真实的逻辑漏洞挖掘经历,详细分析了一个在线教育平台中存在的水平越权漏洞。攻击者可以利用该漏洞删除其他用户的笔记、评论等数据,尽管不涉及敏感信息,但仍属于中危漏洞。
漏洞发现环境
- 目标系统:一个类似MOOC的在线学习平台
- 系统功能:用户注册、登录、视频学习、笔记记录、评论、收藏、点赞等
- 测试工具:Burp Suite(用于抓包和重放请求)
漏洞发现过程
1. 初步功能测试
- 注册两个测试账号(A账号和B账号)
- 测试常规漏洞点:
- 个人信息修改部分的XSS测试
- 头像上传部分的文件上传测试
- 重点关注"点赞"、"收藏"、"评论"、"笔记"等功能
2. 笔记功能分析
创建笔记流程:
- 在视频右下角点击"记笔记"功能
- 随意输入内容并提交
- 抓取请求包,发现以下关键参数:
{ "content": "笔记内容", "resourceId": "视频ID", "videoId": "视频ID" } - 返回包包含操作状态和时间戳
- 关键发现:
resourceId参数不是从1开始,而是跳跃到133,疑似全局自增ID
3. 删除功能分析
删除笔记流程:
- 在个人中心测试删除笔记功能
- 抓取请求包,发现以下结构:
{ "content": "笔记内容", "resourceId": "视频ID", "videoId": "视频ID", "id": "笔记ID" } - 关键发现:
- 笔记ID与创建时的
resourceId不同 - 删除请求中多了一个
id参数 - 笔记ID似乎是全站所有用户笔记的总数,每次创建自动加1
- 笔记ID与创建时的
4. 漏洞验证
- 使用B账号发表一条评论,记录其ID为46
- 使用A账号的删除请求包,修改
id参数为46 - 重放请求,返回删除成功
- 验证:登录B账号确认评论已被删除
漏洞成因分析
创建逻辑
- 后端接收POST请求
- 直接为笔记分配一个全局自增ID(与用户无关)
- 例如:A账号创建笔记ID为47,下一个用户创建笔记ID必为48
删除逻辑
- 后端接收POST请求
- 仅检查
id参数 - 直接对指定ID的笔记执行删除操作
- 关键问题:没有进行以下验证:
- 请求用户是否有权限删除该笔记
- 笔记内容与ID是否匹配
- 视频ID与笔记是否关联
漏洞利用影响
- 水平越权删除其他用户的笔记、评论等数据
- 通过遍历ID可删除全站所有用户的笔记
- 虽然不涉及密码等敏感信息,但影响平台数据完整性
修复建议
- 权限验证:在删除操作前验证当前用户是否有权限操作目标数据
- 会话关联:将数据与用户会话或用户ID绑定
- 多因素验证:删除操作应验证多个参数的一致性
- 最小权限原则:确保用户只能操作自己的数据
漏洞挖掘技巧总结
- 关注权限边界:所有涉及用户数据的操作都应测试权限控制
- 参数分析:仔细分析每个参数的作用和关联性
- ID序列观察:注意自增ID的规律,全局ID容易导致越权
- 功能交互测试:测试创建、读取、更新、删除(CRUD)全流程
- 多账号验证:使用至少两个账号验证操作边界
扩展思考
- 类似漏洞可能存在于:
- 用户资料修改
- 订单系统
- 社交平台的发帖/评论系统
- 其他可能变种:
- 越权查看(信息泄露)
- 越权修改(数据篡改)
- 越权创建(如以他人名义发布内容)
通过本案例的学习,安全研究人员可以掌握逻辑漏洞挖掘的基本思路和方法,特别是水平越权类漏洞的发现技巧。在实际测试中,应重点关注系统对用户操作的权限控制机制,特别是那些看似"无害"的数据操作功能。