一、漏洞描述
Tomcat是Apache開源組織開發的用於處理HTTP服務的項目,兩者都是免費的,都可以做為獨立的Web服務器運行。Apache Tomcat服務器存在文件包含漏洞,攻擊者可利用該漏洞讀取或包含 Tomcat 上所有 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。


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控制的上述三個屬性來讀取文件,通過操控上述三個屬性從而可以讀取到應用目錄下的任何文件。
五、漏洞復現
這里下載了apache-tomcat-8.5.32版本進行漏洞復現
目前網上有多個POC版本流傳,這里列局其中兩個,還有很多的SRC和安全中心給了驗證方法。


六、漏洞修復
1
.更新到安全版本
Apache Tomcat 7.0.100
Apache Tomcat 8.5.51
Apache Tomcat 9.0.31
https://tomcat.apache.org/download-70.cgi
https://tomcat.apache.org/download-80.cgi
https://tomcat.apache.org/download-90.cgi
2.關閉AJP服務,修改Tomcat配置文件Service.xml,注釋掉
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
3、配置ajp配置中的secretRequired跟secret屬性來限制認證