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


2月20日,國家信息安全漏洞共享平台(CNVD)發布了Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020-1938)。該漏洞是由於Tomcat AJP協議存在缺陷而導致,攻擊者利用該漏洞可通過構造特定參數,讀取服務器webapp目錄下的任意文件 (例如webapp配置文件,源代碼等),經檢驗只能讀取此目錄下文件,不可遍歷 。
若目標服務器同時存在文件上傳功能,攻擊者可進一步實現遠程代碼執行。


影響版本

Apache Tomcat 6

Tomcat 7系列 <7.0.100

Tomcat 8系列 < 8.5.51

Tomcat 9 系列 <9.0.31


漏洞原理

tomcat默認的conf/server.xml中配置了2個Connector,一個為8080的對外提供的HTTP協議端口,另外一個就是默認的8009 AJP協議端口,兩個端口默認均監聽在外網ip。

1584105236009

1584105216663

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控制的上述三個屬性來讀取文件,通過操控上述三個屬性從而可以讀取到應用目錄下的任何文件。

為什么要用AJP

AJP是定向包協議,使用二進制格式傳輸文本,主要目的是節省性能,交互對象不是客戶端而是另一個web容器。


復現

搭環境

安裝docker

apt install apt-transport-https ca-certificates curl software-properties-common
apt install docker.io

這里遇到了個坑,docker原生鏡像地址太慢了,安裝了好幾次都timeout,於是換源

vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://kfwkfulq.mirror.aliyuncs.com",
"https://2lqq34jg.mirror.aliyuncs.com",
"https://pee6w651.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
],
"dns": ["114.114.114.114","8.8.8.8"]
}

下面正式安裝鏡像

1584104203123

docker run -d -p 8080:8080 -p 8009:8009 --name ghostcat duonghuuphuc/tomcat-8.5.32

1584104313175

至此tomcat安裝好了,新建一個測試文件

1584104441147

確認安裝成功

1584104526713

1584104597074


驗證

使用poc

1584104722322

1584104816222


防護

  1. 更新版本

  2. 若不需要使用Tomcat AJP協議,可直接關閉AJP Connector,或將其監聽地址改為僅監聽本機localhost

  3. 若需使用Tomcat AJP協議,可根據使用版本配置協議屬性設置認證憑證


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM