Aapache Tomcat AJP 文件包含漏洞

  • A+
所属分类:漏洞复现
摘要

由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码

0x01 简介

Java 是目前 Web 开发中最主流的编程语言,而 Tomcat 是当前最流行的 Java 中间件服务器之一,从初版发布到现在已经有二十多年历史,在世界范围内广泛使用。

Ghostcat(幽灵猫 是由长亭科技安全研究员发现的存在于 Tomcat 中的安全漏洞(CVE-2020-1938),由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害。

0x02 影响版本

0x02 漏洞原理

tomcat默认的conf/server.xml中配置了2个Connector,一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009 AJP协议端口,两个端口默认均监听在外网ip。

Aapache Tomcat AJP 文件包含漏洞

Aapache Tomcat AJP 文件包含漏洞

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

再通过控制ajp控制的上述三个属性来读取文件,通过操控上述三个属性从而可以读取到应用目录下的任何文件。

0x03 漏洞复现

exp:

https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

效果:

Aapache Tomcat AJP 文件包含漏洞

反弹shell

在http://www.jackson-t.ca/runtime-exec-payloads.html网站进行一下转换

0x04 修复建议

临时禁用AJP协议端口,在conf/server.xm l配置文件中注释掉

配置ajp配置中的secretRequired跟secret属性来限制认证
官方下载最新版下载地址:

https://tomcat.apache.org/download-70.cgi

https://tomcat.apache.org/download-80.cgi

https://tomcat.apache.org/download-90.cgi

https://github.com/apache/tomcat/releases

其他防护措施

如果相关用户暂时无法进行版本升级,可根据自身情况采用下列防护措施。

一、若不需要使用Tomcat AJP协议,可直接关闭AJP Connector,或将其监听地址改为仅监听本机localhost。

具体操作:

(1)编辑 /conf/server.xml,找到如下行

为 Tomcat 的工作目录):

(2)将此行注释掉(也可删掉该行):

(3)保存后需重新启动Tomcat,规则方可生效。

二、若需使用Tomcat AJP协议,可根据使用版本配置协议属性设置认证凭证。

使用Tomcat 7和Tomcat 9的用户可为AJP Connector配置secret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):

使用Tomcat 8的用户可为AJP Connector配置requiredSecret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: