漏洞簡介
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。由於Tomcat默認開啓的AJP服務(8009端口)存在一處文件包含缺陷,攻擊者可構造惡意的請求包進行文件包含操作,進而讀取受影響Tomcat服務器上的Web目錄文件(webapps目錄)。
影響範圍
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
開啓靶機
(1)此處直接使用vulhub搭建,方便快速,一鍵搞定。vulhub的搭建參見https://github.com/vulhub/vulhub/blob/master/README.zh-cn.md,此處不在贅述。
vulhub安裝完後,直接進入tomcat/CVE-2020-1938
目錄下,輸入docker-compose up -d
啓動(最好開代理下載會快很多)
(2)docker ps
命令確認8080端口的apache已開啓,8009端口的AJP服務也已開啓。8009服務就是該漏洞所在服務,但是無法通過瀏覽器來直接訪問連接。
漏洞驗證(POC)
(1)使用github上檢測腳本:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi,輸入python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.3.103 -p 8009
,成功讀取WEB-INF/web.xml
文件,漏洞驗證成功。(python2版本)
漏洞利用
由於該漏洞利用有一點限制,必須要將文件上傳到web目錄下,文件後綴名不限,然後可以實現反彈shell。
(1)生成jsp文件反彈shell
(2)使用腳本執行上傳的shell.jsp文件
(3)kali上監聽地址,收到反彈的shell
漏洞修復
如果相關用戶暫時無法進行版本升級,可根據自身情況採用下列防護措施。
一、若不需要使用Tomcat AJP協議,可直接關閉AJP Connector,或將其監聽地址改爲僅監聽本機localhost。
具體操作:
(1)編輯 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 爲 Tomcat 的工作目錄):
<Connector port="8009"protocol=“AJP/1.3” redirectPort=“8443” />
(2)將此行註釋掉(也可刪掉該行):
(3)保存後需重新啓動Tomcat,規則方可生效。
二、若需使用Tomcat AJP協議,可根據使用版本配置協議屬性設置認證憑證。
使用Tomcat 7和Tomcat 9的用戶可爲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”/>
使用Tomcat 8的用戶可爲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” />