Tomcat AJP 文件包含漏洞
cve-2020-1938
攻击者可利用该高危漏洞读取或包含Tomcat上所有 webapp目录下的任意文件
漏洞影响版本:
7.分支7.0.100之前版本,建议更新到7.0.100版本;
8.分支8.5.51之前版本,建议更新到8.5.51版本;
9.分支9.0.31之前版本,建议更新到9.0.31版本。
相关知识点
参考:
java代码审计(入门篇)- 徐焱
https://paper.seebug.org/1147/
https://weread.qq.com/web/reader/c8732a70726fa058c87154bk76d325c028076dc611d6d8c
https://mp.weixin.qq.com/s/D1hiKJpah3NhEBLwtTodsg
https://zhuanlan.zhihu.com/p/137527937
https://blog.csdn.net/lili13897741554/article/details/125868178
Tomcat
Tomcat主要有两大功能,一是充当Web服务器,可以对一切静态资源的请求作出回应;二是充当Servlet容器。常见的Web服务器有 Apache、Nginx、IIS等。常见的Servlet容器有Tomcat、Weblogic、JBOSS等。
Servlet容器可以理解为Web服务器的升级版。主要作用是给上级容器(Tomcat)提供doGet()和doPost()等方法,其生命周期实例化、初始化、调用、销毁受控于Tomcat容器。以Tomcat为例,Tomcat本身可以不作为Servlet容器使用,仅仅充当Web服务器的角色,但是其处理静态资源请求的效率和速度远不及Apache,所以很多情况下生产环境会将Apache作为Web服务器来接收用户的请求。静态资源由Apache直接处理,而Servlet请求则交由Tomcat来进行处理。这种方式使两个中间件各司其职,大大加快了响应速度。
Tomcat默认定义了两个servlet,DefaultServlet 和 JspServlet
经过tomcat内部处理流程,一个走 default servlet (DefaultServlet),另一个走 jsp servlet (JspServlet),可导致的不同的漏洞。
文件读取漏洞走的是DefaultServlet,文件包含漏洞走的是JspServlet。
在这里插入图片描述
ajp协议
众所周知,用户的请求是以HTTP协议的形式传递给Web服务器。我们在浏览器中对某个域名或者ip进行访问时,头部都会有http或者https的表示,而AJP浏览器是不支持的,我们无法通过浏览器发送AJP的报文。AJP这个协议并不是提供给用户使用的。
Tomcat$ CATALINA_BASE/conf/web.xml默认配置了两个Connector,分别监听两个不同的端口,一个是HTTP Connector 默认监听8080端口,另一个是AJP Connector 默认监听8009端口。
HTTP Connector主要负责接收来自用户的请求,包括静态请求和动态请求。有了HTTP Connector,Tomcat才能成为一个Web服务器,还可以额外处理Servlet和JSP。
而AJP的使用对象通常是另一个Web服务器,例如Apache,这里以图5-75进行说明。
AJP是一个二进制的TCP传输协议。浏览器无法使用AJP,而是首先由Apache与Tomcat进行AJP的通信,然后由Apache通过proxy_ajp模块进行反向代理,将其转换成HTTP服务器再暴露给用户,允许用户进行访问。这样做的原因是,相对于HTTP纯文本协议来说,效率和性能更高,同时也做了很多优化。
在conf/server.xml中配置。
环境搭建
本地搭建一个tomcat, 因为远程调试的话 docker在虚拟机里,暂时不知道咋搞。
官网:https://tomcat.apache.org/
这里要下载旧版本的tomcat,选择Archives(档案),这里选择tomcat8.5.51之前的版本,
下载src源码
在源码根目录新建一个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.0</modelVersion>