mcpField
I
injection-testing

injection-testing

github.com/mn-youssef安全4938 次安装20 周前更新
代码仓库

关于 injection-testing

injection-testing 是用于动态测试授权应用的安全技能,适用于不可信输入可能到达解释器的情况。它会梳理潜在入口、探测命令结构变化,并以受控且非破坏性的证据确认影响。

主要功能

  1. 01梳理输入到解释器的入口
  2. 02探测 SQL、Shell、模板及解析器注入
  3. 03用无害证据确认发现
  4. 04不外传数据地界定影响
  5. 05报告入口、载荷、证据与影响

适用场景

  1. 01测试授权应用中的注入缺陷
  2. 02通过时间或带外信号检查盲注
  3. 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 或破坏性载荷。确认问题,不要造成损害。

方法

  1. 映射接收点 — 找出所有可能到达查询/命令/模板/解析器的输入(使用审计结果)。
  2. 探测 — 发送一个破坏结构的字符,并观察行为是否变化(错误、结果不同、耗时变化)。
  3. 确认 — 从“发生了变化”进一步验证,获得受控且无害的证据。
  4. 限定影响范围 — 记录攻击者可能触及的内容;不要窃取真实数据。

快速参考 — 探测 → 确认

类型探测确认(无害)
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 是破坏行为。
  • 忘记二阶注入 — 输入被存储后,在后续用于查询时触发注入。

评论

支持 Markdown