一、漏洞描述Apache Tomcat服务器存在文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件或源代码等。二、漏洞危害等级高 三、影响版本该文件包含漏洞影响以下版本:
四、漏洞原理tomcat默认的conf/server.xml中配置了2个Connector,一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009 AJP协议端口,两个端口默认均监听在外网ip。 如下图: 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的映射流程如下图所示: 其中具体的映射方式就简略了,具体可以自己查看代码. 五、两种利用方式:1、利用DefaultServlet实现任意文件下载当url请求未在映射的url列表里面则会通过tomcat默认的DefaultServlet会根据上面的三个属性来读取文件,如下图 通过serveResource方法来获取资源文件 通过getRelativePath来获取资源文件路径 然后再通过控制ajp控制的上述三个属性来读取文件,通过操控上述三个属性从而可以读取到/WEB-INF下面的所有敏感文件,不限于class、xml、jar等文件。 2、通过jspservlet实现任意后缀文件包含控制路径之后就可以以jsp解析该文件 所以只需要一个可控文件内容的文件即可实现rce. 六、利用成功截图七、解决方案1、临时禁用AJP协议端口,在conf/server.xml配置文件中注释掉<Connector port='8009' protocol='AJP/1.3'redirectPort='8443' />2、配置ajp配置中的secretRequired跟secret属性来限制认证3、官方下载最新版下载地址:https://tomcat./download-70.cgihttps://tomcat./download-80.cgihttps://tomcat./download-90.cgi或Github下载:https://github.com/apache/tomcat/releases八、AJP协议规范详见https://tomcat./connectors-doc/ajp/ajpv13a.html |
|
来自: kaller_cui > 《网络空间》