0x00 Introduction
本文中所有内容仅限于合法的安全研究、学术探讨及授权测试场景。任何个人或组织在使用本文所述技术时,须严格遵守《中华人民共和国网络安全法》和《中华人民共和国刑法》及相关法律法规,确保所有行为均在法律允许范围内。任何个人或组织因违反上述条款导致的后果,作者及内容贡献者不承担任何责任。
Thymeleaf 是一个用于网页开发的模板引擎,主要用在 Java 语言的项目中,是用来生成动态网页的。根据其语法创建对应的模板后,就能将后端传来的数据动态的展示到前段网页上,实现让网页动态显示不同的信息。
Thymeleaf 官网:https://www.thymeleaf.org/
Thymeleaf 官方文档:https://www.thymeleaf.org/documentation.html
0x01 Usage
下述将从零开始创建 SpringBoot+Thymeleaf 项目,来说明 Thymeleaf 的核心语法及其简单的使用。
点击“创建”并删除其他无用文件后的项目结构如下所示。其中 java
目录是用于存放代码的,目录 resources
是用于存放静态资源(包括:html、css、js、img、模板等)。
默认情况下,使用 Thymeleaf 模板引擎的 SpringBoot 项目会自动扫描 resources/templates
目录下的模板文件(可通过 application.properties
配置文件进行更改)。所以,为了能被识别,首先需要创建 templates
目录。
在开发中 controller
(控制器)层是用于接收请求,并交给对应 Service
层处理。将 Service
层的处理结果进行响应。且根据开发的规范,控制器一般都放在 controller
目录下。
启动项目后,访问 8080(默认)端口,即会返回 test.html 页面。
Thymeleaf 中标准表达式语法有如下几个:
表达式名 | 语法 | 作用 |
---|---|---|
|
${···} |
|
|
*{···} |
|
|
#{···} |
|
|
@{···} |
|
|
~{···} |
|
|
__···__ |
|
通过 Model
(模型) 来定义一个变量 msg
,模板通过 [[${msg}]]
来取得变量的值。
0x02 Vulnerability
SSTI(Server Side Template Injection,服务端模板注入),模板引擎组件是用于动态页面的渲染,如果模板引擎的参数是用户可控的,那就可构造恶意的输入实现 RCE。
在 CTF、Bypass WAF、沙箱逃逸、不同版本等情况下,Payload 又有些许的不同,具体原理和不同的利用方法,可以参考 0x03 Reference
一节中给出的链接。
如下使用 spring-view-manipulation 项目来作为 Thymeleaf SSTI 漏洞的演示示例。靶场下载地址:https://github.com/veracode-research/spring-view-manipulation
下载对应项目,通过 idea 打开并删除其他没用文件,目录结构如下所示:
该项目端口在 8090 上,如下则表示成功启动:
1. Return 可控
如果 return
语句的内容可控,那么就可以构造恶意的模板注入语句实现 RCE。
在测试时,如未成功,则可以将 Payload 进行 URL 编码后再次进行利用。注:@RequestParam
注解表示获取指定请求参数的值。
将请求方法改为 POST 类型进行测试,同样可以实现 RCE。
2. URL 可控
__${T(java.lang.Runtime).getRuntime().exec("calc")}__::.x
不仅是 GET 请求,其他请求 POST、HEAD、PUT、OPTION、DELETE 等经测试都可以触发 RCE。
3. 模板内容可控
<!DOCTYPE HTML><htmllang="en"xmlns:th="http://www.thymeleaf.org"><divth:fragment="header"><h3>Spring Boot Web Thymeleaf Example</h3></div><divth:fragment="main"><spanth:text="__${msg}__"></span></div></html>
${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("calc").getInputStream()).next()}
0x03 Reference
https://xz.aliyun.com/news/9962
https://forum.butian.net/share/1922
https://www.anquanke.com/post/id/254519
https://www.freebuf.com/articles/network/250026.html
https://mp.weixin.qq.com/s/pBt3Q0VF44AD7tTXxCD7Kg
https://github.com/veracode-research/spring-view-manipulation
原文始发于微信公众号(JJ1ng):Thymeleaf SSTI
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论