Tomcat 配置了两个 Connector,它们分别是 HTTP 和 AJP :

HTTP Connector:用于处理 HTTP 协议的请求(HTTP/1.1),默认监听地址为 0.0.0.0:8080
AJP Connector:用于处理 AJP 协议的请求(AJP/1.3),默认监听地址为 0.0.0.0:8009

HTTP Connector 就是用来提供我们经常用到的 HTTP Web 服务。而 AJP Connector,它使用的是 AJP 协议(Apache Jserv Protocol),AJP 协议可以理解为 HTTP 协议的二进制性能优化版本,它能降低 HTTP 请求的处理成本,因此主要在需要集群、反向代理的场景被使用。

通过 Ghostcat 漏洞,攻击者可以读取 Tomcat所有 webapp目录下的任意文件。

此外如果网站应用提供文件上传的功能,攻击者可以先向服务端上传一个内容含有恶意 JSP 脚本代码的文件(上传的文件本身可以是任意类型的文件,比如图片、纯文本文件等),然后利用 Ghostcat 漏洞进行文件包含,从而达到代码执行的危害

(CVE-2020-1938)Apache Tomcat AJP文件包含漏洞复现

 漏洞版本

1.    Apache Tomcat 6
2.    Apache Tomcat 7 < 7.0.100
3.    Apache Tomcat 8 < 8.5.51
4.    Apache Tomcat 9 < 9.0.31

漏洞复现

1.环境搭建 

检测:长亭检测工具:https://github.com/chaitin/xray/releases

linux下安装tomcat

当然,也可以docker部署:

docker search tomcat-8.5.32    #docker搜索tomcat镜像
docker pull duonghuuphuc/tomcat-8.5.32   #拉取镜像
docker images    #查看是否拉取成功

docker run -d -p 8080:8080 -p 8090:8090 duonghuuphuc/tomcat-8.5.32   #运行镜像并映射端口
docker ps -a  #查看是否运行成功
成功后访问系统地址即可。

exp1

  https://github.com/0nise/CVE-2020-1938

exp2

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

(CVE-2020-1938)Apache Tomcat AJP文件包含漏洞复现

 

 

 详细分析过程看这里:

http://www.hacksec.cn/Penetration-test/1132.html

https://www.secrss.com/articles/17267

https://blog.csdn.net/silencediors/article/details/104484178


 

什么情况下的 Tomcat 可以被 Ghostcat 漏洞利用?

对于处在漏洞影响版本范围内的 Tomcat 而言,若其开启 AJP Connector 且攻击者能够访问 AJP Connector 服务端口的情况下,即存在被 Ghostcat 漏洞利用的风险。

注意 Tomcat AJP Connector 默认配置下即为开启状态,且监听在 0.0.0.0:8009 。

Ghostcat 漏洞该如何修复或缓解?

Tomcat 官方已发布 9.0.31、8.5.51 及 7.0.100 版本针对此漏洞进行修复。

要正确修复此漏洞,首先需要确定您的服务器环境中是否有用到 Tomcat AJP 协议:

- 如果未使用集群或反向代理,则基本上可以确定没有用到 AJP;

- 如果使用了集群或反向代理,则需要看集群或反代服务器是否与 Tomcat 服务器 AJP 进行通信

1. 如果未使用 Tomcat AJP 协议:
如果确定未使用 Tomcat AJP 协议,则可以直接将 Tomcat 升级到 9.0.318.5.517.0.100 版本进行漏洞修复。

而对于确定未使用 Tomcat AJP 协议,但无法进行版本更新、或者是更老版本的用户,可以考虑直接关闭 AJP Connector,或将其监听地址改为仅监听在本机 localhost。

具体步骤:
(1)编辑 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />2)将此行注释掉(或直接删掉此行):

<!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->3)更改完毕后,重启 Tomcat 即可。

除以上措施外,当然也可以采用防火墙等办法以阻止不可信任的来源访问 Tomcat AJP Connector 端口。

2. 如果使用了 Tomcat AJP 协议:
如果确定服务器环境中使用到了 Tomcat AJP 协议,则建议将 Tomcat 升级到 9.0.318.5.517.0.100 版本,同时为 AJP Connector 配置 secret 来设置 AJP 协议认证凭证。

例如(注意必须将 YOUR_TOMCAT_AJP_SECRET 更改为一个安全性高、无法被轻易猜解的值):

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET" />
而对于无法进行版本更新、或者是更老版本的用户,则建议为 AJP Connector 配置 requiredSecret 来设置 AJP 协议认证凭证。例如(注意必须将 YOUR_TOMCAT_AJP_SECRET 更改为一个安全性高、无法被轻易猜解的值):

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" requiredSecret="YOUR_TOMCAT_AJP_SECRET" />
修复方案:升级版本||关闭端口

链接:https://pan.baidu.com/s/1yJattXZ-NpHfpfZd7chFag
提取码:7nsv

 

相关文章: