IDOR漏洞初探
字数 1434 2025-08-10 16:34:39

IDOR漏洞全面解析与实战指南

一、IDOR漏洞概述

IDOR (Insecure Direct Object Reference)即"不安全的直接对象引用",属于访问控制漏洞范畴,在OWASP API安全前10名中排名第一。该漏洞发生在基于用户提供的输入对象进行访问时,未进行充分的权限验证。

国内通常称为越权漏洞(Broken Access Control),也可归类为逻辑漏洞或访问控制漏洞。

二、IDOR漏洞利用技术

1. HTTP请求方法变更

  • 尝试不同HTTP方法(GET/POST/PUT/DELETE/PATCH等)
  • 常见技巧:GET和POST互换
GET /users/delete/VICTIM_ID  --> 403 Forbidden
POST /users/delete/VICTIM_ID --> 200 OK

2. 路径穿越绕过

POST /users/delete/VICTIM_ID  --> 403 Forbidden
POST /users/delete/MY_ID/../VICTIM_ID --> 200 OK
POST /users/delete/..;/delete/VICTIM_ID --> 200 OK
POST /users/delete/.;/VICTIM_ID --> 200 OK
POST /users/delete/hello/%3baaaa/VICTIM_ID --> 200 OK

3. Content-Type变更

Content-type: application/xml --> Content-type: application/json

4. 参数类型变更

  • 字符型转数值型:
GET /file?id=90ri2xozifke29ikedawOd --> GET /file?id=302
  • 单值转数组:
{"id":111} --> 401 Unauthorized
{"id":[111]} --> 200 OK

5. 大小写替换

GET /admin/profile --> 401 Unauthorized
GET /ADMIN/profile --> 200 OK

6. 通配符替换

