From f59c82a2ca7633e89855dc122db26b209e2c8b34 Mon Sep 17 00:00:00 2001 From: test Date: Mon, 23 Jun 2025 20:22:16 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=AE=A1=E8=AE=A1=E7=B3=BB?= =?UTF-8?q?=E5=88=97-=E5=9F=BA=E7=A1=80=E7=AF=87-SSTI-Thymeleaf=E6=A8=A1?= =?UTF-8?q?=E7=89=88=E6=B3=A8=E5=85=A5=E6=BC=8F=E6=B4=9E=E3=80=81=E3=80=90?= =?UTF-8?q?=E6=BC=8F=E6=B4=9E=E5=A4=8D=E7=8E=B0=E3=80=91Apache=20Tomcat=20?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E6=89=A7=E8=A1=8C=E6=BC=8F=E6=B4=9E=EF=BC=88?= =?UTF-8?q?CVE-2025-24813)=E3=80=81=E3=80=90=E6=88=90=E5=8A=9F=E5=A4=8D?= =?UTF-8?q?=E7=8E=B0=E3=80=91GeoServer=20XXE=E6=BC=8F=E6=B4=9E=20(CVE-2025?= =?UTF-8?q?-30220)=E3=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data.json | 5 +- ...】GeoServer XXE漏洞 (CVE-2025-30220).md | 142 +++++++++ ...at 命令执行漏洞(CVE-2025-24813).md | 129 ++++++++ ...础篇-SSTI-Thymeleaf模版注入漏洞.md | 278 ++++++++++++++++++ 4 files changed, 553 insertions(+), 1 deletion(-) create mode 100644 doc/2025-06/【成功复现】GeoServer XXE漏洞 (CVE-2025-30220).md create mode 100644 doc/2025-06/【漏洞复现】Apache Tomcat 命令执行漏洞(CVE-2025-24813).md create mode 100644 doc/2025-06/代码审计系列-基础篇-SSTI-Thymeleaf模版注入漏洞.md diff --git a/data.json b/data.json index de01a5af..c6c28aff 100644 --- a/data.json +++ b/data.json @@ -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)" } \ No newline at end of file diff --git a/doc/2025-06/【成功复现】GeoServer XXE漏洞 (CVE-2025-30220).md b/doc/2025-06/【成功复现】GeoServer XXE漏洞 (CVE-2025-30220).md new file mode 100644 index 00000000..d91aa49b --- /dev/null +++ b/doc/2025-06/【成功复现】GeoServer XXE漏洞 (CVE-2025-30220).md @@ -0,0 +1,142 @@ +# 【成功复现】GeoServer XXE漏洞 (CVE-2025-30220) +弥天安全实验室 弥天安全实验室 2025-06-23 14:26 + +# + +网安引领时代,弥天点亮未来   +  + + + + + +  + +![Image](https://mmbiz.qpic.cn/mmbiz_png/MjmKb3ap0hDCVZx96ZMibcJI8GEwNnAyx4yiavy2qelCaTeSAibEeFrVtpyibBCicjbzwDkmBJDj9xBWJ6ff10OTQ2w/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "") + + +**0x00写在前面** + +**本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需自行负责!** + +![Image](https://mmbiz.qpic.cn/mmbiz_png/MjmKb3ap0hDCVZx96ZMibcJI8GEwNnAyx4yiavy2qelCaTeSAibEeFrVtpyibBCicjbzwDkmBJDj9xBWJ6ff10OTQ2w/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "") + + +**0x01漏洞介绍** + +![](https://mmbiz.qpic.cn/mmbiz_png/MjmKb3ap0hDvdqOZcpaib7wQRrZ0CbDJqn5NvJgGnNQwacrZB540jE45Kg1jkDnNRqBHzgDeSsnHYK3ROrZicEQg/640?wx_fmt=png&from=appmsg "") + +      + +GeoServer是GeoServer开源的一个用 Java 编写的开源软件服务器。允许用户共享和编辑地理空间数据。 + +GeoServer存在代码问题漏洞,该漏洞源于XML外部实体处理不当,可能导致信息泄露。 + + +![Image](https://mmbiz.qpic.cn/mmbiz_png/MjmKb3ap0hDCVZx96ZMibcJI8GEwNnAyx4yiavy2qelCaTeSAibEeFrVtpyibBCicjbzwDkmBJDj9xBWJ6ff10OTQ2w/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "") + + +**0x02影响版本** + +GeoTools: "29.0<=GeoTools<=31.6, <28.6.1" + +![](https://mmbiz.qpic.cn/mmbiz_png/MjmKb3ap0hDvdqOZcpaib7wQRrZ0CbDJqKJlFSaX6ichQD9d7q75DRJib0XdazrEV7CLSI5K1X3uNwNRxLzcial1tA/640?wx_fmt=png&from=appmsg "") + + +![Image](https://mmbiz.qpic.cn/mmbiz_png/MjmKb3ap0hDCVZx96ZMibcJI8GEwNnAyx4yiavy2qelCaTeSAibEeFrVtpyibBCicjbzwDkmBJDj9xBWJ6ff10OTQ2w/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "") + + +**0x03漏洞复现** + +1.访问漏洞环境 + +![](https://mmbiz.qpic.cn/mmbiz_png/MjmKb3ap0hDvdqOZcpaib7wQRrZ0CbDJqxVEgxFpX2jE6jfPezCW55L4os99IPcPUumxw0qsOQicvF31g9NbLKPA/640?wx_fmt=png&from=appmsg "") + +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 + + + + +``` + +        通过DNSlog回显,判断漏洞存在 + + +![](https://mmbiz.qpic.cn/mmbiz_png/MjmKb3ap0hDvdqOZcpaib7wQRrZ0CbDJqBIhcXsSH3q8Eaiby40puicsSKsdKE6D4xZONxQsrWLich9zzTsWMGUTZg/640?wx_fmt=png&from=appmsg "") + + +3.Yakit插件 +测试 + +![](https://mmbiz.qpic.cn/mmbiz_png/MjmKb3ap0hDvdqOZcpaib7wQRrZ0CbDJq5Oia2ePfs861mCWDIIKc5tXSyGlRibmnmKHQtr5wYKkIAWmRkBzB30RQ/640?wx_fmt=png&from=appmsg "") + + +![Image](https://mmbiz.qpic.cn/mmbiz_png/MjmKb3ap0hDCVZx96ZMibcJI8GEwNnAyx4yiavy2qelCaTeSAibEeFrVtpyibBCicjbzwDkmBJDj9xBWJ6ff10OTQ2w/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "") + + +**0x04修复建议** + + +目前厂商已发布升级补丁以修复漏洞,补丁获取链接: + +可以使用以下命令查看版本:`mvn dependency:list | grep geotools`。 + +建议尽快升级修复漏洞,再次声明本文仅供学习使用,非法他用责任自负!                      +``` +https://geoserver.org/download/ +https://github.com/geoserver/geoserver/releases/tag/2.27.1 +``` + + + + +弥天简介 + +学海浩茫,予以风动,必降弥天之润!弥天安全实验室成立于2019年2月19日,主要研究安全防守溯源、威胁狩猎、漏洞复现、工具分享等不同领域。目前主要力量为民间白帽子,也是民间组织。主要以技术共享、交流等不断赋能自己,赋能安全圈,为网络安全发展贡献自己的微薄之力。 + +口号 网安引领时代,弥天点亮未来 + + + +![Image](https://mmbiz.qpic.cn/mmbiz_gif/b96CibCt70iaaqjXT4YxgHVARD1NNv0RvKtiaAvXhmruVqgavPY3stwrfvLKetGycKUfxIq3Xc6F6dhU7eb4oh2gg/640?wx_fmt=gif&wxfrom=5&wx_lazy=1&tp=webp "") + +  + + +知识分享完了 + +喜欢别忘了关注我们哦~ + +学海浩茫, + +予以风动, + +必降弥天之润! + + +   弥  天 + +安全实验室 + +![Image](https://mmbiz.qpic.cn/mmbiz_jpg/MjmKb3ap0hDyTJAqicycpl7ZakwfehdOgvOqd7bOUjVTdwxpfudPLOJcLiaSZnMC7pDDdlIF4TWBWWYnD04wX7uA/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "") + + + diff --git a/doc/2025-06/【漏洞复现】Apache Tomcat 命令执行漏洞(CVE-2025-24813).md b/doc/2025-06/【漏洞复现】Apache Tomcat 命令执行漏洞(CVE-2025-24813).md new file mode 100644 index 00000000..43a8875f --- /dev/null +++ b/doc/2025-06/【漏洞复现】Apache Tomcat 命令执行漏洞(CVE-2025-24813).md @@ -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 +。 + +![upload5image-20250321211125092.png](https://mmbiz.qpic.cn/mmbiz_jpg/UM0M1icqlo0m7IMzmyBesqxANnoQ2gekwXJta5Wgcwc8rOdbaJspzy1fn1icxOFKNicrpNe02TQ0x5ABtUOzXMvyQ/640?wx_fmt=jpeg&from=appmsg "") + +   +该漏洞的核心在于不完整 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,启用写入功能 +``` +``` + +![upload5image-20250321205642707.png](https://mmbiz.qpic.cn/mmbiz_jpg/UM0M1icqlo0m7IMzmyBesqxANnoQ2gekwNBicicwzP79VwUAv8dICwtQTOHiaSXQRCzibUlWxTKyTb7FGjGvib8eNB3A/640?wx_fmt=jpeg&from=appmsg "") + +条件二、PUT方法默认开启 + +条件三、在conf/context.xml中,开启File文件会话存储 +``` +``` + +![upload5image-20250321205736018.png](https://mmbiz.qpic.cn/mmbiz_jpg/UM0M1icqlo0m7IMzmyBesqxANnoQ2gekwDibE3GibA3icWIxxxvjzpfwwllC2xnlqjMdbLiaicoFjnNLXVvbdZNOeGPA/640?wx_fmt=jpeg&from=appmsg "") + +条件四、下载 commons-collections-3.2.1.jar, 把 jar 包放入webapps\ROOT\WEB-INF\lib +目录下,如果没有这个目录就创建一个 +``` +``` + +![upload5image-20250321205923994.png](https://mmbiz.qpic.cn/mmbiz_jpg/UM0M1icqlo0m7IMzmyBesqxANnoQ2gekwnX61Bd5AibP7JK58amfPYBa6GqXa0gckyYkFICUEfLvYBLfKkYgwia1w/640?wx_fmt=jpeg&from=appmsg "") + +环境搭建好后就可点击bin目录下面的startup.bat +启动环境。 + +![upload5image-20250321232535464.png](https://mmbiz.qpic.cn/mmbiz_jpg/UM0M1icqlo0m7IMzmyBesqxANnoQ2gekwT3YBz5pdhv1DmgLsXrYLQXu2R9dicKbczHQpdiazlDicQZFCXGta2DRew/640?wx_fmt=jpeg&from=appmsg "") +## 漏洞复现 + +【Yso-Java Hack】模块生成一个利用payload: + +![upload5image-20250321174901535.png](https://mmbiz.qpic.cn/mmbiz_jpg/UM0M1icqlo0m7IMzmyBesqxANnoQ2gekwWNGHBfsLEQSjXkicXUbS7FHUjQq71dSeehAAfzG6qdGxpvia68nvTynQ/640?wx_fmt=jpeg&from=appmsg "") + +在使用该数据包进行上传时,请务必确保以下几点: + +1. **Range 头字段的分块值必须与 Content-Length 完全一致,** +1. **Content-Length 的值需大于目标文件的当前长度,以此确保能覆盖原有内容。** +``` +``` + + +下面poc可触发 +``` +``` + + +也能够上传 webshell,只需对执行命令进行修改即可。默认情况下,执行 cmd 的位置是 bin 目录,将 webshell 上传到该目录是没有用的,所以修改一下路径就行。其他诸如反弹 shell 等操作,原理都是一样的。 + + +要是写入失败,有可能是本地普通用户没有写入文件的权限,对权限进行设置后就可以成功写入了。 +``` +``` + + + +你上传的 JSP WebShell 确实已成功写入服务器,但由于 Tomcat 的安全机制限制,该文件可能被标记为不可执行或不可访问。 + +![upload5image-20250322210814834.png](https://mmbiz.qpic.cn/mmbiz_jpg/UM0M1icqlo0m7IMzmyBesqxANnoQ2gekwNWX1uVoBZv5abggO5ibbUs7N0H3oDR7U47WHict0MILa6gfNeHKlsz8A/640?wx_fmt=jpeg&from=appmsg "") +# 修复方案 + +目前Apache官方已公布漏洞公告,可下载补丁更新:https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq + +领导说不点「推荐」就扣我鸡腿!救救孩子吧。 + +![图片](https://mmbiz.qpic.cn/mmbiz_png/UM0M1icqlo0knIjq7rj7rsX0r4Rf2CDQylx0IjMfpPM93icE9AGx28bqwDRau5EkcWpK6WBAG5zGDS41wkfcvJiaA/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "") + +声明: +技术文章均收集于互联网,仅作为本人学习、记录使用。 +侵权删 +! +! + diff --git a/doc/2025-06/代码审计系列-基础篇-SSTI-Thymeleaf模版注入漏洞.md b/doc/2025-06/代码审计系列-基础篇-SSTI-Thymeleaf模版注入漏洞.md new file mode 100644 index 00000000..d744423e --- /dev/null +++ b/doc/2025-06/代码审计系列-基础篇-SSTI-Thymeleaf模版注入漏洞.md @@ -0,0 +1,278 @@ +# 代码审计系列-基础篇-SSTI-Thymeleaf模版注入漏洞 + 闪石星曜CyberSecurity 2025-06-23 08:49 + +![](https://mmbiz.qpic.cn/sz_mmbiz_gif/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Er9m1ZBsCDwBKMTNZny1xUesHEdZfVl5W0S5N9tkUgfaKhXSWqJCQAcA/640?wx_fmt=gif&from=appmsg "") + +本篇为代码审计系列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 文件),定义页面结构和动态占位符。 + + + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErR9DZO0kfCYmDf8n3YIl4mY8UjnWjABQoQGH4d33LwLmADu4RWicov1w/640?wx_fmt=png&from=appmsg "") + +- 准备数据模型:在后端代码中,准备需要渲染的数据模型。 + + + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErK4wGk0rrjju2Tj39VTJIWytQvurx5mibKVKZP9ahIGcwOrIib9M4BU8w/640?wx_fmt=png&from=appmsg "") + +- 渲染模板:Thymeleaf 的TemplateEngine将模板与数据模型结合,生成最终的 HTML 内容。 + + + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErCXPn7cW66x9Kk80mLdrHafG8ibBsR2ribJibwFK13p2O9paKRCXTCJJ0g/640?wx_fmt=png&from=appmsg "") + +- 返回渲染结果:将渲染后的 HTML 内容返回给客户端(如浏览器)。 + + + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErtD2wIlk8VDDFqS6Za5NdYicic2KFTWIoNiblPGYpUJG6kibJx4GibNZcdiaw/640?wx_fmt=png&from=appmsg "") + + +三 + + 漏洞视角Thymeleaf模版原理及防范 + +Thymeleaf模版注入漏洞属于SSTI类漏洞,触发漏洞根因是在用户输入参数后模板渲染前Thymeleaf引擎使用Spel解析阶段造成Payload被执行,且不同版本的Thymeleaf模版会有不同的漏洞触发场景。 + +3.1漏洞场景研究 + +示例漏洞场景项目https://github.com/veracode-research/spring-view-manipulation/ + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Er9S3Z1vP417MR1A0U0lv925XopIic0zcUFAJqEXAZnXp2r4FAO1z91Zw/640?wx_fmt=png&from=appmsg "") + +Thymeleaf模版版本为3.0.11 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErnUuXwiaJvH9icXnaYrk9u1yWau5nNTsaSPh01FMyyPKOiapY2uk6icraew/640?wx_fmt=png&from=appmsg "") + +3.1.1表达式拼接注入 + +直接拼接注入表达式经测试不可行 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Erjy0ekE3Tt17YBzYKzYUKp9vJpqdibib53RULiclWd5v4O6piaiaJFnvMHtQ/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9EreRayGiayTFJandO7wnmW5sYBYBrWDoC3pRMH8EujQHsGYOuZgnC5Hlw/640?wx_fmt=png&from=appmsg "") + +输入表达式无法进行拼接模版注入 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Eribj2afCPxptAiba2fC7IyEicvYVcslO6T73icNqD6jhkQva0LNnHeRmIyg/640?wx_fmt=png&from=appmsg "") + +测试模版是否能解析SPEL表达式: + +StandardDialect:Thymeleaf 使用`StandardDialect`来处理标准表达式(如`${...}`)。可以通过检查`StandardDialect`是否被注册来确定表达式解析是否启用。 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErVicbw6GE3NKiatmoXEvLZst7JzZSen5yiaYiaDTDV5ZMhsxJow32QH5dtg/640?wx_fmt=png&from=appmsg "") + +发现开启了表达式的解析 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Eribgnacicoojiczc3IWKhVSr8OguVcia3phpYfpU53OzHUvicYYaojRXMrqw/640?wx_fmt=png&from=appmsg "") + +模版修改为Payload形式直接访问测试 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Er16kg1p3x5v63JJicibbo0rS6bv2ibibsuEJCHlxqXr7lmCmhIH0nibdGicrA/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErQdnTPuZjzGDkTg2o3wrAVFH91yiciaXvEZhrJVOvicsP2PicBounSmjnSA/640?wx_fmt=png&from=appmsg "") + +访问show接口发现也能直接解析Spel表达式 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErpAvO1hush8wxWrkHibav48UP5U1jcce0FTCOZUOWQYUQkHWD9AEhheQ/640?wx_fmt=png&from=appmsg "") + +那么只有一种可能:Spel中getValue()处理完模版中固定的Spel表达式再渲染的Html,而不是解析传入的Spel表达式到SPELVariableExpressionEvaluator.java中的getValue()方法进行下断发现传入的是模版中写死的$message表达式并非 +__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("calc").getInputStream()).next()}__::.x:: + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErMuWNkzxh3mG3h1XAWmavWiaicuBKlADWA8LvNaByeoHFMAQicm9GpWrNg/640?wx_fmt=png&from=appmsg "") + +Spel表达式流程发现:ThymeleafView.java中吧templateName是核心内容,主要是传参可控制模版名字 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErW1O642J40Dq81xEmbVHibRiaAoBdWhRfds7Uf3qqbuZiaqdBavquEluLQ/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9EricIVXBcE77xXB1qxAFhicicd8iaCaaONiaTxnZyqS5AaTJNZSVibiakRnBXmA/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErGjwpDGyYlibsTY4HvWYj0LT1V7ldSry2KMhdPaQEwoMgWxeDLG6alBA/640?wx_fmt=png&from=appmsg "") + +将${message}作为input传进去,后续将作为直接解析 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErpSYQibZibnjo4wozzQce9FyaOEd8lhlDpHUAbOqLpD1GKicwWLSOWbq4A/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Er9BRXKdoYgXCMnMkT5YO0OD6v6vPMD1WSjOKKLjy4icXnNN8Q0EicYibEA/640?wx_fmt=png&from=appmsg "") + + +3.1.2return模版路径表达式解析 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErWib88SchI6WDNXxXuabhxuQd7tWicXldEffumqxDPyVPJxibdQBlH4jhA/640?wx_fmt=png&from=appmsg "") + +3.1.3分段表达式注入return模版路径表达式解析 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErZk4b27Uk9ZrKdA8cvdnnOcWVniaMUUT4ClThnsbZ8ZGepHOrEqElDPg/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErvAskBOGMVkOLFMxf4RxUeq3WOpBdffxicibFrjXpkN6IHmcgAZsJuamg/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Er1K2wfsficODWdrhaqFtyytM2gb2icJdR4Sl8Hdjx0WJk20CltEGIpNqg/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErZhceN2EkCmia4YDiavVejgvGYrgSict0LkF9KLMNaCoYYwxrCWHdDT3tA/640?wx_fmt=png&from=appmsg "") + +3.1.4Url表达式注入 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErEl0IUKZTsyEWI9k57JjvHhXfbbmBTMSgRNKTRj6rZhM9L01kuc9BdA/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Erice2EWBvHDk5PbAcLmlxIvMGeQgrN6iaHadKMDnwK3bQ5cpOuzNTBbibQ/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Erpcrnbeya5092NeEVgIuibXBPbQdcFR1rCqSp7QHPLHLXibg74VMiclokg/640?wx_fmt=png&from=appmsg "") + +四 + +实战审计案例 + +此篇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 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErRqdQQELf6o0UpG7hR5a1kicibEcsgDM495cvQgYbgltHicNsMSDS2qCLg/640?wx_fmt=png&from=appmsg "") + +直接打开Pom.xml引入依赖即可,查看thymeleaf版本2.1.0 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Ermvuk1NCjp45cD8E3EzibWN6H85pt5DKR4wY7MkGORiciceXxyZGsLAz8w/640?wx_fmt=png&from=appmsg "") + +启动项目 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9EraIibiaibjP92zMibEBbMB7e2hKrbrxlHjFeChdXlRZWwGjx690muKJlv2w/640?wx_fmt=png&from=appmsg "") + +导入2个数据库文件,并修改数据库账号密码,成功启动项目 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Erfvaw09FZ8OC3bZs8XKACFgKoM7RlkouAX0lwerAjwOoGMBD0ScldbQ/640?wx_fmt=png&from=appmsg "") + +4.2白盒源代码漏洞分析 + +定位SpringBoot中Thymeleaf模版配置项及前端模版位置 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErpWQnWlpJqup6xjwnVVlvj7ROQ0bf1ULVyFwYq9atZpxq6m2lkAszIw/640?wx_fmt=png&from=appmsg "") + +关键词定位:在Thymeleaf漏洞中的业务代码,会在控制器(Controller)和视图(View)之间传递数据。它们的主要作用是将数据从控制器传递到 Thymeleaf 模板,以便在模板中渲染这些数据 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErfOFgciaBdRLUoKuYE85XYyxg3A7W8DytaEO7cMMico9P1B9EcxGlSC2g/640?wx_fmt=png&from=appmsg "") + +使用关键词定位Control层,看样子用的ModelMap + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Er6nV9E3eTr1IpDs3nF3t8Md9T9dhUYzasOiag5swQk2TznPRYX45kwpw/640?wx_fmt=png&from=appmsg "") + +DemoOperateController.java中修改用户方法返回视图模版 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErS9ZZ6YAPwgFDqLsVkhAZtUJc7dIZV0P2FpYBZB2K6BMZl4TajPicGGw/640?wx_fmt=png&from=appmsg "") + +第二处也不可控 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErwSCukGyx4qtZBPT2UgTJw6MDYB5hou0zRpFpg6P5TDNicPqTyhqymZQ/640?wx_fmt=png&from=appmsg "") + +查找到CacheController.java发现惊喜,return路径可直接传参数控制 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErsmRXRrTG76IvSh5NPrVqldYDU0MgCTicur3cIBcfN9vcP2SeZ57opuQ/640?wx_fmt=png&from=appmsg "") + +Rouyi的模版版本为3.0.12,需要定位此版本Payload才可以 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Erkm1icuKSuiaCdbGYttT6We84La0wpB1jLt4k4oQucoJLJ4GFFictn1kQw/640?wx_fmt=png&from=appmsg "") + +根据描述信息3.0.12防护信息需要进行 +Url编码并且进行空格处理才可绕过 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErUtBOibqpaZMhvuXA3icMpXdqmLibQyxOJuRHzzqncCRmib5g3uHhaKffBw/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Er5NmxamyYmmzZsxMcI9hXeuKicwKbFflujtl7uhvqF6Oicia9ZxvnpmtDg/640?wx_fmt=png&from=appmsg "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9EruA98dj55dcw3lyVBcXJ28iaSMBhlmkFGW3EzG1ibNJFqDn5RibG0ophUg/640?wx_fmt=png&from=appmsg "") + +源码跟踪3.0.12绕过方式 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9Er2DwJ3kVWK9ZvV1hmlZkqZDLF3ibEKF9ZXrPBoBfNyqHLNBpoXWt8Jgg/640?wx_fmt=png&from=appmsg "") + +发现使用SpringSecurity框架中的一个工具类:SpringStandardExpressionUtils.java用于检测 SpEL具体逻辑如下: + +1.倒序扫描表达式字符串,逐字符匹配"new"关键字(使用倒序方式匹配 "wen")。检查匹配到的 "new" 是否为独立关键字,而非标识符的一部分。 + +2.同时检测类似 T(SomeClass) 的静态方法调用形式。 + +如果发现上述两种情况之一,则返回 true,表示存在受限操作。 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/9TyXeX23U8xNC9yLibCeoWMhsICVjB9ErJ2Jte3GprZPYe7hs7JrsVw1uvPVcX1iaYojeibSAuQnUmxuEwJGnru4Q/640?wx_fmt=png&from=appmsg "") + +所以此时需要先查看SpringEL表达式是否从语法方面绕过:支持"T (SomeClass)"这样的语法,因此我们只要在T与恶意Class之间加个空格 + +END + + +