# Unauth Path Key Hunt

> 当未授权/零身份测试但路径不在主站 JS、禁止依赖登录 Network 截图、独立 H5/旧域名 NXDOMAIN/品牌迁域、兄弟域或同 IP Host 漏路径、网关 405 或 data 空数组、getRsaKey/JSEncrypt/前端加密被当成鉴权时调用。负责零身份公开面还原路径与密钥、响应指纹分流、加密证伪、迁域复查。JS 拆包见 recon-js-analysis；角色/IDOR 见 auth-access-control；路径已知后的全方法/BOLA 见 api-protocol-security。

- Skill: `zhaji2333/unauth-path-key-hunt` (Agent Skill)
- Install (CLI): `npx skillmds@latest add zhaji2333/unauth-path-key-hunt`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zhaji2333/unauth-path-key-hunt/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: zhaji2333 (https://skillmd.com/u/zhaji2333)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/zhaji2333/unauth-path-key-hunt

---


# unauth-path-key-hunt — 零身份公开面：路径与密钥猎杀

编排型 skill。只解决「没有后台账号、路径不在当前前端时，如何独立还原接口并证伪加密=鉴权」。不替代 JS 拆包、越权矩阵、API 全方法。

## 何时调用

- 未授权 / 攻击者没有该业务账号（纯零身份）
- 路径不在主站 JS；用户要求不要用登录 Network 截图当发现源
- 独立 H5、旧子域 NXDOMAIN、品牌迁域（旧 Host 301/消失）
- 兄弟域、同 IP、`--resolve` 换 Host 漏出路径
- 网关 `405 Method Not Allowed`、`200 data:[]`、短文案「链接不存在」
- `getRsaKey` / JSEncrypt / SM2 / 前端 AES，怀疑只是传输混淆

**不要调用（交给别人）**

- 攻击面不清、要广撒网拆 webpack / 脏收集 → `recon-js-analysis`
- 路径已通，打角色/IDOR/JWT/验证码 → `auth-access-control`
- 路径已通，全方法、BOLA、Swagger、走私 → `api-protocol-security`
- 调试面板/中间件/对象存储未授权 → `cloud-infra-supply-chain`
- 路径在 APK/小程序包里 → `android-security-audit` / `miniprogram-security`
- 已验证要成稿 → `report`

## 与其它技能分工

```
怀疑隐藏未授权
    │
    ▼
unauth-path-key-hunt     找 Host/路径/钥，证伪加密
    ├─ 拆 webpack / 脏收集 / 提字符串     → recon-js-analysis
    ├─ 路径已通，角色墙 / IDOR            → auth-access-control
    ├─ 路径已通，全方法 / 旧版 / 网关协议  → api-protocol-security
    ├─ 路径在包里                         → android / miniprogram
    └─ 已验证成稿                         → report
```

拆 JS、Wayback、Packer 的细则以 `recon-js-analysis` 为准，此处不重复。
跨轮线索落盘以 `hunt-clueboard` 为准：开工先读 `hunts/<目标>/CLUEBOARD.md`，P2 指纹/405/`[]`/迁域结论当轮写回，禁止只写在对话里。

## 铁律

1. 发现阶段禁止把「已登录 Network」当路径出处。截图只作假设，公开面复原才是证据。
2. 主站 JS 没有 ≠ 接口不存在。
3. 客户端能拿到的 RSA/AES/uuid ≠ 鉴权。
4. SPA 的 404 不是接口的 404。没到失败升级 L4 不准写「无此接口」。
5. 旧 H5 / 旧 Host 下线 ≠ 后端方法下线。

---

## P0 零身份约束

**允许的发现源：** 未登录 HTML/JS/map；CT / urlscan / Wayback / GitHub；兄弟域与同 IP；301 Location；公开文档；未登录可下的 APP/小程序包。

**不允许当发现源：** 业务账号登录后的 DevTools；报告截图里的 URL（降级为待验证假设）。

口令：截图里的路径 = 假设；公开面复原 = 证据。

---

## P1 入口地图

分清四类 Host，标 DNS/IP，不要只盯主域：

| 类 | 典型 | 下一步 |
|---|---|---|
| C 端壳 | 主站 / m / 品牌新域 Next/Vue | 在此搜路径常失败，记录后换场 |
| API 网关 | appgw / apigw / qr / gateway | P2 指纹，不要当 SPA 扫目录 |
| 独立业务 H5 | invoice / vat / asp / mag / 活动 CDN | 优先拆 JS、打 `/gp` `/mag` 等前缀 |
| 后台/SSO | passport / admin / 服务商域 | 记下 sid；零身份只证「墙在哪」 |

品牌新域、301 目标必须列入地图。

**通过门：** 至少标出「C 端壳 / 疑似网关 / 疑似业务 H5」三类。

---

## P2 响应指纹（禁止 `-L` 跟着 302 再看 body）

记录四元组：`状态码 / Content-Type / Server / body 形态`。

| 指纹 | 含义 | 动作 |
|---|---|---|
| SPA HTML 404（Next `X-Powered-By`，几十 KB index） | 前端路由吞路径，不是这个后端 | 换 Host |
| 网关 JSON：`no api` / `Route Not Found` / `divide: selector` | 网关活着，这条 route 没挂 | 换 Host 或前缀 |
| 业务 JSON：`success/code/message`，path 出现在 body | 真应用 | 进入 P4/P5 |
| 短 body 业务文案（「链接不存在」）vs 统一 404 页 | 路径存在、资源不存在 | 保留前缀，补 module/method |
| 302 → SSO | 有鉴权墙，不是「没有服务」 | 记下 Location 的 sid/应用名 |
| 405 `Request method 'GET' not supported` | 控制器在，方法不对 | 立刻 POST |
| 200 + `data:[]` | 已进控制器，只是没命中数据 | 补参数/加密/字段名 |
| 同 IP 换 Host → 403 / `404 Route Not Found` | 虚拟主机隔离 | 继续找对的 ServerName |

**通过门：** 每个候选路径都归入上表。禁止再写「404 所以没有」。

---

## P3 路径发现五源（并行）

优先级从「更像零身份攻击者」到「更脏」。webpack/脏收集操作见 `recon-js-analysis`。

| 源 | 做什么 | 通过信号 |
|---|---|---|
| 1 现网 JS | 首页、buildManifest、异步 chunk、baseURL | 路径或方法名字符串有公开出处 |
| 2 历史旁路 | urlscan / Wayback / CT / 第三方脚本引用的 Host | 旧 URL、CDN 活动页、发票/售后等业务词 |
| 3 兄弟域 + 同 IP | 对未解析旧 Host `--resolve` 到网关 IP | 对 Host=业务 200；错 Host=网关 404/403 |
| 4 命名习惯 | 有第一段后续猜：`/{svc}/{module}/{method}/{id}`、`/gp/{ctx}/{action}`、`ForFree`/`open`/`anon` | 405 或业务 JSON |
| 5 包 | C 端 Web 没有的方法名 | 交给 android / miniprogram，产物回到本 skill 打 Host |

主站源1 为空是常态，进入源2/3，不要结案。

**通过门：** 路径字符串能指出公开出处（JS 行 / urlscan / 兄弟域指纹）。没有出处仍是假设。

---

## P4 密钥还原与鉴权证伪

目标不是解密，是判断密码学有没有替代鉴权。

从 JS 必须对齐 6 项（提取步骤走 `recon-js-analysis`）：

1. 取钥接口（`getRsaKey` / `getPublicKey` / ticket）
2. 算法与填充（JSEncrypt 默认 PKCS#1 v1.5）
3. **POST 字段名**（响应里的 `uuid` 可能要改名为 `rsaUuid`）
4. 密钥生命周期（多次 GET 是否同一 uuid/公钥 → 静态密钥 ID）
5. 加密范围（只加密关键字，还是整包）
6. 无 Cookie 能否取钥

口令：

- 客户端能取的「密钥」，对攻击者不是密钥。
- 加密查询字 ≠ 证明你是谁。
- 字段名以 JS 为准，猜错会假阴性（空数组）。

### T0–T3 对照（详细越权矩阵见 `auth-access-control`）

| 编号 | 条件 | 仍业务成功则 |
|---|---|---|
| T0 | 无 Cookie、无 Authorization | 未授权 |
| T1 | 错误/过期 Token | 鉴权没校验 |
| T2 | 有登录但无该业务角色 | SSO 与 ACL 分离，记录「能进门不能办事」 |
| T3 | 去掉加密或改错绑定字段 | 加密是协议还是装饰 |

T0 成功 + 敏感字段 → 未授权成立。T0 仅 302/ACL、业务接口已下线 → 路径存在但利用链断，分开写。

---

## P5 字段对齐（空结果最易误判）

1. GET 目标方法 → 吃 405，改 POST
2. POST `{}` → `data:[]` 说明已进控制器
3. 明文关键字 / 错字段名 / 对字段名+密文 三组对照
4. 从**同类加密接口**抄字段名（改密用 `rsaUuid`，查询多半同一个）

示例（字段名错了会像没洞）：

| body | 常见结果 |
|---|---|
| `{}` | 200 `[]`（无鉴权） |
| `{title: 密文}` | `[]`（缺绑定） |
| `{title, uuid}` | `[]`（名错） |
| `{title, rsaUuid}` | 非空列表 |

**通过门：** 至少一种变体能把 `[]` 变成非空，或错误信息给出参数名。否则只写「接口暴露，危害未证实」。

路径对齐之后的全方法/BOLA/分页遍历交给 `api-protocol-security`。

---

## P6 迁域复查

旧站下线必须四问：

1. 旧 Host 是 NXDOMAIN 还是 301？301 的 Location 是新战场。
2. 新品牌域有没有把 API 一起搬走，还是只搬了 C 端壳？
3. 同 IP 上哪个 ServerName 还在反代这套前缀（`/gp` `/mag`）？
4. 前端 chunk 删了方法名，网关上方法还在不在？（405/200 比 JS 诚实）

---

## P7 失败升级

没到 L4 不准写「无此接口」：

| Level | 动作 |
|---|---|
| L1 | 主站 JS 全文搜 |
| L2 | 异步 chunk / 独立 H5 JS |
| L3 | 兄弟域、CDN、urlscan、CT |
| L4 | 网关 Host 探测 + 405 / 业务 JSON |
| L5 | 换入口：APP、小程序、开放文档 |
| L6 | 旧方法名 + 新 Host |
| L7 | Wayback 旧 JS 的 baseURL 打现网 |

---

## P8 危害落地与输出

- 列表类：公开公司简称作关键字；统计条数与含账号/税号字段数；正文只出脱敏样本。
- ID 类：先解决 ID 从哪来（公开格式、C 端自己的单、枚举）。没有合法 ID 不能宣称可打任意用户。
- 复现用 **curl**，证明请求无登录 Cookie。
- 覆盖度必填：✅已测 / ❌未测 / 🔄变种 / 💡关联；同步写进线索板第 7 节。
- 评估表走总纲第 5 节。成稿走 `report`（只读板上「已证实」行）。

---

## 通用决策句

1. 主站没有，去兄弟域和历史域。
2. SPA 的 404 不是接口的 404。
3. 「链接不存在」/405/空数组，往往比统一 404 更值钱。
4. 路径跟 Host 走，不跟品牌官网走。
5. 前端能取的 RSA/AES/uuid 只是协议，不是登录。
6. 加密字段名以 JS 为准，猜错就假阴性。
7. H5 下线只删了壳，旧 method 可能还在网关上。
8. 截图证明利用，公开面证明发现。

类型对照：角色隔离后台（C 端无路径）/ 专项独立 H5 / 换皮迁域 / 前端已删后端未下。四类可叠加。

---

## 修复（未授权接口）

- 网关统一鉴权；`ForFree`/`open`/`anon` 默认视为危险命名，必须有身份或强频控+最小字段。
- 前端加密不能替代登录；取钥接口同样要鉴权或只对已登录会话下发。
- 下线 H5 必须同时下线路由/控制器，不能只删 DNS。
- 企业抬头等财务身份禁止对未登录返回完整银行账号。

