关于 mitm-find-idor
此安全技能分析 mitmproxy 流量记录中的不安全直接对象引用(IDOR)漏洞,识别可疑对象引用,并提供授权测试和影响评估的报告格式。
主要功能
- 01查找路径和请求中的对象引用
- 02识别常见 ID 编码模式
- 03指导授权与影响检查
- 04按端点和严重程度整理发现
适用场景
- 01检查捕获流量中的 IDOR 候选项
- 02测试是否能访问其他用户的资源
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ instavm/ security-skills --skill mitm-find-idor安装后在 Claude Code 中输入/mitm-find-idor确认已加载。
详细介绍
查找 IDOR 漏洞
分析 mitmproxy 转储文件(log.txt),查找以下方面的 IDOR 漏洞:$ARGUMENTS
需要:当前目录中存在
log.txt。如果没有,请先捕获流量:mitmdump --set flow_detail=3 2>&1 | tee log.txt
高价值 IDOR 模式(来自 132 份真实 HackerOne 漏洞赏金报告)
1. 用户/账户对象引用
user_id, userId, user-id, uid, account_id, accountId
customer_id, customerId, member_id, memberId
profile_id, owner_id, creator_id, author_id
真实示例:https://zomato.com/gold/payment-success?subscription_id=XXX&user_id=YYY
2. 资源对象引用
order_id, orderId, booking_id, bookingId, reservation_id
transaction_id, txn_id, payment_id, invoice_id
document_id, doc_id, file_id, attachment_id
report_id, ticket_id, case_id, issue_id
真实示例:/api/shopify/orders/{order_id}——更改 order_id 以访问其他订单
3. 组织对象引用
project_id, projectId, team_id, teamId, group_id, groupId
workspace_id, org_id, organization_id, company_id
board_id, channel_id, room_id, space_id
真实示例:PUT /boards/{board_id}.json——访问 GitLab 私有项目标签
4. 内容对象引用
media_code, media_id, image_id, video_id, asset_id
post_id, postId, comment_id, message_id, thread_id
article_id, content_id, item_id, entry_id
真实示例:media_code=2013124——连续 ID 会暴露其他用户的媒体内容
5. 会话/令牌引用(影响重大)
session_id, sessionId, subscription_id, subscriptionId
card_id, cardId, fuel_card_id, membership_id
api_key_id, token_id, credential_id
真实示例:activateFuelCard?id=XXX——枚举 Uber 司机 UUID
要解码的 ID 编码模式
| 模式 | 示例 | 解码方法 |
|---|---|---|
| Base64 数字 | MTIzNDU2 | echo MTIzNDU2 | base64 -d → 123456 |
| 十六进制 | 0x1E240 | 转换为十进制 → 123456 |
| UUID v1 | 包含时间戳 | 提取时间戳部分 |
| 短哈希 | a1b2c3 | 可能是连续数字经 MD5 截断后的结果 |
| 补零 | 000012345 | 去掉前导零后递增 |
在哪里查找 IDOR
URL 路径参数(最常见)
/api/v1/users/{id}/profile
/api/v1/orders/{id}/details
/api/v1/documents/{id}/download
/campaign-manager-api/accounts/{id}
查询参数
?user_id=12345&action=view
?subscription_id=XXX&user_id=YYY
?media_code=2013124
请求正文(JSON/表单)
{"user_id": 12345, "action": "delete"}
{"board": {"id": 857058, "labels": [{"id": 123}]}}
标头(少见但影响重大)
X-User-Id: 12345
X-Account-Id: 67890
严重性评级
| 访问类型 | 严重性 | 示例 |
|---|---|---|
| 读取其他用户的 PII | 严重 | 查看电子邮件、电话、地址 |
| 修改其他用户的数据 | 高 | 编辑个人资料、删除内容 |
| 访问其他用户的订单/交易 | 高 | 查看订单历史记录、支付信息 |
| 读取其他用户的私密内容 | 中 | 查看私密帖子、文档 |
| 枚举用户是否存在 | 低 | 确认 user_id 是否存在 |
| 访问近乎公开的数据 | 信息 | 查看订阅日期 |
测试方法
步骤 1:识别候选参数
在流量中搜索 ID 模式:
grep -iE '(user|account|order|session|subscription|member|card|document|file|project|team|group)[-_]?id' log.txt
步骤 2:检查 ID 是否连续/可预测
# Extract numeric IDs and check if sequential
grep -oE 'id[=:]["'\'']?[0-9]+' log.txt | sort -u
步骤 3:测试授权
# Test with ID ± 1
curl -H "Cookie: victim_session" "https://target.com/api/resource/12345"
curl -H "Cookie: victim_session" "https://target.com/api/resource/12344" # Another user's
步骤 4:验证影响
- 响应是否包含其他用户的数据?
- 你能否对其他用户的资源执行操作(编辑/删除)?
- 暴露了哪些敏感字段?
输出格式
针对每项发现,请报告:
## IDOR Finding: [Brief Description]
**Endpoint**: `METHOD https://target.com/path`
**Parameter**: `param_name` in [path|query|body]
**ID Type**: [Sequential|Base64|UUID|Hash]
**Current Value**: `12345`
**Severity**: [CRITICAL|HIGH|MEDIUM|LOW]
**Evidence**:
[Show request/response snippets]
**Impact**:
- What data is exposed
- What actions can be performed
**Test Command**:
curl -X METHOD 'https://target.com/...' -H 'Cookie: ...'
**Remediation**:
- Implement proper authorization checks
- Use indirect references (mapping table)
- Validate user owns the resource
可忽略的误报
- 分析/跟踪端点(仅写入,不返回数据)
- 公开内容 ID(电影 ID、产品目录)
- 无论是否授权,都会返回相同数据的资源 ID
- 需要有效会话且对非所属用户返回 403 的 ID
评论
支持 Markdown