[Vulfocus解题系列]Tomcat文件包含 & 文件读取漏洞(CVE-2020-1938)

昨天写了一篇Tomcat漏洞PUT方法任意写入文件漏洞(CVE-2017-12615) 的复现文章,今天决定近这两天把Tomcat常见的漏洞全部再次过一遍,就当复习回顾了。

漏洞简介

  1. CVE-2020-1938漏洞
    国家信息安全漏洞共享平台发布了Apache Tomcat上的文件包含漏洞。通知中表示攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件,如:webapp配置文件或源代码等。
    影响版本:
  • 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下的所有文件

  1. 漏洞原理
    Tomcat开启了http和AJP两种协议的处理,由于“javax.servlet.include.request_uri”,“javax.servlet.include.path_info”,“javax.servlet.include.servlet_path” 这三个参数可控,所以导致文件读取以及文件包含漏洞。不过注意,可读取的文件也仅限于webapps/ROOT目录。

题目环境

vulfocus演示环境自行搜索。

解题过程

利用脚本读取web.xml文件
[Vulfocus解题系列]Tomcat文件包含 & 文件读取漏洞(CVE-2020-1938)
发现可行,然后根据题目给出的提示,要去包含flag.png这个文件,于是继续利用脚本包含即可
[Vulfocus解题系列]Tomcat文件包含 & 文件读取漏洞(CVE-2020-1938)

Flag

动态flag。

总结与拓展

总结

1.漏洞原理
Tomcat开启了http和AJP两种协议的处理,由于“javax.servlet.include.request_uri”,“javax.servlet.include.path_info”,“javax.servlet.include.servlet_path” 这三个参数可控,所以导致文件读取以及文件包含漏洞,当然内容也仅限制webapps/ROOT目录。
2. 利用方法:
利用脚本读取/包含文件。

拓展知识与一些疑问

  1. Tomcat的简易架构图
    [Vulfocus解题系列]Tomcat文件包含 & 文件读取漏洞(CVE-2020-1938)

从图中可以看出,Tomcat最顶层的容器是Server,其中包含至少一个或者多个Service,一个Service有多个Connector和一个Container组成。这两个组件的作用为:
(1)Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;
(2)Container用于封装和管理Servlet,以及具体处理Request请求;
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。
此次漏洞产生的位置便是8009 AJP协议。

  1. 为什么是asdf.jsp
    [Vulfocus解题系列]Tomcat文件包含 & 文件读取漏洞(CVE-2020-1938)
    起初对脚本中的asdf产生了疑问,最后看了原理之后,才发现,这里的asdf可以是任意字母只要Servlet中没有就可以,如果没有就会启动DefaultServlet。
    如果是要进行文件包含的话,那么就要使用asdf.jsp这样就会走jspServlet。
上一篇:SpringBoot2.x配置Elasticsearch与使用Kibana


下一篇:在filebeat中配置kibana报错解决