欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Apache Tomcat 从文件包含到RCE漏洞原理深入分析

来源:本站整理 作者:佚名 时间:2020-03-17 TAG: 我要投稿

文章内容简介
本篇文章针对Apache Tomcat Ajp(CVE-2020-1938)漏洞的文件包含和RCE的利用方式以及原理进行的深入的分析,同时包括漏洞复现和分析环境搭建的详细步骤,大家可以根据文中所写,自己搭建环境,然后通过在代码中下断点来自己进行调试,从而更好地理解漏洞的原理。
 
漏洞简介
2020年02月20日,于CNVD公开的漏洞公告中发现Apache Tomcat文件包含漏洞(CVE-2020-1938)。
Apache Tomcat为Apache开源组织开发的用于处理HTTP服务的项目。Apache Tomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapps目录下的任意文件。
本次漏洞是一个单独的文件包含漏洞,该漏洞依赖于Tomcat的AJP(定向包协议)协议。AJP协议自身存在一定的缺陷,导致存在可控参数,通过可控参数可以导致文件包含漏洞。AJP协议使用率约为7.8%,鉴于Tomcat作为中间件被大范围部署在服务器上,本次漏洞危害较大。
 
AJP13协议介绍
我们对Tomcat的普遍认识主要有两大功能,一是充当web服务器,可以对一切静态资源的请求作出回应,二就是Servlet容器。
常见的web服务器有 Apache、 Nginx、 IIS等。常见的Servlet容器有Tomcat,Weblogic,JBOSS等。
Servlet容器可以理解为是Web服务器的升级版,拿Tomcat来举例,Tomcat本身可以不做Servlet容器使用,仅仅充当Web服务器的角色是完全没问题的,但是在处理静态资源请求的效率和速度上是远不及Apache,所以很多情况下生产环境中都会将Apache作为web服务器来接受用户的请求,静态资源有Apache直接处理,而Servlet请求则交由Tomcat来进行处理。这么做就可以让两个中间件各司其职,大大加快相应速度。
众所周知我们用户的请求是以http协议的形式传递给Web 服务器的,我们在浏览器中对某个域名或者ip进行访问,头部都会有http或者https的表示,而AJP协议浏览器是不支持的,我们无法通过浏览器发送AJP的报文。当然AJP这个协议也不是提供给我们用户来使用的。
在Tomcat $CATALINA_BASE/conf/web.xml默认配置了两个Connector,分别监听两个不同的端口,一个是HTTP Connector 默认监听8080端口,一个是AJP Connector 默认监听8009端口。
HTTP Connector的主要就是负责接收来自用户的请求,不管事静态还是动态,只要是HTTP请求就时由HTTP Connector来负责。有了这个 Connector Tomcat才能成为一个web服务器,但还额外可处理Servlet和jsp。
而AJP协议的使用对象通常是另一个Web服务器。例如Apache ,这里从网上找到了一张图,以此图来进行说明。

通常情况下AJP协议的使用场景是这样的。
AJP是一个二进制的TCP传输协议,浏览器无法使用,首先由Apache与Tomcat之间进行AJP协议的通信,然后由Apache通过proxy_ajp模块进行反向代理,将其转换成HTTP服务器然后在暴露给用户,让用户来进行访问。
之所以要这么做,是因为相比HTTP这种纯文本的协议来说,效率和性能更高,同时也做了很多优化。
其实AJP协议某种程度上可以理解为是HTTP的二进制版,为了加快传输效率从而被使用,实际情况是像Apache这样有proxy_ajp模块可以反向代理AJP协议的很少,所以日常生产中AJP协议也很少被用到
 
Tomcat 远程文件包含漏洞分析
漏洞分析环境搭建
首先从官网下载对应的Tomcat源码文件,和可执行文件。http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.50/

下载好后将两个文件夹放入同一个目录下然后在源码中新增pom.xml并加入以下内容
 
xml version=”1.0” encoding=”UTF-8”?>
project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
modelVersion>4.0.0modelVersion>
groupId>org.apache.tomcatgroupId>
artifactId>Tomcat8.0artifactId>
name>Tomcat8.0name>
version>8.0version>
build>
finalName>Tomcat8.0finalName>
sourceDirectory>javasourceDirectory>
testSourceDirectory>testtestSourceDirectory>
resources>
resource>
directory>javadirectory>
resource>
resources>
testResources>
testResource>
directory>testdirectory>
testResource>
testResources>
plugins>
plugin>
groupId>org.apache.maven.pluginsgroupId>

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载