TomCat中间件漏洞复现总汇
TomCat中间件漏洞复现
前言
在渗透测试过程中,遇到php的站相对多一点,所以对apache了解的也多一点。TomCat中间件的站了解的比较少一点,这是自己第一次搭建环境测试漏洞,所以在自己摸索的过程中遇到的坑比较多一点。我会把自己的坑都写出来,希望可以帮助到大家。
实验环境搭建
Tomcat的安装(windows下安装)
Java环境安装
JDK安装
官网下载jbk安装包:https://www.oracle.com/technetwork/java/javase/downloads/index.html


解压出来按照提示安装,并配置环境变量。成功以后如图所示:


Apache Tomcat7.0 安装
下载地址:http://www.liangchan.net/soft/download.asp?softid=9366&downid=8&id=9430
全部安照默认设置下一步就行



这需要注意一下:是java下的jre目录,选错了安装不了。安装好了直接访问:http://locahost:8080 如下图所示

漏洞复现
Tomcat 远程代码执行漏洞(CVE-2017-12615)
漏洞产生原因
当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产生,(需要允许put请求)
配置文件修改前后对比(这里需要注意一下) 修改前:


默认 readonly 为 true,当 readonly 设置为 false 时,可以通过 PUT / DELETE 进行文件操控。需要手动配置readonly为false才可以进行漏洞利用。修改后:

修改配置文件后,保存重启。
PUT协议(方法):PUT方法是HTTP请求方法中的一中。此方法用于请求服务器把请求中的实体储存在请求资源下,如果请求资源已经在服务器中存在,那么将会用此请求中的数据替换原先的数据,作为指定资源的最新修改版。如果请求指定的资源不存在,将会创建这个资源,且数据位请求正文。
漏洞影响版本
Apache Tomcat 7.0.0 – 7.0.81
漏洞危害
导致服务器被远程代码执行
漏洞复现
直接访问url:http://127.0.0.1:8088/ 使用burpsuite抓包:直接使用PUT提交shell.jsp返回404。(我在这块干了一件比较蠢的事)
对比图,修改前正常情况下:

修改后的图:(直接抓包把GET改成PUT)

需要对文件名构造进行绕过,目前有三种绕过方式:

上传的对比图,错误的图:(这边浪费了很多时间,刚开始一直找不到原因)

上传成功,如图所示:(put协议要大写,我说一直为什么不行)

查看:

木马写入成功,菜刀连接即可。
Tomcat远程部署漏洞
漏洞产生
这是JSP/PHP网站远程部署的一个工具,管理员只需要远程上传一个WAR格式的文件,便可以发布到网站,方便了开发人员部署代码的同时,也为黑客上传木马敞开了大门。
漏洞检测
通过访问:Http://localhost:端口/manager 管理地址,尝试弱口令或默认口令,若能登陆成功,则存在此漏洞。

漏洞复现
- 通过弱密码登录管理界面

- 上传war包

- 然后直接访问即可getshell

漏洞危害
入侵者可以通过构造war进行上传木马文件,从而控制服务器。
漏洞修复
升级tomcat 提升密码强度 安装相应的防护软件 等等
Tomcat反序列化漏洞(CVE-2016-8735)
实验环境搭建(没成功)
Apache Tomcat 8.5.2安装
Tomcat下载地址:http://tomcat.apache.org/

安装8.0版本的

找到自己需要的版本

点击bin

找到要下载的版本

直接下载解压到本地就可以了(免安装)。
然后是运行Tomcat,第一种方法是设置环境变量在cmd中运行startup.bat批处理文件;我用的是第二种方法,在apache-tomcat-8.5.2\bin下运行cmd命令框,运行startup.bat。如图所示:
报错了,原因是没有jdk的环境变量

解决方法:(我从网上找的原因和解决方法写的很清楚)
https://blog.csdn.net/zhangchao19890805/article/details/50646644

如果端口冲突可以修改web端口,conf->server.xml大约在69行。如图所示:

一切准备好了以后,在cmd命令框运行startup.bat。如图所示会弹出一个Tomcat的运行框,不要关闭。直接在浏览器打开就行了。


服务启动成功。
Jdk1.7.0_80安装(前面说过了)
漏洞描述
该漏洞与之前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
在进行漏洞复现之前我们需要配置几点如下:
conf/server.xml中第30行中配置启用JmxRemoteLifecycleListener功能监听的端口:(自己手动添加,注意不要端口冲突)
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="1001" rmiServerPortPlatform="1002"/>

配置好jmx的端口后,我们在tomcat版本所对应的extras/目录下来下载catalina-jmx-remote.jar以及下载groovy-2.3.9.jar两个jar包。下载完成后放至在lib目录下。
接着我们再去bin目录下修改catalina.bat脚本。在ExecuteThe Requested Command注释前面添加这么一行。(手动添加,注意空格)
set CATALINA_OPTS= -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

主要配置的意思是设置启动tomcat的相关配置,不开启远程监听jvm信息。设置不启用他的ssl链接和不使用监控的账户。具体的配置可以去了解一下利用tomcat的jmx监控。
至此所有的配置成功保存后,我们运行tomcat。
顺带监听本地的1001和1002的RMI服务端口是否成功运行

