逻辑让我崩溃之越权姿势分享
字数 1196 2025-08-27 12:33:37

越权漏洞测试的三种高级技巧

0x00 前言

本文详细分析三种越权测试的高级技巧,每种方法都配有实际案例说明。这些方法适用于不同加密场景下的越权测试,能够帮助安全测试人员在复杂环境中发现越权漏洞。

0x01 修改返回包实现越权

应用场景

  • 系统使用加密算法加密请求参数
  • 返回包为明文格式
  • 前端展示依赖返回包中的明文数据

案例详解

测试目标:银行账户系统"我的账户"功能

  1. 正常流程

    • 请求"我的账户"功能(加密POST请求)
    POST /users/cardcenter.do HTTP/1.1
    HOST: 1.1.1.1
    RSA=WEFGH%^UYBF&HF)WHG($@hh9h9HG)FKJHSKGBGIEBUGIBG(&S(GHEW(*GHHG)))
    
    • 返回明文账户信息:
    {
      "body": {
        "Name": "王刚",
        "cardNO": "12345678",
        "value": "24.33",
        "Address": "北京市朝阳区亮马桥",
        "tel": "13333333333"
      }
    }
    
  2. 漏洞利用

    • 修改返回包中的cardNO为其他账户号"62308452"
    • 前端展示修改后的账户信息
    • 点击"账户详情"时,系统使用篡改后的卡号查询
  3. 结果

    • 成功获取他人账户详情:
    {
      "body": {
        "Name": "郭德岗",
        "cardNO": "222222",
        "Type": "CNY",
        "calType": "001",
        "bankAddr": "2334",
        "cardValue": "24.33",
        "Address": "北京市朝阳区亮马桥",
        "tel": "13333333333"
      },
      "sublist": {
        "2222220102": {
          "cardValue": "1000.00"
        }
      }
    }
    

危害

  • 水平越权查询他人敏感信息(卡号、证件号、手机号)
  • 在某些功能点可能实现使用他人银行卡进行缴费等操作

0x02 寻找解密接口实现数据解密

应用场景

  • 请求不加密,POST参数为明文
  • 返回数据中部分字段加密,部分字段明文
  • 前端需要使用的参数返回明文,其他参数为密文

案例详解

测试目标:密码找回功能

  1. 正常流程

    • 使用证件号找回密码,返回部分信息:
    {
      "name": "加密数据1",
      "phone": "加密数据2",
      "id_number": "加密数据3"
    }
    
    • 仅显示"姓名"和"联系方式"的明文
  2. 漏洞发现

    • 在"验证身份"步骤的返回JS代码中发现手机号明文
    • 测试发现可将其他加密参数放入相同位置获取明文
  3. 攻击方法

    1. 对忘记密码功能进行暴力破解,收集所有返回的加密数据
    2. 在验证身份步骤,使用收集的加密数据作为参数
    3. 从返回信息中获取对应明文

危害

  • 可获取所有用户的完整信息(证件号、手机号、姓名、用户名)
  • 形成完整的用户数据字典

0x03 制造错误获取请求结构

应用场景

  • 请求数据为JSON格式
  • 主要参数在data部分进行加密
  • 常规测试无法获取请求结构

案例详解

测试目标:加密API接口

  1. 正常请求

    POST /hello.do HTTP/1.1
    Host: 127.0.0.1
    {
      "_zh": "1324",
      "data": "QWERT+YHFGGi+fgfyefgyef+6/"
    }
    
  2. 测试方法

    • 使用其他接口的data部分替换当前请求的data部分
    • 触发系统报错,返回缺失参数信息
  3. 结果分析

    • 系统返回错误信息指明缺失参数:
    Missing required parameters: name, ID, phone
    
    • 根据报错信息构造明文请求:
    {
      "name": "test1",
      "ID": "123456",
      "phone": "13333333333"
    }
    
    • 测试发现系统接受并处理明文请求

关键点

  1. 确认系统是否接受明文请求并返回明文响应
  2. 通过错误信息获取必要参数名称,减少猜测工作

0x04 总结

方法 适用场景 关键技巧 危害程度
修改返回包 请求加密,返回明文 篡改返回数据影响后续请求 高(可获取他人信息并操作)
寻找解密接口 返回部分字段加密 利用系统自身的解密机制 高(可获取完整用户数据)
制造错误 请求结构未知 通过错误信息反推参数结构 中高(取决于获取的信息量)

这三种方法针对不同加密场景提供了有效的越权测试思路,在实际测试中可根据系统特点选择合适的方法或组合使用。

越权漏洞测试的三种高级技巧 0x00 前言 本文详细分析三种越权测试的高级技巧,每种方法都配有实际案例说明。这些方法适用于不同加密场景下的越权测试,能够帮助安全测试人员在复杂环境中发现越权漏洞。 0x01 修改返回包实现越权 应用场景 系统使用加密算法加密请求参数 返回包为明文格式 前端展示依赖返回包中的明文数据 案例详解 测试目标 :银行账户系统"我的账户"功能 正常流程 : 请求"我的账户"功能(加密POST请求) 返回明文账户信息: 漏洞利用 : 修改返回包中的 cardNO 为其他账户号"62308452" 前端展示修改后的账户信息 点击"账户详情"时,系统使用篡改后的卡号查询 结果 : 成功获取他人账户详情: 危害 水平越权查询他人敏感信息(卡号、证件号、手机号) 在某些功能点可能实现使用他人银行卡进行缴费等操作 0x02 寻找解密接口实现数据解密 应用场景 请求不加密,POST参数为明文 返回数据中部分字段加密,部分字段明文 前端需要使用的参数返回明文,其他参数为密文 案例详解 测试目标 :密码找回功能 正常流程 : 使用证件号找回密码,返回部分信息: 仅显示"姓名"和"联系方式"的明文 漏洞发现 : 在"验证身份"步骤的返回JS代码中发现手机号明文 测试发现可将其他加密参数放入相同位置获取明文 攻击方法 : 对忘记密码功能进行暴力破解,收集所有返回的加密数据 在验证身份步骤,使用收集的加密数据作为参数 从返回信息中获取对应明文 危害 可获取所有用户的完整信息(证件号、手机号、姓名、用户名) 形成完整的用户数据字典 0x03 制造错误获取请求结构 应用场景 请求数据为JSON格式 主要参数在data部分进行加密 常规测试无法获取请求结构 案例详解 测试目标 :加密API接口 正常请求 : 测试方法 : 使用其他接口的data部分替换当前请求的data部分 触发系统报错,返回缺失参数信息 结果分析 : 系统返回错误信息指明缺失参数: 根据报错信息构造明文请求: 测试发现系统接受并处理明文请求 关键点 确认系统是否接受明文请求并返回明文响应 通过错误信息获取必要参数名称,减少猜测工作 0x04 总结 | 方法 | 适用场景 | 关键技巧 | 危害程度 | |------|----------|----------|----------| | 修改返回包 | 请求加密,返回明文 | 篡改返回数据影响后续请求 | 高(可获取他人信息并操作) | | 寻找解密接口 | 返回部分字段加密 | 利用系统自身的解密机制 | 高(可获取完整用户数据) | | 制造错误 | 请求结构未知 | 通过错误信息反推参数结构 | 中高(取决于获取的信息量) | 这三种方法针对不同加密场景提供了有效的越权测试思路,在实际测试中可根据系统特点选择合适的方法或组合使用。