挖洞经验 | 如何发现更多的IDOR漏洞(越权漏洞)
字数 1859 2025-08-18 11:39:11

深入理解与挖掘IDOR漏洞(越权漏洞)的全面指南

一、IDOR漏洞概述

IDOR(Insecure Direct Object Reference)即"不安全的直接对象引用",属于越权漏洞(Broken Access Control)范畴,也被归类为逻辑漏洞或访问控制漏洞。

核心特征:当应用程序基于用户提供的输入对象进行访问时,未进行适当的权限验证,导致用户可以访问或操作未授权的资源。

二、IDOR漏洞的多样化表现形式

1. 传统数字ID型

  • 通过增减或切换数字ID号访问未授权资源
  • 示例:/api/userinfo?id=123/api/userinfo?id=124

2. 编码/哈希ID型

  • 应用程序使用编码或哈希处理过的ID号
  • 可能通过解码或分析生成模式来预测其他ID

3. 间接引用型

  • 通过一个接口获取另一个接口所需的ID
  • 示例模式:
    1. 通过/api_v1/messages?user_id=ANOTHER_USERS_ID获取会话ID列表
    2. 使用获取的会话ID访问/api_v1/messages?conversation_id=SOME_RANDOM_ID

4. 无显式ID要求型

  • 应用程序在请求中不显式要求ID参数
  • 尝试添加ID参数可能暴露漏洞

三、高级IDOR挖掘技术

1. 编码/哈希ID分析技术

  • 解码尝试:对编码ID尝试base64、URL编码等常见解码方式
  • 生成模式分析
    • 注册多个账户分析ID生成规律
    • 检查ID是否使用低熵算法生成(可预测)
  • 信息泄露途径
    • 公开页面(用户资料等)
    • Referer头信息
    • 其他API接口响应

2. ID创建影响技术

  • 当ID不可预测时,关注:
    • 资源创建过程中ID的生成方式
    • 资源间的关联关系建立机制
    • 尝试通过创建操作影响ID分配

3. 参数注入技术

  • 添加未请求的ID参数

    • 原始请求:GET /api_v1/messages
    • 测试请求:GET /api_v1/messages?user_id=ANOTHER_USERS_ID
  • HTTP参数污染(HPP)

    • 测试方法:
      GET /api_v1/messages?user_id=VALID_ID&user_id=OTHER_ID
      
    • 变体:
      • 参数顺序变化
      • 数组形式参数:user_ids[]=ID1&user_ids[]=ID2

4. 盲IDOR技术

  • 特征:接口不直接返回请求信息,但会导致:
    • 文件导出内容变化
    • 邮件或通知信息泄露
    • 其他间接信息泄露渠道

5. 请求方法变换

  • 尝试不同HTTP方法:
    • GET ↔ POST ↔ PUT ↔ DELETE ↔ PATCH
  • 特别关注:
    • PUT和POST互换
    • 方法覆盖(如X-HTTP-Method-Override头)

6. 文件类型变换

  • 修改请求的文件类型:
    • 添加.json后缀:/api/userinfo → /api/userinfo.json
    • 修改Accept头
    • 尝试不同内容类型(XML/JSON/CSV等)

四、IDOR漏洞危害提升技术

1. 漏洞危害性评估

  • 高危害IDOR

    • 密码重置/更改功能
    • 账户恢复功能
    • 敏感信息读写操作
  • 低危害IDOR

    • 邮件订阅设置更改
    • 非敏感信息访问

2. 与其他漏洞组合利用

  • 存储型XSS组合

    1. 发现可写型IDOR(如修改用户购物车)
    2. 结合self-XSS payload
    3. 通过IDOR将XSS传播给其他用户
    4. 形成无需交互的存储型XSS
  • 信息泄露组合

    • 通过可读型IDOR获取敏感信息
    • 结合其他漏洞提升攻击链

五、系统化IDOR测试流程

  1. 枚举所有对象引用点

    • 收集所有接受ID参数的端点
    • 包括URL参数、POST数据、头部信息等
  2. ID类型分析

    • 识别ID生成方式(顺序数字、UUID、哈希等)
    • 对编码ID尝试解码
  3. 权限测试矩阵

    • 使用不同权限账户测试同一功能
    • 横向越权(同权限用户间)
    • 纵向越权(不同权限等级间)
  4. 参数变异测试

    • 添加/删除/修改ID参数
    • 参数污染测试
    • 数组/非数组形式转换
  5. 请求变异测试

    • HTTP方法变换
    • 内容类型变换
    • 参数位置变化(URL/POST/Header)
  6. 间接引用测试

    • 通过其他接口获取目标ID
    • 测试ID引用链安全性

