用途:面向 Java 框架中嵌入的表达式求值器开展 EL 注入测试,与针对模板引擎的 SSTI 相区分。
主要能力:
- 多语法探测与引擎区分:${77}、#{77}、%{7*7} 返回 49 的差异可区分 SpEL、Java EL 与 OGNL;${T(java.lang.Math).random()} 确认 SpEL,%{#context} 确认 OGNL。
- SpEL:覆盖 @Value、Spring Security 表达式、Spring Cloud Gateway 路由谓词与过滤器、Thymeleaf 预处理、Spring Data @Query;示例 RCE 载荷 ${T(java.lang.Runtime).getRuntime().exec("id")},并含带回显的 Commons IO 与 Spring StreamUtils 写法、ProcessBuilder 替代方案,以及 CVE-2022-22947 Gateway 流程:POST /actuator/gateway/routes/hacktest、POST /actuator/gateway/refresh、触发 GET /hackpath、清理 DELETE。
- OGNL:Struts2 基础 RCE 载荷 %{(#cmd='id').(#rt=@java.lang.Runtime@getRuntime()).(#rt.exec(#cmd))};_memberAccess 与 OgnlUtil 黑名单清除绕过;相关 CVE 含 S2-045、S2-046、S2-016、S2-048、S2-057;Confluence CVE-2021-26084 使用 queryString=\u0027%2b{3*3}%2b\u0027 探测。
- Java EL(JSP/JSF):Runtime 调用、pageContext 访问与反射载荷。
使用方式:依据语言特征按决策树判断框架,选择对应载荷,必要时处理沙箱限制;速查提供各引擎的 RCE 一行式与 CVE 探测命令。
适用场景:授权安全测试中确认存在 EL 求值且输入可控的 Java 应用。
限制:仅限合法授权测试;部分载荷受版本、沙箱与黑名单影响;文档未提供具体环境版本、成功条件与合规说明。