hunt-sqli · git:20260806.1b94651 · 2026-08-06 · sha256 390fd70d29430911
hunt-sqli git:20260806.1b94651A
Immutable. This exact content is served forever at /api/v1/blob/390fd70d29430911.
--- name: hunt-sqli description: 在授权渗透测试中挖掘 SQL/NoSQL 注入(SQLi、NoSQLi,含 WAF 绕过、盲注、堆叠查询、类型混淆注入)。当用户输入拼进 SQL/NoSQL 查询时使用——典型场景:id/搜索/排序/过滤参数、数组键当 SQL 片段、PHP 类型混淆、MongoDB `$where`/`$regex`、堆叠查询到 xp_cmdshell。适用目标类型 Web / REST API。触发场景包括用户说"测下 SQL 注入""这个参数能不能注入""盲注/时间注入试试""NoSQL/MongoDB 注入看一下"。输出:注入点 + 类型 + 证据的 finding(含 killed 记录)。 allowed-tools: Read, Grep, Glob, Bash --- # hunt-sqli · SQL/NoSQL 注入猎杀 只解决**注入到查询语句一类**(SQL 与 NoSQL)。核心是对每个参数按**错误型 → 布尔盲 → 时间盲**递进判活,识别数据库类型,必要时绕 WAF。判定靠**可控的响应差异/时延/报错**,只做**只读证明**(`sleep`/布尔差异/版本号),不 dump 真实数据、不改写数据。 注入可读写数据库甚至 RCE,敏感且可能破坏。默认只做**判活与最小证明**(拿到 DB 版本/布尔可控/时延),不 `DROP`/`UPDATE`/不批量导出真实数据。payload、绕过、真实报告见 `reference.md`。 ## Scope(授权范围) **先确认授权。** 落实:授权目标、允许深度(仅判活 / 允许读 schema / 禁止写与批量 dump)、是否允许时间盲注(会拖慢目标)。任一不清楚就停下问。 ## Goal 判定参数是否可注入查询,识别 DB 类型与注入类型(错误/布尔/时间/堆叠/NoSQL),给出可复现 PoC 与最小证明,不动真实数据。 ## Workflow `scope-check → recon → hunt → validate → report`。 ### 1. scope-check - **动作**:写 `evidence/scope.txt`(allow_time_blind / allow_schema_read)。 - **命令**:`bash tools/recon.sh <target> --scope-only`。 - **终止条件**:scope 明确,否则 KILL。 ### 2. recon - **动作**:枚举进查询的参数——`id`/搜索/排序(`order`/`sort`)/过滤/分页,JSON body(NoSQL),数组参数(`a[]=`)。 - **输出**:`recon/endpoints.json`。 - **命令**:`bash tools/recon.sh <target>`。 - **终止条件**:至少 1 个候选参数。 ### 3. hunt - **动作**:对每个参数按 `reference.md` 递进:①错误型(`'`、`"`、`)` 触发 SQL 报错)②布尔型(`' AND 1=1` vs `' AND 1=2` 响应差异)③时间型(`' AND SLEEP(6)`、`;WAITFOR DELAY`、`pg_sleep`)④NoSQL(`[$ne]`/`[$gt]`/`$where`)。以差异/时延判活。 - **输出**:`candidates.json`。 - **命令**:`python tools/hunt_sqli.py --input recon/endpoints.json --output candidates.json [--delay 6]`。 - **终止条件**:`candidates.json` 生成。 ### 4. validate → report - **动作**:过 **7-Question Gate**,对疑似点做最小证明(DB 版本/稳定布尔差)取证。任一 NO → killed。 - **命令**:`bash tools/validate.sh candidates.json`。 - **终止条件**:每条 confirmed/killed,confirmed 有差异/时延/报错证据。 ## 7-Question Gate(任一 NO 则 KILL) 1. 目标在**授权 scope** 内? 2. 参数确实**拼进查询**(错误/差异佐证)? 3. 有**客观信号**(SQL 报错 / 稳定布尔差 / 可控时延),非猜测? 4. 确实**可注入查询逻辑**(非普通参数校验报错)? 5. **可复现**(多次稳定,时延取中位排抖动)? 6. 已留存**报错/差异/时延**证据? 7. 影响可陈述,且**未 dump 真实数据、未写库**? ## Finding 输出格式 ``` ### <Title> - Severity: Critical | High | Medium | Low | Info - Asset: <入口 + 参数> - Reproduction: <注入类型 + payload + 请求;布尔/时延对照数据> - Impact: <数据读取 / 认证绕过 / 堆叠→命令 可达性> - Evidence: <evidence/ 报错 / 布尔差 / 时延日志> - Status: confirmed | killed(<第几问 NO>) ``` ## 参考 各注入类型 payload、DB 指纹、WAF 绕过、NoSQL、真实报告见 `reference.md`。