六、防御建议

  1. 访问控制

    • 每个请求都进行权限验证
    • 遵循最小权限原则
  2. 不可预测标识符

    • 使用高熵随机标识符(如UUIDv4)
    • 避免使用顺序ID
  3. 间接引用映射

    • 使用临时令牌替代直接对象引用
    • 维护用户-资源映射表
  4. 日志与监控

    • 记录敏感操作
    • 监控异常访问模式
  5. 自动化测试

    • 包含越权测试的自动化安全测试
    • 定期权限控制审计
深入理解与挖掘IDOR漏洞(越权漏洞)的全面指南 一、IDOR漏洞概述 IDOR (Insecure Direct Object Reference)即"不安全的直接对象引用",属于越权漏洞(Broken Access Control)范畴,也被归类为逻辑漏洞或访问控制漏洞。 核心特征 :当应用程序基于用户提供的输入对象进行访问时,未进行适当的权限验证,导致用户可以访问或操作未授权的资源。 二、IDOR漏洞的多样化表现形式 1. 传统数字ID型 通过增减或切换数字ID号访问未授权资源 示例: /api/userinfo?id=123 → /api/userinfo?id=124 2. 编码/哈希ID型 应用程序使用编码或哈希处理过的ID号 可能通过解码或分析生成模式来预测其他ID 3. 间接引用型 通过一个接口获取另一个接口所需的ID 示例模式: 通过 /api_v1/messages?user_id=ANOTHER_USERS_ID 获取会话ID列表 使用获取的会话ID访问 /api_v1/messages?conversation_id=SOME_RANDOM_ID 4. 无显式ID要求型 应用程序在请求中不显式要求ID参数 尝试添加ID参数可能暴露漏洞 三、高级IDOR挖掘技术 1. 编码/哈希ID分析技术 解码尝试 :对编码ID尝试base64、URL编码等常见解码方式 生成模式分析 : 注册多个账户分析ID生成规律 检查ID是否使用低熵算法生成(可预测) 信息泄露途径 : 公开页面(用户资料等) Referer头信息 其他API接口响应 2. ID创建影响技术 当ID不可预测时,关注: 资源创建过程中ID的生成方式 资源间的关联关系建立机制 尝试通过创建操作影响ID分配 3. 参数注入技术 添加未请求的ID参数 : 原始请求: GET /api_v1/messages 测试请求: GET /api_v1/messages?user_id=ANOTHER_USERS_ID HTTP参数污染(HPP) : 测试方法: 变体: 参数顺序变化 数组形式参数: user_ids[]=ID1&user_ids[]=ID2 4. 盲IDOR技术 特征:接口不直接返回请求信息,但会导致: 文件导出内容变化 邮件或通知信息泄露 其他间接信息泄露渠道 5. 请求方法变换 尝试不同HTTP方法: GET ↔ POST ↔ PUT ↔ DELETE ↔ PATCH 特别关注: PUT和POST互换 方法覆盖(如X-HTTP-Method-Override头) 6. 文件类型变换 修改请求的文件类型: 添加 .json 后缀: /api/userinfo → /api/userinfo.json 修改Accept头 尝试不同内容类型(XML/JSON/CSV等) 四、IDOR漏洞危害提升技术 1. 漏洞危害性评估 高危害IDOR : 密码重置/更改功能 账户恢复功能 敏感信息读写操作 低危害IDOR : 邮件订阅设置更改 非敏感信息访问 2. 与其他漏洞组合利用 存储型XSS组合 : 发现可写型IDOR(如修改用户购物车) 结合self-XSS payload 通过IDOR将XSS传播给其他用户 形成无需交互的存储型XSS 信息泄露组合 : 通过可读型IDOR获取敏感信息 结合其他漏洞提升攻击链 五、系统化IDOR测试流程 枚举所有对象引用点 : 收集所有接受ID参数的端点 包括URL参数、POST数据、头部信息等 ID类型分析 : 识别ID生成方式(顺序数字、UUID、哈希等) 对编码ID尝试解码 权限测试矩阵 : 使用不同权限账户测试同一功能 横向越权(同权限用户间) 纵向越权(不同权限等级间) 参数变异测试 : 添加/删除/修改ID参数 参数污染测试 数组/非数组形式转换 请求变异测试 : HTTP方法变换 内容类型变换 参数位置变化(URL/POST/Header) 间接引用测试 : 通过其他接口获取目标ID 测试ID引用链安全性 六、防御建议 访问控制 : 每个请求都进行权限验证 遵循最小权限原则 不可预测标识符 : 使用高熵随机标识符(如UUIDv4) 避免使用顺序ID 间接引用映射 : 使用临时令牌替代直接对象引用 维护用户-资源映射表 日志与监控 : 记录敏感操作 监控异常访问模式 自动化测试 : 包含越权测试的自动化安全测试 定期权限控制审计