GET /api/users/<user_id>/ --> GET /api/users/*

7. 添加请求ID

GET /api_v1/messages --> 200 OK
GET /api_v1/messages?user_id=victim_uuid --> 200 OK

8. HTTP参数污染

GET /api_v1/messages?user_id=ATTACKER_ID&user_id=VICTIM_ID
GET /api_v1/messages?user_id=VICTIM_ID&user_id=ATTACKER_ID
GET /api_v1/messages?user_id[]=ATTACKER_ID&user_id[]=VICTIM_ID

9. 文件类型变更

GET /user_data/123 --> 401 Unauthorized
GET /user_data/123.json --> 200 OK

可尝试的后缀:.json、.xml、.config、.zip等

10. API版本切换

GET /v2/users_data/1234 --> 403 Forbidden
GET /v1/users_data/1234 --> 200 OK

三、任意密码重置技术

1. 验证码未绑定用户

  • 原因:仅验证验证码正确性,未验证与手机号的绑定关系
  • 测试:提交他人手机号+正确验证码

2. 修改接收手机/邮箱

  • 原因:用户名、手机号、验证码三者未统一验证
  • 测试:用目标用户名获取验证码,修改接收手机号为自己号码

3. 本地验证绕过

  • 原因:客户端本地验证可被篡改
  • 测试:输入错误验证码后修改返回包中的验证结果

4. 跳过验证步骤

  • 原因:可直接访问最终修改密码页面
  • 测试:记录正常流程的修改密码链接,直接访问

5. 未校验用户字段值

  • 原因:最后一步未验证用户身份
  • 测试:正常流程到最后一步,修改数据包中的用户信息

6. Cookie值替换

  • 原因:仅检查Cookie存在性,未验证其有效性
  • 测试:获取目标用户Cookie,替换到自己的请求中

7. 修改字段信息

  • 原因:请求中缺少明显身份标识
  • 测试:添加隐藏参数如email=your_email@example.com

8. 国际化域名(IDN)利用

  • 利用Unicode字符规范化特性
  • 示例:
    1. 注册账号:victim@gmail.com.attacker.com
    2. 重置密码时输入:victim@gmáil.com.attacker.com
    3. 规范化后发送重置链接到victim@xn--gmil-6na.com.attacker.com

9. Session覆盖

  1. 用自己的账号发起密码重置请求
  2. 不打开收到的重置链接
  3. 在同一浏览器中为目标账号发起密码重置
  4. 打开之前收到的重置链接

四、交易金额篡改技术

1. 直接修改交易金额

  • 在支付最后一步修改金额参数

2. 正负值对冲

  • 部分商品数量设为负数,减少总金额

3. 商品ID修改

  • 用低价商品A通过价格检测
  • 支付时替换为高价商品B的ID

4. 多平台数据不同步

  • 案例:肯德基APP与微信客户端
    1. 在APP用兑换券下单待支付
    2. 在微信客户端退款该兑换券
    3. 取消APP订单重新获取兑换券

五、防御建议

  1. 实施严格的访问控制策略
  2. 对所有对象引用进行权限验证
  3. 使用间接引用映射(如使用UUID而非自增ID)
  4. 避免在客户端进行关键验证
  5. 确保所有验证步骤完整执行
  6. 对敏感操作实施多因素认证
  7. 定期进行安全审计和渗透测试

六、总结

IDOR漏洞形式多样,核心在于系统未能正确验证用户对资源的访问权限。安全人员应全面理解各种绕过技术,开发人员则应从设计层面考虑访问控制问题,避免直接暴露内部对象引用。

IDOR漏洞全面解析与实战指南 一、IDOR漏洞概述 IDOR (Insecure Direct Object Reference)即"不安全的直接对象引用",属于访问控制漏洞范畴,在OWASP API安全前10名中排名第一。该漏洞发生在基于用户提供的输入对象进行访问时,未进行充分的权限验证。 国内通常称为越权漏洞(Broken Access Control),也可归类为逻辑漏洞或访问控制漏洞。 二、IDOR漏洞利用技术 1. HTTP请求方法变更 尝试不同HTTP方法(GET/POST/PUT/DELETE/PATCH等) 常见技巧:GET和POST互换 2. 路径穿越绕过 3. Content-Type变更 4. 参数类型变更 字符型转数值型: 单值转数组: 5. 大小写替换 6. 通配符替换 7. 添加请求ID 8. HTTP参数污染 9. 文件类型变更 可尝试的后缀:.json、.xml、.config、.zip等 10. API版本切换 三、任意密码重置技术 1. 验证码未绑定用户 原因:仅验证验证码正确性,未验证与手机号的绑定关系 测试:提交他人手机号+正确验证码 2. 修改接收手机/邮箱 原因:用户名、手机号、验证码三者未统一验证 测试:用目标用户名获取验证码,修改接收手机号为自己号码 3. 本地验证绕过 原因:客户端本地验证可被篡改 测试:输入错误验证码后修改返回包中的验证结果 4. 跳过验证步骤 原因:可直接访问最终修改密码页面 测试:记录正常流程的修改密码链接,直接访问 5. 未校验用户字段值 原因:最后一步未验证用户身份 测试:正常流程到最后一步,修改数据包中的用户信息 6. Cookie值替换 原因:仅检查Cookie存在性,未验证其有效性 测试:获取目标用户Cookie,替换到自己的请求中 7. 修改字段信息 原因:请求中缺少明显身份标识 测试:添加隐藏参数如email=your_ email@example.com 8. 国际化域名(IDN)利用 利用Unicode字符规范化特性 示例: 注册账号:victim@gmail.com.attacker.com 重置密码时输入:victim@gmáil.com.attacker.com 规范化后发送重置链接到victim@xn--gmil-6na.com.attacker.com 9. Session覆盖 用自己的账号发起密码重置请求 不打开收到的重置链接 在同一浏览器中为目标账号发起密码重置 打开之前收到的重置链接 四、交易金额篡改技术 1. 直接修改交易金额 在支付最后一步修改金额参数 2. 正负值对冲 部分商品数量设为负数,减少总金额 3. 商品ID修改 用低价商品A通过价格检测 支付时替换为高价商品B的ID 4. 多平台数据不同步 案例:肯德基APP与微信客户端 在APP用兑换券下单待支付 在微信客户端退款该兑换券 取消APP订单重新获取兑换券 五、防御建议 实施严格的访问控制策略 对所有对象引用进行权限验证 使用间接引用映射(如使用UUID而非自增ID) 避免在客户端进行关键验证 确保所有验证步骤完整执行 对敏感操作实施多因素认证 定期进行安全审计和渗透测试 六、总结 IDOR漏洞形式多样,核心在于系统未能正确验证用户对资源的访问权限。安全人员应全面理解各种绕过技术,开发人员则应从设计层面考虑访问控制问题,避免直接暴露内部对象引用。