用途:在获得授权的自有或非生产环境中,动态验证不可信输入是否触达解释器(SQL/NoSQL数据库、OS shell、模板引擎、XML/LDAP/XPath解析器),从而证明注入漏洞是否存在。代码层面的模式见 security-code-audit/references/database.md 与 api-backend.md。
核心原则:查找输入改变命令结构、而不仅是数据的位置;有效的注入是一个改变解释器行为的微小结构性载荷。当某类接收点不存在时该类不适用,可说明缺失的解释器(如“无SQL → SQLi N/A”)并只测试存在的接收点。
方法:1) 映射接收点,列出可能进入查询/命令/模板/解析器的所有输入;2) 探测,发送破坏结构的字符并观察行为变化(报错、结果不同、时间差异);3) 确认,从“有变化”升级为受控且无害的证明;4) 界定影响,记录攻击者可能触达的范围,不导出真实数据。
快速参考(探测→无害确认):SQLi 用 ' " ) 触发报错或变化,确认用布尔 ' OR '1'='1 或时间 ' OR SLEEP(5)--;盲注SQLi 用时间/布尔差分;NoSQLi 用 '、{"$ne":null}、[$gt]= 做操作符注入绕过认证;命令注入用 ;id 等;SSTI 用 ${77}、{{77}}、<%=7*7%> 观察是否渲染49;XXE 用带外部实体的XML做带外请求或文件读取(无害金丝雀);LDAP 用 )(uid= 改动过滤器;XPath 用 ' or '1'='1 改变节点选择;CRLF 在反射头中用 %0d%0a 观察头/响应拆分。各类型的检测与安全确认载荷见 references/injection-recipes.md。
工具:sqlmap 用于SQLi确认(限定范围:--batch --level/--risk low,不使用 --dump/--os-shell),Burp/ZAP 用于模糊测试,盲注/XXE 的带外验证用交互服务器(Burp Collaborator/interactsh),通过 active-pentest 驱动。
输出:每条发现包括接收点、结构性载荷、被解释的证据(报错/时间/带外)以及受限影响(如“可读取数据库”),严重级别为高至严重。常作为立足点或提权原语,交由 vulnerability-chaining 处理,修复参见 security-hardening(参数化、安全API、允许列表、禁用外部实体、输出无结构查询)。
授权限制:仅限自有或已授权应用,有状态载荷限于非生产环境;绝不 --dump 真实数据,绝不在共享系统上使用 --os-shell/RCE,绝不使用 ; DROP 等破坏性载荷。确认而不破坏。
常见错误:只试SQLi,忽略模板、文件解析器、搜索与JSON中的SSTI、XXE、命令注入、NoSQL;漏掉盲注(无可见输出不等于不可注入,用时间/布尔/带外);为“证明”而破坏(SLEEP 或 49 足够,DROP 是破坏行为);忘记二次注入(存储的输入在后续查询时才注入)。