hunt-open-redirect · git:20260806.1b94651 · 2026-08-06 · sha256 cb5894b361741e5f
hunt-open-redirect git:20260806.1b94651A
Immutable. This exact content is served forever at /api/v1/blob/cb5894b361741e5f.
--- name: hunt-open-redirect description: 在授权渗透测试中挖掘开放重定向(open redirect)及其危害升级。当目标按用户可控参数做跳转(登录后 next、SSO returnUrl、注销、短链、回调)时使用——典型场景:绕过 URL 白名单跳到外站钓鱼、泄露 token/Referer、开放重定向作为 SSRF/OAuth token 窃取的跳板。适用目标类型 Web / REST API / SSO。触发场景包括用户说"测下开放重定向""这个 next/redirect 参数能跳外站吗""绕过重定向白名单""open redirect 偷 token"。输出:可跳外站的参数 + PoC + 危害升级的 finding(含 killed 记录)。 allowed-tools: Read, Grep, Glob, Bash --- # hunt-open-redirect · 开放重定向猎杀 只解决**开放重定向一类**:找到"按用户输入跳转且校验不严"的参数,绕过白名单跳到外部域,并评估危害升级(钓鱼、Referer/token 泄露、作为 SSRF/OAuth 窃取跳板)。判定靠**响应把浏览器导向攻击者控制的外部域**(`Location` 头或前端跳转)。 开放重定向本身多为中低危,价值在**升级**(配合 OAuth `redirect_uri`、SSRF、token 泄露)。默认只跳到**自控的无害标记域**证明可控,不做钓鱼/不诱导真实用户。绕过写法与真实报告见 `reference.md`。 ## Scope(授权范围) **先确认授权。** 落实:授权目标、可用的自控标记域(证明可跳外站)、是否评估升级链(OAuth/SSRF)。任一不清楚就停下问。 ## Goal 判定跳转参数能否被导向任意外部域(含白名单绕过),给出可复现 PoC 与危害升级路径(钓鱼/token 泄露/SSRF/OAuth),只跳自控域证明。 ## Workflow `scope-check → recon → hunt → validate → report`。 ### 1. scope-check - **动作**:写 `evidence/scope.txt`(marker_domain)。 - **命令**:`bash tools/recon.sh <target> --scope-only`。 - **终止条件**:scope 明确,否则 KILL。 ### 2. recon - **动作**:枚举跳转参数——`redirect`/`redirect_uri`/`next`/`return`/`returnUrl`/`goto`/`dest`/`continue`/`url`/`callback`,登录/注销/SSO/短链流程。 - **输出**:`recon/endpoints.json`。 - **命令**:`bash tools/recon.sh <target>`。 - **终止条件**:至少 1 个跳转参数。 ### 3. hunt - **动作**:对每个参数发绕过变体(`//marker`、`/\marker`、`https://marker`、`https://target@marker`、`https://target.marker`、`https://marker%23.target`、反斜杠/空白/编码),检查 `Location` 头或 meta/JS 跳转是否指向 marker 域。 - **输出**:`candidates.json`。 - **命令**:`python tools/hunt_openredirect.py --input recon/endpoints.json --output candidates.json --marker <你的域>`。 - **终止条件**:`candidates.json` 生成。 ### 4. validate → report - **动作**:过 **7-Question Gate**,对可行项确认跳外站并评估升级(token 是否随跳转泄露、能否喂给 OAuth redirect_uri/SSRF)取证。任一 NO → killed。 - **命令**:`bash tools/validate.sh candidates.json`。 - **终止条件**:每条 confirmed/killed,confirmed 有跳向 marker 域的证据。 ## 7-Question Gate(任一 NO 则 KILL) 1. 目标在**授权 scope** 内? 2. 参数确实**驱动跳转**(Location/前端导航)? 3. 有**客观信号**(响应把浏览器导向 marker 外部域),非猜测? 4. 确实**跳到任意外部域**(绕过了白名单,非仅站内跳转)? 5. **可复现**? 6. 已留存**跳转证据**(Location/JS)? 7. 影响可陈述(含升级路径),且只跳**自控标记域**、未诱导真实用户? ## Finding 输出格式 ``` ### <Title> - Severity: Critical | High | Medium | Low | Info - Asset: <入口 + 跳转参数> - Reproduction: <绕过 payload + 请求;Location/JS 跳转证据> - Impact: <钓鱼 / Referer-token 泄露 / SSRF / OAuth token 窃取(升级)> - Evidence: <evidence/ 响应含指向 marker 的跳转> - Status: confirmed | killed(<第几问 NO>) ``` ## 参考 白名单绕过写法、危害升级链、检测特征、真实报告见 `reference.md`。