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

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

原创 犀利猪 犀利猪安全 2024-12-19 06:20

0x00 漏洞描述

此漏洞仅存在于Windows系统,当Tomcat的
readonly 参数被设置为 false(默认为true),允许使用 PUT 方法上传文件时,攻击者能够上传包含恶意 JSP 代码的文件,并通过条件竞争来多次发送请求,触发 Tomcat 进行解析和执行,最终实现远程代码执行

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 环境搭建

可在如下地址进行环境下载,选择漏洞范围内版本:

https://archive.apache.org/dist/tomcat/tomcat-9/
https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.97/bin/

安装好后可访问8080端口,看是否安装成功。随后来到Tomcat安装目录下的 conf/web.xml ,增加修改其配置,然后重启Tomcat:

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>readonly</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

0x02 漏洞复现

访问页面,抓取数据包:

在Burp的Repeater中新建一个组,后续在这个组中再进行多次发送到Repeater,这些包就会规划到分组里:

建议前两个包使用GET请求,不同的文件名,我这里使用xlz1和xlz2作为文件名:

后面再发4个包到分组中,使用PUT请求。这里一定要注意的是,在PUT请求中,文件名后缀我们更改一个字母为大写,即为:.Jsp。漏洞POC如下,插入到PUT请求后:

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

这是由于在 Windows 系统中,文件名不区分大小写(.Jsp与.jsp被视为同一个文件),当文件写入和访问同时发生时就会导致
JSP 文件被写入时触发编译,
在文件被完全编译成.class文件并删除前,其中某些访问可能会跳过完整检查,导致触发代码执行。

PUT请求中的文件名,需要跟GET请求中的文件名一致,除了后缀进行大写外,无变化。接下来,我们点击设置并选择组发送:

然后进行多次发包,我这里一共发了四次:

0x03 复现视频

全程复现视频如下,自行观看:

0x04 文后总结

实战能不能利用就看运气了,复现咱得会。

修复建议

1、升级Tomcat版本为非漏洞版本范围;

2、
设置 
readonly 为 false

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

(

END

)

!扫码添加哦!

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

免责声明

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

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

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

不为此承担任何责任

文章来自互联网或原创

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

并诚挚的跟您说声抱歉

犀利猪安全,带你上高速