SPEL注入详解
💡
原文中文,约4800字,阅读约需12分钟。
📝
内容提要
SPEL是一种比JSP的EL更强大的表达式语言,可方便快捷地对ApplicationContext中的Bean进行属性的装配和提取。常见漏洞为SPEL注入,可通过输入可控、使用StandardEvaluationContext、执行getvalue等操作方法实现。常用Payload包括计算表达式、执行命令、休眠线程、远程代码执行等。
🎯
关键要点
- SPEL(Spring表达式语言)是一种比JSP的EL更强大的表达式语言,主要用于Bean的属性装配和提取。
- 表达式语言是将固定格式与变量结合的工具,SPEL支持多种功能,如文字表达式、布尔运算、正则表达式等。
- SPEL的基本用法包括创建解析器、解析表达式和设置上下文,以便在执行表达式时获取值。
- SPEL使用#{...}作为定界符,可以引用对象、属性和方法,并使用T()运算符调用类的静态方法。
- SPEL的常用功能包括类类型表达式、方法调用、变量表达式和模板表达式。
- SPEL注入是一种安全漏洞,可能导致命令执行,条件包括评估表达式外部可控、使用StandardEvaluationContext和执行getValue等操作。
- 代码审计SPEL注入的过程包括检查parseExpression()方法的输入、上下文类型和是否执行了getValue。
- 常见的SPEL注入Payload包括数学计算、执行命令和线程休眠等操作。
- SPEL注入在多个框架中常见,如SpringBoot和Spring Data Commons等,需引起重视。
➡️