Tomcat安全

Tomcat安全



1、Tomcat简介

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现。

因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。

一些目录:

  • bin -------- 存放Tomcat的脚本文件,例如启动、关闭
  • conf -------- Tomcat的配置文件,例如server.xml和web.xml
  • lib --------- 存放Tomcat运行需要的库文件(JAR包)
  • logs -------- 存放Tomcat执行时的LOG文件
  • temp ------- 存放Tomcat运行时所产生的临时文件
  • webapps ---------- Web发布目录,默认情况下把Web应用文件放于此目录
  • work ------------- 存放jsp编译后产生的class文件

重要文件的作用:

  • server.xml ------------- 配置tomcat启动的端口号、host主机、Context等
  • web.xml ------------- 部署描述文件,这个web.xml中描述了一些默认的servlet,部署每个webapp时,都会调用这个文件,配置该web应用的默认servlet
  • tomcat-users.xml --------- tomcat的用户密码与权限
  • xxx.war ---------- Java Web项目包,内部包含所有项目文件,例如:java、静态文件、xml等

image-20210511230618787


2、Tomcat漏洞

CVE-2017-12615任意文件上传

影响版本:Tomcat 7.0.0 ~ 7.0.79

影响说明:上传webshell,任意文件上传

环境说明:Tomcat 8.5.19

漏洞原理:CVE-2017-12615漏洞称之为Tomcat PUT方法任意写文件,类似IIS的PUT上传漏洞。该漏洞可以利用HTTP的PUT方法直接上传webshell到目标服务器,从而获取权限。该漏洞是高危漏洞,在Tomcat的web.xml默认情况下不存在该漏洞,但是一但开发者或运维人员手动将web.xml中的readonly设置为false,可以通过PUT/DELETE进行文件操控。

补充知识

web.xml中包含下面配置:

<init-param>
	<param-name>readonly</param-name>
    <param-value>true</param-value>
</init-param>

在Java中有DefaultServlet、JspServlet负责处理文件

DefaultServlet:处理非jsp、jspx文件

JspServlet:处理jsp、jspx文件

这个漏洞的根本是通过构造特殊后缀名,绕过了tomcat检测,让它用DefaultServlet的逻辑去处理请求,从而上传jsp文件。

windows绕过方法

1、利用/shell.jsp::$DATA的方式绕过

2、/shell.jsp%20,空格绕过

3、/shell.jsp/,Tomcat在处理文件时会删除最后的/

Linux绕过方法

1、/shell.jsp/,Tomcat在处理文件时会删除最后的/

漏洞复现传送门

image-20210516222218193


CVE-2020-1983任意文件读取

影响版本

Apache Tomcat 9.x < 9.0.31

Apache Tomcat 8.x < 8.5.51

Apache Tomcat 7.x < 7.0.100

Apache Tomcat 6.x

影响说明:读取webapp下的所有文件

环境说明:Tomcat 9.0.30

补充知识

image-20210512094836949image-20210512094857423

Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。

Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:

1、Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;

2、Container用于封装和管理Servlet,以及具体处理Request请求;

一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个Service只有一个Container,但是可以有多个Connectors,这是因为一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接,示意图如下(Engine、Host、Context下边会说到):多个 Connector 和一个 Container 就形成了一个 Service,有了 Service 就可以对外提供服务了,但是 Service 还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非 Server 莫属了!所以整个 Tomcat 的生命周期由 Server 控制。

Tomcat默认的conf/server.xml中配置了2个Connector,一个为8080的对外提供的HTTP协议(1.1版本)端口,默认监听地址:0.0.0.0:8080,另外一个就是默认的8009 AJP协议(1.3版本)端口,默认监听地址为:0.0.0.0:8009,两个端口默认均监听在外网IP。

漏洞复现传送门


CVE-2020-10487任意命令执行

该漏洞可以任意文件类型解析为jsp,从而达到任意命令执行的效果。但漏洞需要配合文件上传漏洞才可利用,假设目标服务器已经有了一个shell.png,里面内容是执行任意命令。

image-20210512101202092

image-20210512101257588

漏洞复现传送门


弱口令漏洞

Tomcat支持在管理界面部署项目,也就是部署war包。在tomcat-users.xml中定义了tomcat用户的信息和权限。

访问http://127.0.0.1:8080/manager/html,打开管理界面,输入用户名密码后即可登录后台,使用【WAR file to deploy】功能上传。上传后访问一句话木马即可

漏洞复现传送门

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值