漏洞原理:
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 漏洞進行文件包含,從而達到代碼執行的危害
漏洞版本
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
當然,也可以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
詳細分析過程看這里:
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.31、8.5.51 或 7.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.31、8.5.51 或 7.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