freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Thymeleaf模板注入学习
2024-12-30 21:42:28
所属地 四川省

     Thymeleaf在3.0.0-3.0.11存在模板注入,根据网上的资料,在3.0.12-3.0.15之间的版本虽然进行了修复,但是还存在可以绕过的问题,本文主要学习Thymeleaf模板注入的代码审计。通过模板注入需要关注返回的视图是否可控或者视图中的部分内容可控,且返回的内容不能被RestController、ResponseBody、Http ServletResponse、redirect重定向、forward转发等,因为被上述注解修饰或者重定向后,不会通过模板进行解析;还有一种场景,当返回类型为void时,springboot会默认从URL部分中获取视图名,如果路径可控,同样会存在模板注入的问题。

一、环境搭建

1、依赖引入。Spring-boot和thymeleaf做了很好的集成,在spring-boot中引入了spring-boot-starter-thymeleaf后,会通过版本依赖引入相对应的thymeleaf版本,比如spring-boot 2.2.0.RELEASE引入的thymeleaf版本为3.0.11.RELEASE,如下:

1735565727_6772a19fb40fe442f240c.png!small

2、controller代码。接口都是将前端输入的参数与返回的内容进行拼接,拼接后的内容为视图名。如/lang接口,当用户在前端输入的rtype的值为cn时,返回的视图名为index-cn,经过模板拼接后最终为index-cn.html,这样就可以找到具体的视图了。

1735565753_6772a1b9226f4656b38d0.png!small

二、代码审计

1、通过以下两种方法进行查找:

(1)逐个controller查找,比较费时;

(2)通过全局搜索返回部分内容可控的关键字"::",两个引号。

先看前三个接口,/lang、/lang1、/lang2,参数为rtype,返回类型为string,最后都通过return返回了视图,且无上述注解及response参数;再看第四个接口/path/{path},返回类型为void,无返回,但是输入信息通过了日志记录。

2、插入POC

(1)/lang1接口,该接口将输入信息作为了视图名,注意插入POC的时候要对关键的字符进行URL编码:

1735565778_6772a1d226b4c70c77e6c.png!small

(2)/path/{path}接口,该接口无返回

1735565795_6772a1e3cd15d5e24a06e.png!small

3、现在看第五个接口/lang3,该接口的参数类型为int,此时模板会进行类型转换,会报错,然后我使用String.valueOf(rtype)进行类型强制转换后,前端输入POC时,仍然会报错:

1735565818_6772a1fa142d4e6d7ec93.png!small

说明和返回类型也存在关系,在审计的时候要注意。

三、实战复现,这里以若依v4.6.0为例

1、确认Thymeleaf版本信息。这套源码在POM.XML中不能直接看到Thymeleaf版本,可以在External Libraries中看到版本号为3.0.11,或者在POM.xml通过spring-boot-dependencies找到依赖配置,Ctrl+左键可以找到spring-boot-dependencies-2.2.12.RELEASE.pom,在该文件中可以看到版本号:

1735565843_6772a213d5c052720d700.png!small

2、通过第1种方法未找到,通过第2种方法,找到几处,如下:

1735565859_6772a223905eb81f514f6.png!small

这里选择第1处进行测试,参加包括fragment、taskName、mmap:

1735565882_6772a23a609a5e99d8345.png!small

通过接口构造请求,插入POC:

1735565895_6772a2479df94b4dd1e57.png!small

另外还有几处,这里就不再赘述了。

# web安全 # thymeleaf
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者