关于 injection-testing
injection-testing 是用于动态测试授权应用的安全技能,适用于不可信输入可能到达解释器的情况。它会梳理潜在入口、探测命令结构变化,并以受控且非破坏性的证据确认影响。
主要功能
- 01梳理输入到解释器的入口
- 02探测 SQL、Shell、模板及解析器注入
- 03用无害证据确认发现
- 04不外传数据地界定影响
- 05报告入口、载荷、证据与影响
适用场景
- 01测试授权应用中的注入缺陷
- 02通过时间或带外信号检查盲注
- 03记录有限影响以支持修复
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mn-youssef/ security-skills --skill injection-testing安装后在 Claude Code 中输入/injection-testing确认已加载。
附带文件references/injection-recipes.md
详细介绍
注入测试(查找/利用 — 输入进入解释器)
概述
当输入进入解释器执行的语言时,就会发生注入——SQL、Shell、模板引擎、XML/LDAP/XPath 解析器。本技能通过动态测试证明这一点;代码层面的模式见 security-code-audit/references/database.md 和 api-backend.md。
**核心原则:**找出输入改变命令结构的位置,而不只是改变其中的数据。 有效的注入是一个微小的结构性载荷,能够改变解释器的行为。
适用情况 / 跳过情况
- **适用情况:**不可信输入可以到达解释器——SQL/NoSQL 数据库、OS Shell、模板引擎或 XML/LDAP/XPath 解析器。
- **跳过情况:**不存在某类接收点 → 对应的注入类别不适用。
- **如果不适用:**指出缺少的解释器(例如“没有 SQL → SQLi 不适用”),只测试实际存在的接收点。此处部分适用很正常。
⚠️ 授权
仅测试你自己的/获得授权的应用;对有状态的载荷,仅在非生产环境中使用。切勿对真实数据使用 --dump,切勿在共享系统上使用 --os-shell/RCE,切勿使用 ; DROP 或破坏性载荷。确认问题,不要造成损害。
方法
- 映射接收点 — 找出所有可能到达查询/命令/模板/解析器的输入(使用审计结果)。
- 探测 — 发送一个破坏结构的字符,并观察行为是否变化(错误、结果不同、耗时变化)。
- 确认 — 从“发生了变化”进一步验证,获得受控且无害的证据。
- 限定影响范围 — 记录攻击者可能触及的内容;不要窃取真实数据。
快速参考 — 探测 → 确认
| 类型 | 探测 | 确认(无害) |
|---|---|---|
| SQLi | ' " ') → 错误/变化 | 布尔值 ' OR '1'='1;时间延迟 ' OR SLEEP(5)-- |
| 盲注 SQLi | 没有输出? | 基于时间/布尔值的差异 |
| NoSQLi | '、{"$ne":null}、[$gt]= | 通过运算符注入绕过身份验证 |
| 命令注入 | ;id ` | id``id``$(id)` |
| SSTI | ${7*7} {{7*7}} <%=7*7%> | 渲染出 49 → 针对特定引擎进一步验证 |
| XXE | 含外部实体的 XML | 带外请求/文件读取(无害的金丝雀数据) |
| LDAP | *)(uid=* | 过滤器被更改 |
| XPath | ' or '1'='1 | 节点选择发生变化 |
| CRLF | 反射到响应头中的 %0d%0a | 响应头/响应拆分 |
各类型的检测和安全确认载荷见 references/injection-recipes.md。
工具
使用 sqlmap 确认 SQLi(限定范围:使用较低的 --level/--risk,并加上 --batch;不使用 --dump/--os-shell),使用 Burp/ZAP 进行模糊测试,使用交互服务器(Burp Collaborator/interactsh)进行盲注/XXE 的带外交互。
通过 active-pentest 驱动这些工具。
输出
每项发现都应包括:接收点、结构性载荷、解释器处理载荷的证据(错误/耗时变化/带外交互),以及限定后的影响(例如“可能读取数据库”)。严重程度为 High–Critical。
后续处理
这通常可作为立足点/提权手段 → vulnerability-chaining;通过 security-hardening 修复(参数化、安全 API、允许列表、禁用外部实体、使用不包含结构的查询输出)。
常见错误
- 只测试 SQLi — SSTI、XXE、命令注入和 NoSQL 注入也可能藏在模板、文件解析器、搜索和 JSON 中。
- 漏掉盲注 — 没有可见输出 ≠ 不存在漏洞;应使用时间延迟/布尔值/带外交互。
- 为了“证明问题”而采取破坏性操作 —
SLEEP或49就足以证明问题;DROP是破坏行为。 - 忘记二阶注入 — 输入被存储后,在后续用于查询时触发注入。