监听成功,我们开始来构造Payload执行命令。首先老套路弹个计算器。
Payload: java -cp ysoserial-master-v0.0.4.jar ysoserial.exploit.RMIRegistryExploit localhost 10001 Groovy1 calc.exe

没弹成功(用的别人的图,但是步骤没错),前面的步骤都正确就是弹不出来。可能是我java环境的原因。
TomCat中间件漏洞复现总汇的更多相关文章
- Apache Tomcat Ajp-CVE-2020-1938漏洞复现
环境搭建: sudo docker pull duonghuuphuc/tomcat-8.5.32 sudo docker run -d -it -p 8080:8080 -p 8009:8009 ...
- JBOSS中间件漏洞总汇复现
JBOSS中间件漏洞总汇复现 JBoss JMXInvokerServlet 反序列化漏洞 漏洞复现 直接使用docker搭建的漏洞环境. 环境搭建完成后,直接使用工具检测即可:工具下载地址https ...
- 常见web中间件漏洞(四)Tomcat漏洞
这部分好久没写了,继续更新web中间件漏洞思路整理(不复现) ,争取...整理完 前几篇指路链接: nginx: https://www.cnblogs.com/lcxblogs/p/13596239 ...
- Tomcat/7.0.81 远程代码执行漏洞复现
Tomcat/7.0.81 远程代码执行漏洞复现 参考链接: http://www.freebuf.com/vuls/150203.html 漏洞描述: CVE-2017-12617 Apache T ...
- 【漏洞复现】Tomcat CVE-2017-12615 远程代码执行漏洞
漏洞描述 [漏洞预警]Tomcat CVE-2017-12615远程代码执行漏洞/CVE-2017-12616信息泄漏 https://www.secfree.com/article-395.html ...
- Tomcat CGIServlet enableCmdLineArguments远程代码执行_CVE-2019-0232漏洞复现
Tomcat CGIServlet enableCmdLineArguments远程代码执行_CVE-2019-0232漏洞复现 一.漏洞描述 该漏洞是由于tomcat CGI将命令行参数传递给Win ...
- Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现
Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现 一. 漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-0232,危险级别:高危,CVSS分值:官方 ...
- Tomcat AJP 文件包含漏洞复现(CVE-2020-1938)
漏洞原理 Tomcat配置了两个Connecto,它们分别是HTTP和AJP. HTTP默认端口为8080,处理http请求:AJP默认端口8009,用于处理 AJP 协议的请求. AJP比http更 ...
- 常见web中间件漏洞(五)weblogic漏洞
继续整理有关中间件漏洞思路(仅做简单思路整理,不是复现,复现请参考大佬们的长篇好文,会在文章中列举部分操作) WebLogic是Oracle公司出品的一个application server,确切的说 ...
随机推荐
- Spark比MR快是因为在内存中计算?错!
MapReduce 就像一台又慢又稳的老爷车,虽然距离 MapReduce 面市到现在已经过去了十几年的时间,但它始终没有被淘汰,任由大数据技术日新月异.蓬蓬勃勃.花里胡哨地发展,这个生态圈始终有它的 ...
- ssh免密码登陆(集群多台机器之间免密码登陆)
1. 首先在配置hosts文件(每台机器都要) 进入root权限 vi /etc/hosts 添加每台机器的ip + 主机名,例如: 172.18.23.201 hadoop1 172.18.23.1 ...
- [Leetcode] 第318题 最大单词长度乘积
一.题目描述 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母.你可以认为每个单词只包含小写字母.如果不 ...
- 从零开始OpenGL—— 一、 环境配置
前言 高考完之后填志愿,当时想以后去做游戏,所以选择了计算机这个专业,之前捣鼓过U3D,这学期也开始了计算机图形学的学习,最近学习了OpenGL相关的一些内容,将在博客中记录这系列的学习.这篇开篇博客 ...
- Java基础之final、static关键字
一.前言 关于这两个关键字,应该是在开发工作中比较常见的,使用频率上来说也比较高.接口中.常量.静态方法等等.但是,使用频繁却不代表一定是能够清晰明白的了解,能说出个子丑演卯来.下面,对这两个关键字的 ...
- Python2与Python3的map()
1. map()函数 Python2中,map(func, seq1[,seq2[...[,seqn)将func作用于seq*的每个序列的索引相同的元素,并最终生成一个[func(seq1[0], s ...
- C#使用SignalR实现进度条
需求背景 产品觉得在后台处理数据时给前端加个进度条 项目框架 .ENT framework4.5 MVC 5.0 Nuget引入 Microsoft.Owin 系列 2.0.2 Nuget引入 Mi ...
- 使用Hugo,只需5分钟,轻松搭建一个自己的博客
前面跟大家介绍过hexo这款静态博客系统,功能强大,基本能满足博客的各种需求.今天,我再跟大家介绍一款优秀的静态博客系统,那就是Hugo. Hugo是由Go语言实现的静态网站生成器.简单.易用.高效. ...
- Vue入门教程 第四篇 (属性与事件)
computed计算属性 计算属性(computed)在处理一些复杂逻辑时是很有用的.它的定义方式与methods类似. <div id="app"> <div& ...
- Linux内核版本介绍与查询
Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...