Skip to main content Inicio Creadores haibo3434358 scareaisec idor-methodology
idor-methodology IDOR/BOLA 越权漏洞完整方法论 — 基于 250+ HackerOne 真实报告 + Intigriti/CN-SEC 实战技巧提炼。覆盖水平越权、垂直越权、盲 IDOR、GraphQL IDOR、二阶 IDOR、多租户越权、API 版本降级、文件资源 IDOR、批量操作越权、403 绕过。任何出现 user_id/order_id/file_id/org_id/tenant_id/uuid/资源 ID/批量 ids/导出任务/对象归属的场景都必须使用此 skill。
Ir a la instalación Skills Marketplace Descubre y explora habilidades de IA creadas por la comunidad.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Copiar promptMostrar detalles del prompt Un comando directo omite el prompt de revisión. Revisa el origen antes de ejecutarlo.
npx skills add https://github.com/haibo3434358/ScareAISec --skill idor-methodologyEl comando permanece en una sola línea. Desplázate horizontalmente para revisarlo antes de copiarlo.
¿Prefieres una copia local? Descarga los archivos que SkillsMP tiene disponibles ahora.
Descargar Zip Descargando... Ocupaciones relacionadas SOC
Basado en la clasificación ocupacional SOC
Explorador de archivos
2 archivos name idor-methodology enabled true description IDOR/BOLA 越权漏洞完整方法论 — 基于 250+ HackerOne 真实报告 + Intigriti/CN-SEC 实战技巧提炼。覆盖水平越权、垂直越权、盲 IDOR、GraphQL IDOR、二阶 IDOR、多租户越权、API 版本降级、文件资源 IDOR、批量操作越权、403 绕过。任何出现 user_id/order_id/file_id/org_id/tenant_id/uuid/资源 ID/批量 ids/导出任务/对象归属的场景都必须使用此 skill。 priority 10 vuln_types ["IDOR越权","BOLA","水平越权","垂直越权","多租户越权","文件越权","批量越权","二阶IDOR","Mass Assignment"] triggers ["id","ids","uuid","user_id","uid","account_id","member_id","order_id","invoice_id","file_id","attachment_id","org_id","tenant_id","workspace_id","project_id","batch","bulk","export","owner_id"] synonyms ["idor","bola","broken object level authorization","insecure direct object reference","horizontal privilege escalation","object authorization bypass","越权访问","水平越权","对象越权"] metadata {"tags":"idor,insecure direct object reference,privilege_escalation,authorization,access-control,bola,越权,水平越权,垂直越权,权限绕过,对象引用,绕过,hpp,文件越权,批量操作,api,permission,role,admin,user_id,account,权限,token,session,jwt,接口越权,未授权访问,graphql,blind-idor,二阶idor","category":"discovery","authority":"expert"}
IDOR 越权漏洞完整方法论
数据来源 :250 份 HackerOne 公开报告(2017-2025)分析 + Intigriti/CN-SEC 实战技巧
核心数据 :36.4% 为 High/Critical,平均赏金 $2,941,最高 $20,000
关于本 Skill 的使用边界(读 Phase 之前必读)
本 Skill 是「对象级授权缺失(BOLA/IDOR)的发现与证据闭环手册 」,不是 「所有『能拿到别人数据』场景的判定器」,也不是 「权限越界的全集」。
不要 把「403/404 撒屏」等同于「不存在 IDOR」——Phase 6 的九类绕过中 任一未试完 都不能标 not_vuln。
不要 把「只看到同账号返回 200」等同于「无越界」——IDOR 证据是「**不同归属主体(A/B 用户、两租户、两角色、两工作区)下响应出现各自唯一字段」,必须闭环。
不要 把本 Skill 当成「身份认证绕过」或「权限提升」的主路——账号接管需 password-reset-attack/oauth-sso-attack,未认证访问需 no-auth-quick-test,JWT 伪造需 jwt-attack-methodology;本 Skill 假设你已拿到合法身份 ,只是考验「合法身份能不能摸别人的东西」。
不要 把「业务就是该让代理/客服看所有工单」等同于「该接口本来就不该查权限」——不同 跨越边界(跨工作组/跨租户/跨项目/跨区域) 还是业务正常吗?必须验证。
看到任何 id / uuid / *_id / ids[] / node(id:) / WebSocket 房间号 / 导出任务 / 批量接口 / 文件下载路径,都应把本 Skill 当作必查项 跳 Phase 1。
🤖 Agent 工具映射
操作 Agent 工具 建立 A/B 账号、角色、租户资源归属基线 browser_* + proxy_get_traffic替换 path/query/body/Header/Cookie/WebSocket 中的对象 ID proxy_replay / proxy_send_request去认证、低权限、跨账号、跨租户访问对照 proxy_send_request(..., drop_auth=True)对比 A 自己资源、B 资源、非法 ID、403 绕过响应 proxy_diff_responses查看完整响应字段、归属证据、错误差异和状态变化 proxy_get_flow_detail批量 ids、导出任务、GraphQL node 和异步任务验证 proxy_send_request + proxy_diff_responses固化三点闭环证据:当前身份、对象归属、越权结果 checklist_mark + note_addGraphQL/WebSocket/文件上传/403 绕过等专项
knowledge_load_skill
执行约束 :没有第二账号/第二角色/第二租户归属闭环时不能标 not_vuln;只需用测试资源证明越权,不批量遍历真实用户,不执行不可恢复写操作。
0. 立即执行摘要:没有 A/B 归属闭环,不能判安全 看到任何 id、uuid、user_id、account_id、member_id、order_id、invoice_id、file_id、org_id、tenant_id、workspace_id、project_id、owner_id、ids[]、批量操作、导出任务、文件下载、GraphQL node、WebSocket room/channel 时,必须进入本 skill。IDOR 的核心证据是 当前身份是谁、被访问对象属于谁、服务端返回/执行了什么 。
用 A/B 两个测试账号建立资源归属基线;没有第二账号不能标 not_vuln,只能 needs_review。
覆盖 path、query、body、nested JSON、array、Header、Cookie、WebSocket message 中的对象 ID。
读操作、写操作、批量操作、导出/下载、异步任务、旧版本/移动端接口分别验证,不能互相代替。
403/404 后继续测试方法切换、Content-Type、路径变体、Header 覆盖、HPP、批量接口。
200 后必须确认响应是否属于 B 账号/其他租户,不能只看状态码。
1. 对象类型触发矩阵 对象/参数 漏洞假设 立即测试 user_id/uid/account_id/member_id用户资料 IDOR A token 请求 B 用户资料 order_id/invoice_id/payment_id订单/财务越权 A 请求 B 测试订单/发票 file_id/attachment_id/media_id/key文件越权 A 下载 B 文件,未登录下载 URL org_id/tenant_id/workspace_id/project_id多租户越权 A 租户 token + B 租户 ID ids[]/batch/bulk/list批量越权 数组混入 B 的测试资源 ID export_id/task_id/job_id异步/二阶 IDOR 创建任务时替换归属 ID,取结果验证 GraphQL node/id GraphQL BOLA 查询/mutation 替换 global id WebSocket room_id/channel 实时通道越权 订阅 B 房间/项目频道
⚠️ 关键认知 IDOR 不是"低危小漏洞"——它是SRC 出洞率最高的漏洞类型 。开发者检查了"你是否登录"但没检查"你是否有权访问这条数据"。
缺少所有权验证(78% 的案例)
可预测的对象标识符(65%)
端点间授权不一致(45%)— 部分端点安全,新功能/内部 API 被遗漏
仅客户端安全(23%)— 前端隐藏 ≠ 后端保护
⛔ 安全边界(真实渗透测试必读)
使用自己的测试账号 :必须用自己注册的 2 个测试账号互相测试,严禁读取/修改真实用户数据
禁止批量遍历 :证明 IDOR 只需用 2 个 ID 对比即可(自己的 vs 另一个测试账号的),禁止遍历所有用户 ID
禁止写操作利用 :确认读越权后,在报告中说明"理论上 PUT/DELETE 也可能越权"即可,不要实际修改/删除他人数据
禁止账户接管 :不要修改其他账号的邮箱/密码,即使技术上可以
敏感数据脱敏 :如果看到了其他测试账号的数据,截图时脱敏处理
Phase 1: 发现 IDOR 入口
高价值参数名(必查清单) # 用户相关
user_id, id, uid, user, profile_id, account_id, member_id
# 交易相关
booking_id, order_id, transaction_id, payment_id, invoice_id
# 文件相关
document_id, file_id, attachment_id, media_id, asset_id
# 组织相关
project_id, org_id, team_id, workspace_id, tenant_id
# 内容相关
report_id, ticket_id, case_id, issue_id, request_id
comment_id, note_id, message_id, thread_id, conversation_id
入口位置(按优先级) 位置 示例 优先级 URL 路径 /api/users/1001🔴 高 Query 参数 ?user_id=1001&order_id=5003🔴 高 POST/PUT Body {"user_id": 1001}🔴 高 GraphQL 变量 query { user(id: 1001) {...} }🔴 高 Cookie/Header uid=1001 / X-User-Id: 1001🟡 中 文件路径 /uploads/user_1001/avatar.jpg🟡 中 WebSocket 消息 {"action":"getProfile","uid":1001}🟡 中
ID 泄露猎杀清单 来源 说明 其他 API 响应 请求 A 接口,响应中泄露其他用户的 ID 公开资料页 头像 URL、分享链接中包含 UUID 登录/注册响应 响应中可能包含 user_id 分享/邀请链接 链接中暴露资源 GUID 前端 JS 文件 搜索 userId、accountId 等关键词 API 文档/Swagger 暴露端点结构和参数名 Google Dorks site:target.com "userId"Wayback Machine 历史快照中可能记录 ID LocalStorage/Cookie 客户端存储中的 ID
Phase 2: 水平越权测试(读操作) 前提 :至少需要 2 个账户(A=攻击者,B=受害者)
账户 A (uid=1001) 的 Token:
GET /api/users/1001/profile → 200(自己的数据,记录作为基线)
GET /api/users/1002/profile → 200 + 不同数据?→ IDOR!
GET /api/users/1/profile → 管理员数据?→ 垂直越权!
GET /api/users/0/profile → 500 错误泄露?→ 边界测试
GET /api/users/-1/profile → 触发异常?
响应判断矩阵 响应 判断 下一步 200 + 不同用户数据 ✅ IDOR 确认 保存证据,测写操作 200 + 相同数据 后端忽略了 ID 参数 换其他端点 200 + 空数据 用户不存在或数据为空 换 ID 范围 403/401 有权限检查 → Phase 6 绕过技巧 404 ID 不存在 换 ID 范围或枚举 500 后端报错 分析错误信息(SQL泄露?堆栈?)
Phase 3: 写操作越权(⚠️ 谨慎验证) 确认读越权后,在报告中说明写操作风险即可 ,大多数情况下无需实际执行写操作:
⚠️ 安全的验证方式(使用自己的两个测试账号):
PUT /api/users/TEST_ACCOUNT_B {"email":"test-b-new@test.com"} → 能改?→ 记录+立即恢复
PATCH /api/users/TEST_ACCOUNT_B {"bio":"idor_test"} → 能改?→ 立即恢复原值
⛔ 禁止的操作:
DELETE /api/orders/5003 → 不可逆,禁止
POST /api/users/1/reset-pwd → 影响真实账户,禁止
PUT /api/users/1002/role {"role":"admin"} → 提权操作,禁止
关键发现 :很多应用 GET 有权限检查但 POST/PUT/DELETE 忘了——在报告中指出这一点即可,无需实际执行破坏性操作。
Phase 4: 垂直越权 GET /api/admin/users → 管理员用户列表?
POST /api/admin/create-user → 能创建用户?
GET /api/admin/config → 系统配置泄露?
GET /api/internal/dashboard → 内部面板?
真实案例:审批/Workflow 系统 OA、合同审批、工单系统中,"审批"操作是最典型的垂直越权目标:
POST /contracts/1/approve
PATCH /contracts/1 {"status":"approved"}
POST /api/admin/approval {"id":1,"action":"approve"}
提权技巧
JWT Claims 篡改 :解码 → 改 "role":"user" 为 "role":"admin" → alg:none 或弱密钥可伪造
Mass Assignment :注册/更新时注入 {"role":"admin","is_admin":true}
伪造内部请求头 :X-User-ID: admin_id、X-Forwarded-For: 127.0.0.1
Phase 5: 高级 IDOR 模式
5.1 GraphQL IDOR(增长 140%)
query { user( id : 1 ) { email phone ssn } }
query { user( id : 2 ) { email phone ssn } }
mutation { deletePost( id : "VICTIM_POST_ID" ) }
mutation { updateUser( id : "VICTIM_ID" , input : { email : "evil@x.com" } ) }
[
{ "query" : "{ user(id:1) { email } }" } ,
{ "query" : "{ user(id:2) { email } }" }
]
真实案例 :Snapchat #1819832 — $15,000 — 通过 GraphQL mutation 删除任何人的 Spotlight 内容
5.2 二阶 IDOR(Blind IDOR) 漏洞组件间接引用 数据对象,操作结果不在当前响应中体现:
场景 利用方式 定时导出 创建导出任务时篡改 user_id → 定时任务导出受害者数据 通知触发 修改他人通知设置 → 对方收到邮件则操作成功 计时攻击 合法 ID 200ms vs 非法 ID 50ms → 通过响应时间判断 异步处理 Webhook 回调中的 ID 被异步处理,无即时响应
5.3 多步骤 IDOR 链 1. GET /api/comments → 评论中泄露 user_id: 1002
2. GET /api/users/1002/profile → 用泄露的 ID 读取个人资料
3. GET /api/users/1002/orders → 进一步读取订单数据
真实案例 :Uber #1145428 — $5,750 — 3 漏洞链实现任意扣款:
IDOR #1 → 枚举优惠券 ID
IDOR #2 → 修改优惠券目标
Auth bypass → 应用到任意账户
5.4 API 版本降级 /api/v3/user/1001 → v3 已修复
/api/v2/user/1001 → v2 仍然存在 IDOR!
/api/v1/user/1001 → v1 更老,更可能存在
5.5 静态关键字替换 开发者用 me/current/self 引用当前用户,但 API 通常也支持数字 ID:
/api/users/me/profile → 正常
/api/users/1002/profile → IDOR!
5.6 文件/媒体资源 IDOR /uploads/user_1001/avatar.jpg → 改 1001 为 1002
/attachments/report-001.pdf → 遍历编号
/export/data-20260101.csv → 改日期遍历
S3/OSS 直链 :https://bucket.s3.amazonaws.com/users/1001/doc.pdf 直接改路径可能绕过应用层权限
5.7 批量操作越权(⚠️ 仅验证可行性)
POST /api/users/bulk { "ids" : [ MY_ID, TEST_ACCOUNT_B_ID] }
POST /api/orders/export { "order_ids" : [ MY_ORDER, TEST_ACCOUNT_B_ORDER] }
5.8 多租户越权 /api/tenant/{my_org_id}/user/1001 → 换 org_id
/api/workspace/{my_ws}/data → 换 workspace
Phase 6: IDOR 绕过技巧(当返回 403 时)
💡 决策树警告 :下面 9 类绕过是最常见的 403/404 撒屏反制 ,不是穷尽列举 。
特别注意:「9 类都试过还是 403」不能 直接判定为「不存在 IDOR」——
以下状況上面表格不覆盖,遇到必须补测:
业务层「软拒」 :返回 200 但 body 为「无权限」提示——该场景是「隐性 403」,需用上面 9 类变体重试
后绯错误不一致 :{"code":403} vs {"code":404} vs {"code":-1} 常反映「对象存在与否」泄露,能打出枚举变越界
跨服务授权不一致 :主服务 403、外包服务(统计/导出/通知/审计/搜索备份)可能还是 200
GraphQL 背包、批量、别名 :@include / @skip / fragment / batch query / persisted query 常可绕过单点 403
WebSocket / SSE / gRPC-Web 同业务另一道口 :同一资源的 HTTP 接口 403,但长连接/推送通道未检查归属
缓存/CDN 表现 :If-None-Match / If-Modified-Since / Range / 负数字节 可让边缘 CDN 返回别人的 304/206
看到任一上述现象,返回本 Phase 手动构造变体 ,不要仅凭「9 类都试过」就标 not_vuln。
6.1 参数变形 绕过手法 示例 ID 数组包装 id=1002 → id[]=1002JSON 对象包装 id=1002 → {"id":{"$eq":1002}}JSON Globbing id=1002 → id=[1002,1003] / id=* / id=null负数/零 id=-1 / id=0 / id=undefined小数/前导零 id=1002.0 / id=00001002布尔值 id=true带分隔符 id="1001,1002"
6.2 编码绕过 方式 示例 URL 编码 /user/1002 → /user/%31%30%30%32双重编码 /user/%2531%2530%2530%2532Base64 解码 → 改 ID → 重新编码 十六进制 /user/123 → /user/0x7BUnicode /admin → /a%u0064min
6.3 HTTP 方法切换 GET /api/user/1002 → 403
PUT /api/user/1002 → 200(写操作反而没权限检查!)
PATCH /api/user/1002 → 200
DELETE /api/user/1002 → 200
6.4 Content-Type 切换 Content-Type: application/json → application/x-www-form-urlencoded
Body: {"id":1002} → id=1002
6.5 路径技巧 /api/users/victim_id → 403
/api/users/victim_id/ → 200(末尾斜杠)
/api/users/victim_id.json → 200(添加后缀)
/api/users/my_id/../../users/victim_id/profile → 200(路径穿越)
6.6 伪造请求头 X-Forwarded-For: 127.0.0.1
X-Real-IP: 127.0.0.1
X-Original-URL: /admin/users/victim_id
X-Rewrite-URL: /admin/users/victim_id
X-User-ID: victim_id(微服务架构常见)
6.7 HPP 参数污染 ?id=my_id&id=victim_id(后端可能取最后一个)
?user_id=my_id&user_id=victim_id
6.8 403 但操作已执行 DELETE /file/victim_id → 403 Forbidden
但刷新文件列表后文件确实被删除!(盲 IDOR)
6.9 403 响应差异分析 403 + "Permission denied" → ID 有效但无权限
403 + "Resource not found" → ID 无效
(不同错误消息暗示 ID 是否存在)
Phase 7: 框架特征 IDOR 框架 高发点 原因 Spring Data REST /{entity}/{id} 全暴露自动生成 CRUD,默认无权限 Django REST Framework /api/{model}/{pk}/ViewSet 忘加 permission_classes Express + Mongoose /api/users/:id中间件顺序错误 Laravel /api/{model}/{id}忘加 Policy GraphQL (任何) query { node(id:"...") }Relay Global ID 暴露任意对象 gRPC/Protobuf 二进制请求中的 ID 字段 需解码修改重编码 REST + HATEOAS 响应 _links 中的 URL 直接修改 href 访问
Phase 8: IDOR 组合攻击 组合 效果 案例 IDOR + XSS 注入 XSS 到他人账户 Self-XSS 升级为 Stored-XSS IDOR + CSRF 诱导受害者触发越权操作 无 token 的 PUT 请求 IDOR + 文件上传 覆盖他人文件/上传恶意文件到他人目录 头像覆盖 IDOR + 信息泄露 一步泄露 ID → 二步越权读数据 评论泄露 user_id → 读 profile IDOR + 竞态条件 并发请求绕过单次权限检查 批量 API 竞态
🚨 证据级响应与记录时机 只要拿到证据级响应,立即 checklist_mark(... result="vulnerable"),不要等把所有越权链测完。 IDOR 的证据来自"三点闭环":当前身份是谁、访问的对象属于谁、响应/状态变化证明了什么 。
IDOR 证据级响应(任一即可)
✅ A 账号 Token 请求 B 账号资源,响应中出现 B 的唯一字段(邮箱、手机号、订单号、文件名、租户名等)
✅ 普通用户访问管理员/其他角色资源,返回管理数据或执行了管理动作
✅ 批量接口混入其他用户 ID 后,响应一并返回或处理了其他用户对象
✅ 写操作使用自己的两个测试账号验证,A 能修改/绑定/删除 B 的测试资源,且可立即恢复
✅ 403/404 绕过后,同一资源从拒绝访问变为返回真实业务数据
结果分级
vulnerable:有明确两账号/两角色/两租户对照,能证明越权读或安全可恢复的越权写
needs_review:存在响应差异、ID 泄露、错误信息或可疑状态变化,但缺少第二账号/第二角色闭环
not_vuln:完成最低必测自检,所有对象替换、Body ID、批量、写操作和 403 绕过均无越权证据
skipped:缺少必要条件导致无法测试,例如没有第二账号、没有可替换对象 ID、没有授权测试写操作;必须说明缺失条件
输出格式 [IDOR/BOLA检查]
入口/接口:
对象类型:用户/订单/发票/文件/项目/组织/租户/批量/导出任务/GraphQL/WebSocket/其他
测试身份:A账号/B账号/低权限/高权限/A租户/B租户/未登录
测试位置:path/query/body/nested-json/array/header/cookie/ws-message
测试动作:ID替换/批量混入/写操作/导出任务/旧版本/403绕过/多租户
归属证据:B唯一字段/租户名/文件名/订单号/状态变化/无
结论:confirmed_vuln | suspected_vuln | needs_review | not_vuln
未测原因:缺第二账号/缺对象ID/缺租户/禁止写操作/其他
记录格式 checklist_mark(vuln_type="IDOR/越权", result="vulnerable",
detail="A账号(<角色/租户>) 使用自己的认证访问 B账号资源 <endpoint/id>,响应包含 B 的 <唯一字段>;已用 B账号确认资源归属。")
note_add(type="result", content="补充请求/响应对、账号归属证明、影响范围、是否存在写操作风险。")
Phase 9: 证据收集规范 $500 与 $20,000 报告的区别在于你展示的影响力。
有效 PoC 必须包含
请求/响应对 :完整 HTTP 请求(含认证头)+ 完整响应
两账号对比 :A 账号访问 B 的数据,B 账号确认数据属于 B
关键字段标注 :高亮响应中的敏感字段(姓名/邮箱/手机号)
影响力说明 :写操作能力、爆炸半径(影响多少用户)、链式攻击可能
升级影响力的技巧(报告中说明,不实际执行)
不要止步于"能看到用户#2的资料"
在报告中说明写操作可能性 (如 PUT/DELETE 端点也无授权检查)
在报告中说明批量影响 (ID 可遍历 → 影响所有用户)
在报告中说明链式攻击可能 (IDOR → 读取邮箱 → 密码重置 → 账户接管)
在报告中说明敏感数据类型 (PII/金融/医疗)
⛔ 禁止 :实际遍历所有用户、实际修改/删除数据、实际接管账户
✅ 好的证据:
"用 A 账号(uid=1001) 的 token 请求 /api/users/1002/profile,
返回了 B 账号的姓名(张三)、邮箱(zhangsan@test.com)、手机号(138xxxx)。
进一步测试 PUT /api/users/1002 可修改邮箱,实现账户接管。
影响:任意用户数据泄露+账户接管,影响全部 10 万+ 注册用户。"
❌ 差的证据:
"请求 /api/users/1002 返回了 200"
每确认一个 IDOR 立即 vuln_verify + note_add(type="result") 记录。
真实案例速查表 目标 漏洞 赏金 关键发现技巧 GitLab 通过项目导入窃取私有对象 $20,000 导入文件中注入外部 issue_id Snapchat 删除任何人的 Spotlight 内容 $15,000 GraphQL mutation 无授权 PayPal 向商户添加未授权用户 $10,500 多步流程第二步缺检查 Uber 3漏洞链任意扣款 $5,750 优惠券 ID 枚举 + 目标篡改 Shopify 跨店铺计费访问 $5,000 多租户 ID 替换
⛔ 「最低必测自检」— 标 not_vuln/skipped 前必答 任何 IDOR 项准备标 not_vuln 或 skipped 前,逐条对照下面 7 个问题 回答你做了什么。
任何一项答"未尝试"且没有合理跳过理由 → 不能 not_vuln,必须补测 。
把答案写进 checklist_mark 的 detail 字段(精简版即可),note_add 中可以详写:
# 必测项 跳过的合法理由(任一即可) 1 路径/Query ID 替换 :把 path 中的数字 ID(或 ?xxx_id=、?uid=)改成至少 2 个其他值(自己另一个测试账号、+1、随机大数 9999),观察响应是否返回他人数据?接口路径和参数中完全没有 数字/UUID 类标识 2 响应中泄露的 ID 反向利用 :测过该接口前,先看响应里有没有泄露其他用户的 *_id、uuid、关联实体 ID?拿这些 ID 反过来去请求当前接口或同模块其他接口?响应中确实没有任何 ID 字段 3 Body 中的 ID 字段 (POST/PUT/PATCH/DELETE):请求体中如果有 id/xxx_id/uuid 类字段,必须改成其他值重发对比该接口是 GET 且 URL 无 ID 参数 4 Mass Assignment 形态 (POST/PUT 创建/修改类):在请求体中追加 敏感字段(role、is_admin、account_id、workspace_id、responder_id、creator_id、owner_id、status、approved),看服务端是否接受?该接口是只读 GET 5 批量/邻接接口 :如果有 /batch、/bulk、/list?ids=...、/adjacent_*、/related/* 这类接口,必须在 ids 列表中混入其他用户的 ID ,看是否一并操作了?该模块确实没有批量/邻接类接口 6 写操作越权探测 :如果有同一资源的 PUT/PATCH/DELETE,至少对 1 个改 ID 试一次(不需要真的改坏数据 ,看是否返回 200/204 即可推断)该资源完全只读 7 403/404 撞墙时 → 5 种绕过技巧 (来自本 SKILL Phase 6):HTTP Verb 切换(GET ↔ POST)、添加 X-Original-URL/X-Forwarded-For/X-Custom-IP-Authorization、双 URL 编码、加 ..;/ 路径混淆、改 Accept 类型为 XML/JSON 看是否绕过接口正常返回 200 没有撞墙
跳过的"非法"理由(这些不算 合理跳过,看到要驳回)
❌ "代理/管理员本就能看所有工单,业务正常" → 可能是真 正常,但你必须证明:换了另一个不同工作组/角色/租户 的资源 ID 也能看到?跨工作组也算正常?
❌ "RESTful 接口不接受自定义参数" → 你试过 ?include=*、?fields=password、?expand=related 这种框架性的隐式参数 吗?
❌ "受 CSRF 保护无法 PUT" → 那你从浏览器 DOM 抓 CSRF token 带上 token 重发了吗?
❌ "需要 JWT 当前只有 Cookie" → 你试过从 localStorage、sessionStorage、网络流量样本中提取已有 JWT 重用吗?
❌ "无该资源的其他 ID 可测" → 你试过从其他 API 响应、JS bundle、URL 历史中收集 ID 吗(参考 Phase 1 ID 泄露猎杀清单)?
📚 知识库(按需加载) 知识库 内容 加载方式 IDOR 真实案例库 7 个 H1 真实案例 + 绕过技巧 + 思维链模板 knowledge_load_skill("idor-methodology/cases")国产组件指纹 国产中间件默认路径 + 默认凭据 knowledge_load_skill("china-specific/fingerprints")
⚠️ Skill 边界与逃逸 本 Skill 覆盖的是「合法身份下的对象级越界 (BOLA)+ 403/404 绕过 + Mass Assignment + 二阶/多租户/批量/GraphQL/WebSocket 变体」,以下场景必须从本 Skill 主动逃逸到联动 Skill :
现场信号 应跳转/联动的 Skill 或方向 接口 未认证就能调 (未登录拿到他人数据) no-auth-quick-test(不是 IDOR,是完全漏授权)密码重置/邮箱绑定/手机号修改 可越界password-reset-attack(定性为账号接管而非 IDOR)越界携带 JWT/SAML/OAuth token jwt-attack-methodology / oauth-sso-attack全局越界 (普通用户能调管理后台/内部 API)auth-bypass-methodology + privilege-escalation-web越界读取的是 SSRF/LFI/XXE/SSTI 带出的外部资源 对应 Skill 主线,不是 IDOR 越界携带 交易/订单/价格/优惠券 业务逻辑 business-logic-attackGraphQL 介绍/复杂查询交互 占主导graphql-methodology(以本 Skill 5.1 为补充,不取代)多账号原始会话导入 setup-browser-cookies / 浏览器会话导入 Skill只拿到路径/Cookie/Header 没拿到会话 entry-point-mapping + js-api-extract,先补身份再进本 Skill需要判定是否为「业务本身该权限」 multi-role-recon(多角色/多租户探查)先画出权限边界不会拍脑袋
一句话 :本 Skill 是「拿到身份后能不能摸别人东西」的动作手册,不是「身份从哪里来」也不是「什么都能摸」的判决书。任何接口只要有对象标识符(数字 ID / UUID / global id / room_id / 任务 id / 文件 key / 资源 路径)且能看到跨归属主体的差异响应,都要进本 Skill;但如果你是在「越界可接管账号/可提权/可改价格/可绕认证」路上,请以上表中的主 Skill 为主路,本 Skill 只作为「资源归属闭环」补证 。