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等,需引起重视。
🏷️

标签

➡️

继续阅读