Tomcat服务器
0x01前言:
Tomcat服务器是一个免费开放源代码的web应用服务器,属于轻量级应用服务器,主要在中小型系统和并发访问用户不是很多的场合下使用,是开发和调式JSP程序的首选。
tomcat可以处理.jsp或者.do结尾的动态文件,处理时并不是tomcat本身去处理,而是交给后端的jvm来处理,也就是java虚拟机来处理,处理之前先装入tomcat的类文件,然后由jvm来处理,所以安装tomcat必须先安装JDK(Java Development Kit)。
常见的Tomcat中间件漏洞
1、tomcat弱口令漏洞
2、CVE-2017-12615远程代码执行漏洞
3、CVE-2020-1938文件包含漏洞
0x03tomcat弱口令漏洞
漏洞原理
Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。若后台管理页面存在弱口令,则可以通过爆破获取密码。
漏洞复现
在vulhub靶场搭建环境
直接访问后台管理界面,利用msf工具爆破弱口令
使用tomcat/tomcat,成功登录后台界面
准备jsp文件,内容如下
<%
if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());
%>
在已经安装java 环境的情况下,进入jsp文件所在目录,使用命令 java -cvf to.war ./就可以将当前目录的所有文件打包到to.war包中,一个正常的war包中还应该包含meta-inf,web-inf,在生成目录中应该包含这两个文件,才能生成可用的war包
to文件上传成功
直接访问to文件,返回404
直接访问to.jsp文件(指定文件时,才能访问成功)
此时直接输入http://127.0.0.1/to/to.jsp?pwd=023&i=ls验证,执行系统命令
修复方案
1、在系统上以低权限运行Tomcat应用程序。创建一个专门的 Tomcat服务用户,该用户只能拥有一组最小权限(例如不允许远程登录)。
2、增加对于本地和基于证书的身份验证,部署账户锁定机制(对于集中式认证,目录服务也要做相应配置)。在CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制。
3、以及针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制。
0x04CVE-2017-12615远程代码执行漏洞
漏洞原理
首先要了解DafaultServlet和JspServlet。DafaultServlet的作用是处理静态文件,而JspServlet的作用是处理jsp与jspx文件的请求,以下是默认配置情况:
DafaultServlet可以处理PUT或者DELETE请求,而JspServlet中没有PUT上传的逻辑,所以PUT的代码一般只存在于DafaultServlet中,如果我们给jsp文件构造后缀名,绕过tomcat检测,那文件就会以DafaultServlet的逻辑去处理请求。
Tomcat运行在windows主机上,DafaultServlet里的HTTP PUT方法一般是不开启的,当readonly处的内容为false时,代表启用了HTTP PUT请求方法,就可以通过构造的攻击请求向服务器上传包含任意代码的JSP文件,造成了任意文件代码执行漏洞
漏洞复现
搭建vulhub靶场,开启CVE-2017-12615漏洞靶场
访问http://localhost:8080进入tomcat界面
此时tomcat服务readonly设置为false,可以通过put/DELETE的方式处理文件
准备一个webshell,利用put请求上传jsp文件
webshell文件名需要修改后缀名,绕过tomcat的检测。(后缀名方法:1.jsp%20;1.jsp::$DATA;
1.jsp/),利用burp 配置端口,然后直接将wenshell内容send to repeater,返回201说明创建成功
此时访问http://localhost:8080/1.jsp?pwd=023&cmd=whoami验证,执行系统命令
修复方案
1、配置readonly值为True或注释参数,禁止使用PUT方法并重启tomcat。
注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。
2、根据官方补丁升级最新版本
0x05CVE-2020-1938文件包含漏洞
漏洞原理
Tomcat AJP协议由于存在实现缺陷导致参数可控,攻击者利用该漏洞构造特定参数,造成服务器webapp下任意文件读取,若服务器存在文件上传功能,则可实现远程代码实现。
分析源码,Tomcat在处理ajp协议的时候存在漏洞,可以通过request.setAttribute为Tomcat设置任意request属性(客户端发出请求时,创建request对象,并把请求数据封装到requesst中)
当ajp URI设置为非jsp路径时,tomcat会调用DefaultServlet处理,该类中有以下属性:
javax.servlet.include.path_info;(目录路径)
javax.servlet.include.servlet_path;(项目路径)
DefaultServlet类的getRelativePath方法进行拼接获得path路径,getResource(path)函数直接将path带入,造成任意文件读取,导致web目录任意文件读取漏洞,利用该漏洞成功读取到/WEB-INF/目录下web.xml文件
漏洞复现
利用docker拉取镜像,搭建靶场
查看镜像
运行靶场
访问浏览器页面成功,代表靶场搭建成功
nmap查看开放的端口,看到8009,8080端口开放
进入镜像,写入1.txt文件,内容为“i miss you”,查看目录,看到写入的1.txt文件
拉取网上公开的EXP文件
查看目录,发现拉取EXP文件成功
直接使用EXP文件读取刚刚写入文件的内容
读取WEB-INF下的配置文件
修复建议
1、对Tomcat版本进行升级
2、禁用AJP协议
天磊卫士|专注网络安全服务
咨询热线:400-654-0108
官网:https://www.uguardsec.com
分支机构:深圳、海口、北京、青岛、汕尾
漏洞扫描|整改加固|渗透测试|APP安全评估|安全运维
系统入网|上线安全评估|代码审计|应急响应|应急演练
原文始发于微信公众号(天磊卫士安全团队):漏洞复现 | Tomcat漏洞复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论