跳转至

不安全且直接的对象引用 (Insecure Direct Object References)

不安全且直接的对象引用 (IDOR) 是一种安全漏洞。当应用程序允许用户基于用户提供的输入直接访问或修改对象(如文件、数据库记录或 URL),且缺乏足够的访问控制时,就会发生这种漏洞。这意味着如果用户在 URL 或 API 请求中更改参数值(如 ID),他们可能能够访问或处理未被授权查看或修改的数据。

摘要 (Summary)

工具 (Tools)

方法论 (Methodology)

IDOR 代表不安全且直接的对象引用。这是一种安全漏洞,当应用程序根据用户提供的输入提供对对象的直接访问时就会产生。因此,攻击者可以绕过授权,直接访问系统中的资源,从而可能导致未经授权的信息泄露、修改或删除。

IDOR 示例:

想象一个 Web 应用程序,允许用户通过点击链接 https://example.com/profile?user_id=123 来查看自己的个人资料:

<?php
    $user_id = $_GET['user_id'];
    $user_info = get_user_info($user_id);
    ...

在这里,user_id=123 是对特定用户个人资料的直接引用。如果应用程序没有正确检查登录用户是否有权查看与 user_id=123 关联的个人资料,攻击者只需更改 user_id 参数即可查看其他用户的个人资料:

https://example.com/profile?user_id=124

https://lh5.googleusercontent.com/VmLyyGH7dGxUOl60h97Lr57F7dcnDD8DmUMCZTD28BKivVI51BLPIqL0RmcxMPsmgXgvAqY8WcQ-Jyv5FhRiCBueX9Wj0HSCBhE-_SvrDdA6_wvDmtMSizlRsHNvTJHuy36LG47lstLpTqLK

数值型参数 (Numeric Value Parameter)

增加和减少这些值以访问敏感信息。

  • 十进制值:287789, 287790, 287791, ...
  • 十六进制值:0x4642d, 0x4642e, 0x4642f, ...
  • Unix 时间戳:1695574808, 1695575098, ...

示例:

常见标识符参数 (Common Identifiers Parameter)

一些标识符是可以猜测的,如姓名和电子邮件,它们可能会授予您访问客户数据的权限。

  • 姓名:john, doe, john.doe, ...
  • 电子邮件:john.doe@mail.com
  • Base64 编码值:am9obi5kb2VAbWFpbC5jb20=

示例:

弱伪随机数生成器 (Weak Pseudo Random Number Generator)

  • UUID/GUID v1 如果你知道它们的创建时间,是可以预测的:95f6e264-bb00-11ec-8833-00155d01ef00
  • MongoDB 对象 ID 是以可预测的方式生成的:5ae9b90a2c144b9def01ec37
    • 一个代表 Unix 时间戳(秒)的 4 字节值
    • 一个 3 字节的机器标识符
    • 一个 2 字节的进程 ID
    • 一个 3 字节的计数器,以随机值开始

示例:

哈希型参数 (Hashed Parameter)

有时我们会看到网站使用哈希值来生成随机用户 ID 或令牌,例如 sha1(username), md5(email), ...

  • MD5: 098f6bcd4621d373cade4e832627b4f6
  • SHA1: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
  • SHA2: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

示例:

通配符参数 (Wildcard Parameter)

发送通配符(*, %, ., _)而不是 ID,某些后端可能会返回所有用户的数据。

  • GET /api/users/* HTTP/1.1
  • GET /api/users/% HTTP/1.1
  • GET /api/users/_ HTTP/1.1
  • GET /api/users/. HTTP/1.1

IDOR 技巧 (IDOR Tips)

  • 更改 HTTP 请求:POST → PUT
  • 更改内容类型:XML → JSON
  • 将数值转换为数组:{"id":19} → {"id":[19]}
  • 使用参数污染:user_id=hacker_id&user_id=victim_id

实验环境 (Labs)

参考资料 (References)