Tomcat-Ajp协议漏洞分析

  介绍

这篇文章主要讲解了“Tomcat-Ajp协议漏洞分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Tomcat-Ajp协议漏洞分析”吧!

漏洞背景

安全公告编号:编制- 2020 - 0004

2020年02月20日,360年cert监测发现国家信息安全漏洞共享平台(CNVD)收录了CNVD - 2020 - 10487 Apache Tomcat文件包含漏洞。

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

受影响的版本包括:Tomcat 6, Tomcat 7的7.0.100以下版本,Tomcat 8的8.5.51以下版本,Tomcat 9的9.0.31以下版本。

CNVD对该漏洞的综合评级为“高危”。

影响版本 1, Apache Tomcat 9。x & lt;9.0.31
2, Apache Tomcat 8。x & lt;8.5.51
3, Apache Tomcat 7。x & lt;7.0.100
4, Apache Tomcat 6。x 漏洞分析

3.1美国连接器Apache Tomcat服务器通过连接器连接器组件与客户程序建立连接,连接器表示接收请求并返回响应的端点。即连接器组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。

在Apache Tomcat服务器中我们平时用的最多的8080端口,就是所谓的Http连接器,使用Http (Http/1.1)协议

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

 & lt; Connector 港口=?080“,协议=癏ttp/1.1”;
  ,,,,,,,,,,,,,,connectionTimeout=?0000”;
  ,,,,,,,,,,,,,,redirectPort=?443“,/在

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

美国协议对应的配置为:

 & lt; Connector 港口=?009“,协议=懊拦?1.3“,redirectPort=?443“,/在

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

 Tomcat-Ajp协议漏洞分析

3.2代码分析

漏洞产生的主要位置在处理美国请求内容的地方

org.apache.coyote.ajp.AbstractAjpProcessor.java # prepareRequest ()

 Tomcat-Ajp协议漏洞分析

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

 Tomcat-Ajp协议漏洞分析

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

 Tomcat-Ajp协议漏洞分析

于是这里我们可以进行对美国设置特定的属性,封装为请求对象的属性属性比如以下三个属性可以被设置

 javax.servlet.include.request_urijavax.servlet.include.path_infojavax.servlet.include。servlet_path 
3.3任意文件读取

 Tomcat-Ajp协议漏洞分析

当请求被分发到org.apache.catalina.servlets.DefaultServlet #特性()方法

 Tomcat-Ajp协议漏洞分析

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

 Tomcat-Ajp协议漏洞分析

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

 Tomcat-Ajp协议漏洞分析

漏洞演示:读取到/web - inf/ml文件

 Tomcat-Ajp协议漏洞分析

3.4命令执行

当在处理jsp请求的uri时,会调用org.apache.jasper.servlet.JspServlet #服务()

 Tomcat-Ajp协议漏洞分析

Tomcat-Ajp协议漏洞分析