0x01漏洞基本信息
漏洞名称:TomcatAJP协议漏洞
CVE编号:CVE--
漏洞简介:年2月4日,ApacheTomcat官方发布了新的版本,该版本修复了一个影响所有版本(7.*、8.*、9.*)的文件包含漏洞,但官方暂未发布安全公告,年2月20日,CNVD发布了漏洞公告,对应漏洞编号:CNVD--。漏洞是TomcatAJP协议存在缺陷而导致,攻击者利用漏洞可以构造特定参数,读取服务器webapp/ROOT下的任意文件。若目标服务器同时存在文件上传功能,攻击者可进一步通过文件包含实现远程代码执行。目前,厂商已发布新版本完成漏洞修复。
漏洞影响范围:
ApacheTomcat6
ApacheTomcat77.0.
ApacheTomcat88.5.51
ApacheTomcat99.0.31
0x02漏洞起因
tomcat默认的conf/server.xml中配置了2个Connector,一个为的对外提供的HTTP协议端口,另外一个就是默认的AJP协议端口,两个端口默认均监听在外网ip,如下图所示:
当tomcat服务启动后,查看端口可以发现端口已经处于监听状态:
tomcat在接收ajp请求的时候会调用org.apache.coyote.ajp.AjpProcessor来处理ajp消息,prepareRequest将ajp里面的内容取出来设置成request对象的Attribute属性,如下图:
因此可以通过这种特性,控制request对象的以下三个Attribute属性:
javax.servlet.include.request_uri
javax.servlet.include.path_info
javax.servlet.include.servlet_path
然后封装成对应的request之后,继续走servlet的映射流程,如下图所示:
具体的映射方式这里就不介绍了。
0x03漏洞利用方式
1、利用DefaultServlet实现任意文件下载
当url请求未在映射的url列表里面,会通过tomcat默认的DefaultServlet,根据上面的三个属性来读取文件,如下图所示:
通过serveResource方法来获取资源文件:
通过getRelativePath来获取资源文件路径:
然后通过控制ajp控制的上述三个属性来读取文件,操控上述三个属性,从而可以读取到/WEB-INF下面的所有敏感文件,不限于class、xml、jar等文件。
2、通过jspservlet实现任意后缀文件包含
当url(比如