复现起源:
近期在项目中碰到的ApacheTomcat中间件愈来愈多,于是乎。想着做一个整理。将ApacheTomcat中间件的几大较为重要的高危漏洞做一个总结整理复现。用作来巩固更新自己的知识库。
在这里感谢公司Bearcat师傅和残忆师傅以及李师傅等指导和共享精神。
今天我们来一起复现一下Tomcat多版本远程代码执行CVE-2016-8735。复现之前我们先来了解一下CVE-2016-8735。
漏洞描述:
该漏洞与之前Oracle发布的mxRemoteLifecycleListener反序列化漏洞(CVE-2016-3427)相关,是由于使用了JmxRemoteLifecycleListener的监听功能所导致。而在Oracle官方发布修复后,Tomcat未能及时修复更新而导致的远程代码执行。
该漏洞所造成的最根本原因是Tomcat在配置JMX做监控时使用了JmxRemoteLifecycleListener的方法。
漏洞影响版本:
ApacheTomcat 9.0.0.M1 到9.0.0.M11
ApacheTomcat 8.5.0 到8.5.6
ApacheTomcat 8.0.0.RC1 到8.0.38
ApacheTomcat 7.0.0 到7.0.72
ApacheTomcat 6.0.0 到6.0.47
漏洞利用条件:
外部需要开启JmxRemoteLifecycleListener监听的10001和10002端口,来实现远程代码执行。
漏洞复现:
所需环境工具包:
catalina-jmx-remote.jar:
https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.2/bin/extras/catalina-jmx-remote.jar
groovy-2.3.9.jar:
http://central.maven.org/maven2/org/codehaus/groovy/groovy/2.3.9/groovy-2.3.9.jar
ysoserial.jar:
https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar
了解完漏洞详情之后,我们开始着手搭建环境来复现漏洞更深入的理解。
漏洞所需环境:
ApacheTomcat 8.5.2
Jdk1.7.0_80
安装成功如下图:
在进行漏洞复现之前我们需要配置几点如下:
conf/server.xml中第30行中配置启用JmxRemoteLifecycleListener功能监听的端口:
配置好jmx的端口后,我们在tomcat版本所对应的extras/目录下来下载catalina-jmx-remote.jar以及下载groovy-2.3.9.jar两个jar包。下载完成后放至在lib目录下。
接着我们再去bin目录下修改catalina.bat脚本。在ExecuteThe Requested Command注释前面添加这么一行。
主要配置的意思是设置启动tomcat的相关配置,不开启远程监听jvm信息。设置不启用他的ssl链接和不使用监控的账户。具体的配置可以去了解一下利用tomcat的jmx监控。
至此所有的配置成功保存后,我们运行tomcat。
顺带监听本地的10001和10002的RMI服务端口是否成功运行。
监听成功,我们开始来构造Payload执行命令。首先老套路弹个计算器。
漏洞利用:
一般我们可以利用该漏洞往tomcat的webapp程序目录下写一个文本文件去证明该漏洞存在。
以及可以直接向服务器上利用wget/copy等命令上传木马来进行获取webshell提权等。
漏洞修复方案:
1、关闭JmxRemoteLifecycleListener功能,或者是对jmx JmxRemoteLifecycleListener远程端口进行网络访问控制。同时,增加严格的认证方式。
2、根据官方去升级更新相对应的版本。
本系列文章友情链接
Tomcat的PUT的上传漏洞(CVE-2017-12615)
Tomcat后台弱口令上传war包漏洞复现