竹笋

首页 » 问答 » 环境 » TomcatAJP协议漏洞分析与利用
TUhjnbcbe - 2022/10/28 21:27:00
北京著名痤疮医院 http://baijiahao.baidu.com/s?id=1689206013804347065&wfr=spider&for=pc

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(比如

1
查看完整版本: TomcatAJP协议漏洞分析与利用