表达式语言注入
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/expression-language-injection-lr-13wp
技能介绍
解决什么问题
Java 生态里,SpEL、OGNL、Java EL 这些表达式引擎常被框架直接嵌入到请求处理链路中。它们和 SSTI 看起来相似——都能用 ${7*7} 之类的探针触发计算——但底层是表达式求值器,不是模板渲染引擎。安全团队在排查时,往往会把两者的探测信号混为一谈,导致错误分类,甚至漏掉真正的高危点。本技能要解决的问题就是:在 Java 技术栈中,快速识别并利用 EL 注入,而不是套用 SSTI 的经验。
核心能力与工作流程
技能将重点放在三种主流 EL 方言上:
- SpEL:Spring 体系内,常见于 AOP、安全规则、自定义校验逻辑。
- OGNL:Struts2 等框架的参数求值引擎,历史上多次爆发高危 RCE。
- Java EL:JSP/JSF 页面内的表达式求值,通常在后端逻辑暴露时被利用。
攻击手册没有停留在基础语法,而是覆盖了几条关键路径:
- 沙箱绕过:分析
StandardEvaluationContext的限制,以及如何通过setVariable、ReflectivePropertyAccessor等接口绕开黑白名单。 _memberAccess操纵:针对 OGNL 场景,绕过MemberAccess策略,直接访问Runtime、ProcessBuilder等敏感类。- Actuator 滥用:当应用暴露了 Spring Boot Actuator 端点时,通过
/heapdump或/jolokia配合 SpEL 执行任意代码。 - 真实 CVE 链复现:整理历史上 EL 注入相关漏洞的利用链,便于理解实际影响。
在关联路由方面,技能明确区分了 SSTI 和 EL 注入:前者针对 Jinja2、FreeMarker、Twig 等模板引擎,后者针对 Java 框架内的表达式求值器。如果 EL 求值最终导致 JNDI 查询,则进一步引导到 JNDI 注入场景,避免混用攻击面。
适用边界与注意点
- 本技能仅限 Java 技术栈,不涉及 Python、Node.js 等其他语言的表达式注入。
- 每个框架的 EL 方言语法不同,手册中给出的载荷必须针对目标环境二次验证。
- Actuator 滥用路径依赖应用是否暴露了相应端点,实际测试时需先确认端点可达性。
- 沙箱绕过方法与框架版本强相关,遇到较新的安全补丁时,原始载荷可能失效。
- 不包含模板引擎的 SSTI 技巧,也不提供自动化利用脚本,仅作为技术分析和防御研究的参考。
使用场景
- 安全测试工程师排查Java应用时,需识别SpEL注入漏洞并验证沙箱绕过路径
- 渗透测试人员分析Struts2应用,要定位OGNL注入点并绕过memberAccess限制
- 开发人员审查Spring Boot应用时,需检测Actuator端点的SpEL利用风险
适合人员
- 安全工程师:需要在Java应用中定位EL注入漏洞,评估沙箱绕过风险
- 渗透测试人员:负责测试Struts2/Spring应用时,需掌握OGNL/SpEL注入的利用链
- Java开发人员:审查代码时需识别EL求值逻辑中的安全缺陷,防止注入风险