skills/code-audit/java/java-injection-audit/SKILL.md
Java 源码注入类漏洞审计。当在 Java 白盒审计中需要检测注入类漏洞时触发。 覆盖 6 种注入: SQL 注入(JDBC/MyBatis/Hibernate/JPA)、命令注入(Runtime.exec/ProcessBuilder)、 SSRF(HttpURLConnection/OkHttp/RestTemplate)、LDAP 注入、SpEL/OGNL 表达式注入、NoSQL 注入(MongoDB)。 需要 java-audit-pipeline 提供的数据流证据(EVID_*)作为审计输入。
npx skillsauth add wgpsec/AboutSecurity java-injection-auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
本 skill 聚焦源码层面判断"注入是否成立",核心是验证 Source→Sink 路径上的过滤是否充分。构造 payload、绕 WAF 等运行时利用技术属于对应黑盒 exploit skill 范畴。
| 类型 | 典型 Sink | 危险模式 | 严重度 |
|------|-----------|----------|--------|
| SQL 注入 | Statement.execute, session.createQuery, MyBatis ${}, JPA nativeQuery | 字符串拼接进 SQL | Critical-High |
| 命令注入 | Runtime.exec, ProcessBuilder.start, commons-exec | 用户输入拼入命令串或经 sh -c 包装 | Critical |
| SSRF | HttpURLConnection, OkHttpClient, RestTemplate, WebClient | 用户可控 URL 发起服务端请求 | High-Medium |
| SpEL/OGNL 注入 | ExpressionParser.parseExpression, ValueStack.findValue, @Value | 用户输入进入表达式解析上下文 | Critical |
| LDAP 注入 | DirContext.search, LdapTemplate.search | 用户输入拼入过滤器字符串 | High-Medium |
| NoSQL 注入 | MongoCollection.find, @Query, $where | 字符串拼接进查询或操作符注入 | High |
Step 1 -- 确认 EVID 证据点: 从 java-audit-pipeline Phase 3 产出的 EVID_* 证据中,筛选注入类条目(EVID_SQL_、EVID_CMD_、EVID_SSRF_、EVID_EXPR_、EVID_LDAP_、EVID_NOSQL_)。没有 EVID 证据的 Sink 只能标"待验证"。
Step 2 -- 判断过滤有效性: 追踪 Source→Sink 路径上每一步过滤/转义操作,评估其对当前注入类型是否有效。常见陷阱: PreparedStatement 但 SQL 片段仍由拼接构造、MyBatis ${} 被误用为 #{}、escapeshellarg 等 PHP 思维迁移到 Java 不适用。
Step 3 -- 评估绕过可能性: 过滤存在但不充分时,分析具体绕过路径(编码差异、类型混淆、二次处理等)。能给出绕过思路则标"已确认",否则标"待验证"并记录已知过滤方式。
Step 4 -- 确定严重度: 使用 java-audit-pipeline 的三维度评分公式 Score = R*0.40 + I*0.35 + C*0.25。注入类漏洞 Impact 通常较高(命令/表达式注入 I=3, SQL 注入 I=2-3),但需结合可达性和利用复杂度综合判断。
PreparedStatement + ? 占位符是安全的,Statement.execute(sql) 拼接即危险;注意 PreparedStatement 中仍可能存在拼接片段#{} vs ${}: #{} 参数绑定安全,${} 直接拼接危险;ORDER BY 场景常被迫用 ${},需白名单校验session.createQuery("from User where name='" + input + "'") 虽然是 HQL 仍可注入@Query(value="...", nativeQuery=true) 中 SpEL #{#param} 或字符串拼接均危险Sort 对象是安全的-flag 参数注入sh -c "cmd" 包装则退化为 shell 解释Runtime.getRuntime() 或 ProcessBuilder 可绕过静态扫描CommandLine.parse(userInput) 危险,addArgument(input, false) 安全new URL(userInput).openConnection() — 最基础的 SSRF 入口http/https(file:// 读文件、jar:// SSRF、netdoc:// 信息泄露)HttpURLConnection 默认跟随同协议重定向,需 setInstanceFollowRedirects(false)new SpelExpressionParser().parseExpression(userInput).getValue() — 直接 RCE__${expr}__ 预处理语法触发 SpEL 执行ActionContext / ValueStack 注入,历史漏洞众多SimpleEvaluationContext 限制 SpEL 功能(禁用类型引用和构造器)"(uid=" + username + ")" — 注入 *)(uid=*))(|(uid=* 可修改查询逻辑( ) * \ \0 或使用 Spring LDAP 的 LdapQueryBuilder / LdapEncoder, + " \ < > ; 等 DN 特殊字符BasicDBObject / Document 构造时如果拼接 JSON 字符串则可注入操作符@Query("{'name': ?0}") 参数化安全;字符串拼接构造查询危险$where 接受 JavaScript 表达式,用户可控时等价于代码执行Criteria.where("name").is(input) 是安全的参数化查询方式${} 已全部标记testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能