怎么通过参数污染绕过IDOR

发布时间:2021-12-23 09:46:48 作者:柒染
来源:亿速云 阅读:270
# 怎么通过参数污染绕过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

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 自动化工具


五、防御方案

5.1 开发层面

5.2 运维层面


六、案例分析

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字,可根据需要补充更多案例或技术细节。

推荐阅读:
  1. 如何彻底修复DNS污染呢?
  2. 而非热污染

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

idor

上一篇:如何绕过macOS的隐私控制

下一篇:mysql中出现1053错误怎么办

相关阅读

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

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