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字符规范化特性
- 示例:
- 注册账号: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漏洞形式多样,核心在于系统未能正确验证用户对资源的访问权限。安全人员应全面理解各种绕过技术,开发人员则应从设计层面考虑访问控制问题,避免直接暴露内部对象引用。