记一次有趣的逻辑漏洞挖洞经历
字数 1299 2025-08-23 18:31:09

逻辑漏洞挖掘教学:越权删除漏洞分析与复现

漏洞概述

本教学文档基于一篇真实的逻辑漏洞挖掘经历,详细分析了一个在线教育平台中存在的水平越权漏洞。攻击者可以利用该漏洞删除其他用户的笔记、评论等数据,尽管不涉及敏感信息,但仍属于中危漏洞。

漏洞发现环境

  • 目标系统:一个类似MOOC的在线学习平台
  • 系统功能:用户注册、登录、视频学习、笔记记录、评论、收藏、点赞等
  • 测试工具:Burp Suite(用于抓包和重放请求)

漏洞发现过程

1. 初步功能测试

  1. 注册两个测试账号(A账号和B账号)
  2. 测试常规漏洞点:
    • 个人信息修改部分的XSS测试
    • 头像上传部分的文件上传测试
  3. 重点关注"点赞"、"收藏"、"评论"、"笔记"等功能

2. 笔记功能分析

创建笔记流程:

  1. 在视频右下角点击"记笔记"功能
  2. 随意输入内容并提交
  3. 抓取请求包,发现以下关键参数:
    {
        "content": "笔记内容",
        "resourceId": "视频ID",
        "videoId": "视频ID"
    }
    
  4. 返回包包含操作状态和时间戳
  5. 关键发现:resourceId参数不是从1开始,而是跳跃到133,疑似全局自增ID

3. 删除功能分析

删除笔记流程:

  1. 在个人中心测试删除笔记功能
  2. 抓取请求包,发现以下结构:
    {
        "content": "笔记内容",
        "resourceId": "视频ID",
        "videoId": "视频ID",
        "id": "笔记ID"
    }
    
  3. 关键发现:
    • 笔记ID与创建时的resourceId不同
    • 删除请求中多了一个id参数
    • 笔记ID似乎是全站所有用户笔记的总数,每次创建自动加1

4. 漏洞验证

  1. 使用B账号发表一条评论,记录其ID为46
  2. 使用A账号的删除请求包,修改id参数为46
  3. 重放请求,返回删除成功
  4. 验证:登录B账号确认评论已被删除

漏洞成因分析

创建逻辑

  1. 后端接收POST请求
  2. 直接为笔记分配一个全局自增ID(与用户无关)
  3. 例如:A账号创建笔记ID为47,下一个用户创建笔记ID必为48

删除逻辑

  1. 后端接收POST请求
  2. 仅检查id参数
  3. 直接对指定ID的笔记执行删除操作
  4. 关键问题:没有进行以下验证:
    • 请求用户是否有权限删除该笔记
    • 笔记内容与ID是否匹配
    • 视频ID与笔记是否关联

漏洞利用影响

  1. 水平越权删除其他用户的笔记、评论等数据
  2. 通过遍历ID可删除全站所有用户的笔记
  3. 虽然不涉及密码等敏感信息,但影响平台数据完整性

修复建议

  1. 权限验证:在删除操作前验证当前用户是否有权限操作目标数据
  2. 会话关联:将数据与用户会话或用户ID绑定
  3. 多因素验证:删除操作应验证多个参数的一致性
  4. 最小权限原则:确保用户只能操作自己的数据

漏洞挖掘技巧总结

  1. 关注权限边界:所有涉及用户数据的操作都应测试权限控制
  2. 参数分析:仔细分析每个参数的作用和关联性
  3. ID序列观察:注意自增ID的规律,全局ID容易导致越权
  4. 功能交互测试:测试创建、读取、更新、删除(CRUD)全流程
  5. 多账号验证:使用至少两个账号验证操作边界

扩展思考

  1. 类似漏洞可能存在于:
    • 用户资料修改
    • 订单系统
    • 社交平台的发帖/评论系统
  2. 其他可能变种:
    • 越权查看(信息泄露)
    • 越权修改(数据篡改)
    • 越权创建(如以他人名义发布内容)

通过本案例的学习,安全研究人员可以掌握逻辑漏洞挖掘的基本思路和方法,特别是水平越权类漏洞的发现技巧。在实际测试中,应重点关注系统对用户操作的权限控制机制,特别是那些看似"无害"的数据操作功能。

逻辑漏洞挖掘教学:越权删除漏洞分析与复现 漏洞概述 本教学文档基于一篇真实的逻辑漏洞挖掘经历,详细分析了一个在线教育平台中存在的水平越权漏洞。攻击者可以利用该漏洞删除其他用户的笔记、评论等数据,尽管不涉及敏感信息,但仍属于中危漏洞。 漏洞发现环境 目标系统:一个类似MOOC的在线学习平台 系统功能:用户注册、登录、视频学习、笔记记录、评论、收藏、点赞等 测试工具:Burp Suite(用于抓包和重放请求) 漏洞发现过程 1. 初步功能测试 注册两个测试账号(A账号和B账号) 测试常规漏洞点: 个人信息修改部分的XSS测试 头像上传部分的文件上传测试 重点关注"点赞"、"收藏"、"评论"、"笔记"等功能 2. 笔记功能分析 创建笔记流程: 在视频右下角点击"记笔记"功能 随意输入内容并提交 抓取请求包,发现以下关键参数: 返回包包含操作状态和时间戳 关键发现: resourceId 参数不是从1开始,而是跳跃到133,疑似全局自增ID 3. 删除功能分析 删除笔记流程: 在个人中心测试删除笔记功能 抓取请求包,发现以下结构: 关键发现: 笔记ID与创建时的 resourceId 不同 删除请求中多了一个 id 参数 笔记ID似乎是全站所有用户笔记的总数,每次创建自动加1 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)全流程 多账号验证 :使用至少两个账号验证操作边界 扩展思考 类似漏洞可能存在于: 用户资料修改 订单系统 社交平台的发帖/评论系统 其他可能变种: 越权查看(信息泄露) 越权修改(数据篡改) 越权创建(如以他人名义发布内容) 通过本案例的学习,安全研究人员可以掌握逻辑漏洞挖掘的基本思路和方法,特别是水平越权类漏洞的发现技巧。在实际测试中,应重点关注系统对用户操作的权限控制机制,特别是那些看似"无害"的数据操作功能。