温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么通过参数污染绕过IDOR

发布时间:2021-12-23 09:46:48 来源:亿速云 阅读:286 作者:柒染 栏目:安全技术
# 怎么通过参数污染绕过IDOR ## 引言 IDOR(Insecure Direct Object Reference,不安全的直接对象引用)是Web应用程序中常见的安全漏洞,攻击者通过操纵输入参数(如URL或表单数据)访问未授权的资源。参数污染(Parameter Pollution)是一种利用Web应用程序处理多个同名参数时的行为差异来绕过安全机制的技巧。本文将深入探讨如何结合这两种技术实现更高效的漏洞利用。 --- ## 一、IDOR漏洞基础 ### 1.1 什么是IDOR? 当应用程序直接使用用户提供的输入(如URL中的ID)访问对象(如数据库记录),且未进行权限验证时,攻击者可通过修改参数值访问其他用户的数据。例如: 

https://example.com/profile?id=123

将`id=123`改为`id=124`即可查看他人资料。 ### 1.2 传统防御措施 - 基于会话的权限验证 - 使用不可预测的UUID替代自增ID - 服务端二次校验用户权限 --- ## 二、参数污染技术原理 ### 2.1 参数污染的定义 当Web应用程序接收多个同名参数时,不同技术栈的处理方式可能不同。例如: 

https://example.com/action?user=alice&user=bob

- PHP默认取最后一个值(`user=bob`) - Node.js可能合并为数组(`user=['alice','bob']`) - Java Spring可能取第一个值 ### 2.2 常见利用场景 - 绕过输入过滤 - 覆盖关键参数 - 触发逻辑歧义 --- ## 三、通过参数污染绕过IDOR ### 3.1 经典绕过案例 假设目标API的权限校验逻辑存在缺陷: ```python # 伪代码:权限校验只检查第一个user_id参数 def check_permission(request): user_id = request.GET.get('user_id') # 取第一个值 if user_id != current_user.id: return False return True # 数据查询使用最后一个user_id参数 profile = Profile.objects.get(id=request.GET.getlist('user_id')[-1]) 

攻击者可构造URL:

https://example.com/profile?user_id=attacker&user_id=victim 
  • 权限校验看到user_id=attacker(通过)
  • 实际查询使用user_id=victim(数据泄露)

3.2 其他变体

  1. 数组注入
    目标系统预期接收数组:
     ?id[]=legit&id[]=victim 
  2. JSON参数污染
    POST请求体:
     {"user":"attacker","user":"victim"} 
  3. HTTP头污染
    添加重复头字段:
     X-User-Id: legit X-User-Id: victim 

四、实战检测方法

4.1 测试步骤

  1. 发现基础IDOR(如修改/api/user/123124
  2. 尝试添加重复参数:
     /api/user/123?id=123&id=124 
  3. 测试不同参数位置:
     /api/user?id=124&id=123 
  4. 组合其他参数:
     /api/user/123?user_id=124 

4.2 自动化工具

  • Burp Suite插件:Param Miner
  • 自定义脚本:批量发送多参数变体
  • Web框架检测:识别后端技术栈(如PHP/Node.js)

五、防御方案

5.1 开发层面

  • 严格参数处理:禁止接收多个同名参数
  • 全局权限校验:在业务逻辑前完成验证
  • 使用间接引用:如/api/user/me替代/api/user/{id}

5.2 运维层面

  • WAF规则:拦截异常参数重复
  • 日志监控:告警多参数请求

六、案例分析

6.1 Facebook 2014年漏洞

通过参数污染绕过OAuth令牌验证:

https://fb.com/auth?token=legit&token=malicious 

结果:攻击者可劫持用户会话。

6.2 某银行API漏洞

转账接口未校验重复amount参数:

POST /transfer amount=100&amount=10000 

结果:实际转账取最后一个值。


结语

参数污染为IDOR漏洞利用提供了新的攻击面。防御需要结合安全编码、严格的输入处理和深度防御策略。安全研究人员应始终尝试非常规参数组合,以发现隐藏的逻辑漏洞。

扩展阅读
- OWASP IDOR Cheatsheet
- RFC 3986: URI规范 “`

注:实际字数为约1200字,可根据需要补充更多案例或技术细节。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI