怎么进行CVE-2020-1938漏洞分析

怎么进行CVE-2020-1938漏洞分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、环境搭建

环境搭建这部分直接使用brew包管理器进行Tomcat安装,版本为8.5.47如下图所示:

怎么进行CVE-2020-1938漏洞分析

与IDEA进行远程调试的设置部分略过,搭建完成后查看端口开启状况如下图所示:

怎么进行CVE-2020-1938漏洞分析

二、AJP协议学习

既然CVE-2020-1938漏洞是通过Tomcat的AJP协议进行攻击,那么首先应先对AJP协议进行学习,了解它是啥、用来干啥的。

这里附上Apache官网上对于AJP协议部分的AJP官方文档。

怎么进行CVE-2020-1938漏洞分析

怎么进行CVE-2020-1938漏洞分析

怎么进行CVE-2020-1938漏洞分析

通过阅读官方文档与server.xml文档后可知,Tomcat服务器对外监听两个端口用于与客户端进行正常的访问通信,如上图所示,分别监听8080端口与8009端口,其中8080端口为我们所熟知的正常进行HTTP协议通信的端口,8009端口则是使用AJP协议进行通信,使用二进制格式来传输可读性文本,能降低 HTTP 请求的处理成本,因此主要在需要集群、反向代理的场景被使用。

怎么进行CVE-2020-1938漏洞分析

通过阅读文档可知AJP协议的请求报文结构、Headers的定义方式、属性的代码值等等,这部分在接下来的漏洞代码分析中还会再回来查找。

三、漏洞分析

漏洞分析这一块是跟着最早放出的安恒 Tomcat-Ajp协议漏洞分析文章做的,个人对该分析文章进行学习与漏洞细节补充,下载Tomcat源码进行分析。

定位到漏洞核心代码部分在org.apache.coyote.ajp.AjpProcessor.java文件的778~812行,如下所示:

怎么进行CVE-2020-1938漏洞分析

首先,对第一个红框位置代码进行分析,先为attributeCode进行赋值后将比较结果作为循环条件;在Constants.java文件中查询到Constants.SC_A_ARE_DONE的值为0XFF,在官方手册中查询到属性代码为请求终止,则这是个恒True的判断,循环执行下面的switch判断代码。

怎么进行CVE-2020-1938漏洞分析

对第二个红框位置代码进行分析,当case到Constants.SC_A_REQ_ATTRIBUTE时会进入下面的判断,那么这个Constants.SC_A_REQ_ATTRIBUTE又是什么呢?在Constants.java中查找到SC_A_REQ_ATTRIBUTE = 10;同时还有一行注释声明此用于不在上面列表中的属性。

怎么进行CVE-2020-1938漏洞分析

继续返回官网手册进行查找,果然在官网的属性说明中存在着如下图所示的声明。也就是说,如果要发超出上述基础属性以外的值,都可以通过req_attribute(0X0A)来设置其属性名和值来发送。

怎么进行CVE-2020-1938漏洞分析

那么第三个红框部分的代码的含义就已经显而易见了,我们可以将AJP里面的内容取出来设置成request对象的Attribute属性。

在上面部分设置完成request对象之后一直没搞清楚是怎么传进容器的,直到看到了浅析Tomcat之CoyoteAdapter这篇文章:

Adapter连接了Tomcat连接器Connector和容器Container.它的实现类是CoyoteAdapter主要负责的是对请求进行封装,构造Request和Response对象.并将请求转发给Container也就是Servlet容器.

怎么进行CVE-2020-1938漏洞分析

终于将安恒漏洞分析文章中的getAdapter().service(request,response)串联起来,到这里之后还需要注意Servlet的处理,可以在web.xml中看到在其中配置了两个servlet处理,DefaultServletJSP Servlet,越精确的路径越优先匹配,而/匹配所有,匹配程度模糊所以优先级最低,当其它的Servlet匹配不成功时便由DefaultServlet来进行兜底。

怎么进行CVE-2020-1938漏洞分析

跟进Tomcat_lib中DefaultServlet.class文件,通过serveResource方法来获取资源文件。

怎么进行CVE-2020-1938漏洞分析

通过getRelativePath来获取资源文件路径。

怎么进行CVE-2020-1938漏洞分析

然后再通过控制ajp控制的上述三个属性来读取文件,通过操控上述三个属性从而可以读取到/WEB-INF下面的所有敏感文件,不限于class、xml、jar等文件。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/221736.html

(0)
上一篇 2022年1月4日
下一篇 2022年1月4日

相关推荐

发表回复

登录后才能评论