원클릭으로
idor-detection
IDOR 水平越权检测 — 通过替换资源标识符(ID/UUID/路径)访问他人资源的风险;适用于用户资料、订单、文档、租户隔离场景。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
IDOR 水平越权检测 — 通过替换资源标识符(ID/UUID/路径)访问他人资源的风险;适用于用户资料、订单、文档、租户隔离场景。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
白盒建模——一次深度建模产出五张共享模型:项目架构(技术栈/分层/框架自有封装/闭源依赖位置)、 入口点(路由/中间件信任边界)、认证与权限(会话/角色/多租户/归属字段)、业务(实体/流程状态机/ 业务不变量/高价值资产)、全局威胁(攻击面×漏洞类别的适用性映射,供下游逐一全测)。本能力不做漏洞判定,为后续 漏洞维度分析建立共享底图。
OS 命令注入综合检测——覆盖直接命令拼接 / shell 元字符 / 参数注入 / 间接 RCE,按回显 / 时间 / 带外通道分诊。 流量中参数值含主机名 / URL / 文件名 / 命令片段、响应里出现 shell 错误关键字(`/bin/sh` / `cmd.exe` / `command not found`)、注入 `sleep N` 耗时增加、上传后异步处理链路时使用。
文件上传多策略综合检测——覆盖扩展名 / MIME / 魔术数 / 解析漏洞 / 上传链组合(LFI / Zip Slip / SVG XSS / SVG XXE)。 流量含 multipart/form-data 上传、响应回显落盘路径、上传后文件可被 GET 解析、上传字段含 filename / path 可控时使用。
检测路径穿越和本地文件包含(LFI)风险;当目标存在文件读取/下载/预览功能且含路径参数时触发;适用于文件下载、日志查看、模板加载等场景。
黑盒建模 — 迭代式攻击面建模,按站点级 / 页面级 / 功能级三粒度推进;进入新页面即触发一次页面级建模、切换新身份各刷新一次,产出端点账本与页面语义模型,为后续漏洞维度的适用性判断提供依据。
敏感信息泄露检测 — 检测 API 响应、错误回显、日志、响应头、备份/元数据文件中是否暴露未脱敏的 PII / 凭证 / 内部地址 / 系统配置;适用于所有返回业务数据或错误信息的端点。
SOC 직업 분류 기준
| name | idor-detection |
| description | IDOR 水平越权检测 — 通过替换资源标识符(ID/UUID/路径)访问他人资源的风险;适用于用户资料、订单、文档、租户隔离场景。 |
| when-to-use | 当通过替换资源标识符(ID/UUID/路径)可能访问他人资源时 |
| allowed-tools | bash,read_file,list_files,rg |
| user-invocable | false |
IDOR 成因:source(用户可控的资源标识——path param / query / json body 字段 / header / cookie 中的 id/uuid/订单号/邀请码/任意"指向某条资源"的值)→ sink(资源访问决策:数据库查询不带 owner/tenant 过滤、文件路径不验所有权、API 按 ID 直接返回任意资源、对象引用不校验归属)。判定按 sink 语义"是否将当前请求主体与目标资源归属绑定校验"——业务命名(订单号、工单号、邀请码、UUID)只是表层。详见同根目录 pentest/web-security-testing/SKILL.md 漏洞成因图谱 · IDOR 行(不在本 skill 重复成因)。
以下是已知的常见 IDOR 触发线索,作为基线起点而非必检硬清单。结合目标代码与上下文动态调整:
[x] done[-] n/a (原因),原因要具体到代码事实[+] added (来源)基线触发线索按"sink 语义"分类(不按业务命名):
/api/<resource>/{id} / /api/<resource>?id= 形态,包括 user / profile / order / ticket / message / document / contract/files/{id} / /attachments/{name} / ?file_id= 按 ID 直发文件流?ids=1,2,3 / body {"ids":[...]} 批量拉取(往往逐项归属校验缺失)/export?order_id= / /report?contract_id= 按 ID 出导出文件/users/{uid}/orders/{oid}(外层 uid 是否真和当前主体一致需校验)tenant_id / org_id 的查询接口,归属边界不只看 owner 还看租户db.Where("id = ?", id).First(&res) 等不带 owner / tenant 条件的查询;按 path 直接 os.Open(...) 不校验归属加载本 skill 时按这些问题思考:
A 自有资源 与 B 自有资源。common/closure-verification.md 的《破坏性 / 不可逆动作的闭环边界》执行——优先哨兵自证或非破坏差分,二者都做不到就停 suspected,不得对真实业务数据执行破坏动作来强行闭环。recon-methodology 产出的 shared/models/site-model.md 端点总表)查询所有"按 ID 取资源"的端点,按 sink 语义而非业务名筛选账号 A 凭证不变,仅将资源标识替换为 B 资源并重放,观察是否能读取/操作 B 资源。验证响应中归属字段确为 B 主体(不是 A 自己的 / 不是公开样本)。
将资源标识或归属参数置空、置 0、置 null、或整条删除(?id=、?user_id=0、删除 body 字段),探测后端是否 fail-open——空归属退化为「查全表 / 默认放行」从而泄露他人数据或绕过归属校验。
user_id=A&user_id=B、query 与 body 同名冲突、JSON 重复键),探测后端取首/取尾/合并的差异/v1 vs /v2)访问,鉴权严格度可能不一致次级向量(主向量无果时补测):批量接口的"逐项归属"检查是否生效(
ids=自己的,别人的是否混入他人数据);间接对象引用(订单号 / 邀请码)枚举或泄露后的可访问性。
db.Where("id = ?", c.Param("id")).First(&order) — 查询不带 owner_id 过滤(path-id-query-no-owner-filter-idor)c.File(filepath.Join(attachRoot, c.Query("name"))) — 按文件名直发,未校验归属(attachment-filename-direct-serve-idor)db.Find(&users, c.QueryArray("ids")) — 批量接口逐项归属未校验(batch-ids-no-owner-filter-idor)db.Where("uuid = ?", uuid).First(&doc) — UUID 不可枚举但泄露后无归属校验(uuid-leak-no-owner-check-idor)以下是 IDOR 维度的典型窄化误判:
/api/users/{id} → 跳过其他资源类型" — 错。每种资源类型(订单 / 工单 / 附件 / 消息 / 报表 / 合同 / ...)的 owner 校验逻辑独立实现,需独立测,不能用一个端点结论代表全站为什么这里是「必须」:反例义务属于交付契约——"未发现 IDOR"或"已防护"结论是覆盖完整性的产物声明,缺失反向验证清单会让下游误信"该维度全站安全"。
写"未发现 IDOR"或"归属校验已生效"前,产物必须包含:
清单不完整 → 结论降级为 partial-coverage 并显式声明未覆盖范围(例如:仅测了用户资料类、未测附件 / 工单 / 报表)。
通用闭环口径见同根目录 common/closure-verification.md(技能表 path 列同一抽取根下,需要时 read_file 读取)。核心:结论须形成「输入 → 处理 → 真实危害 → 可复核证据」完整证据链;仅凭状态码、响应差异等中间信号最多判 suspected,证明跨主体真实读取/写入才判 confirmed。
confirmed| 现象 | 判定 |
|---|---|
| 账号 A 成功读取或修改账号 B 资源,并通过真实回读或状态变化证明跨主体影响成立 | confirmed |
| 行为异常(如 200 空壳)但尚未证明跨主体真实读取或写入效果 | suspected |
| 账号 A 无法访问 B 资源(403/404 且无泄露) | not vulnerable |
| 只测了部分资源类型(如仅用户资料),未覆盖附件 / 工单 / 批量 / 间接对象引用 | partial-coverage(不得宣称 safe) |
不可逆动作例外:上表 confirmed 行涉及对 B 资源删除/覆盖/不可逆写时,按
common/closure-verification.md《破坏性 / 不可逆动作的闭环边界》——不得对 B 的真实资源执行,改用 B 名下哨兵资源或非破坏差分,二者都做不到则降suspected。
user_id/tenant_id 决策权限,归属字段从服务端 session/token 取