漏洞原理
Tomcat配置了兩個Connecto,它們分別是HTTP和AJP。
HTTP默認端口為8080,處理http請求;AJP默認端口8009,用於處理 AJP 協議的請求。
AJP比http更加優化,多用於反向、集群等,漏洞由於Tomcat AJP協議存在缺陷而導致,攻擊者利用該漏洞可通過構造特定參數,讀取服務器webapp下的任意文件以及可以包含任意文件,如果有某上傳點,上傳圖片馬等等,即可以獲取shell。
AJP Connector
Apache Tomcat服務器通過Connector連接器組件與客戶端程序建立連接,Connector表示接收請求並返回響應的端點,即Connector組件負責接收客戶的請求,以及把Tomcat服務器的響應結果發送給客戶。
在Apache Tomcat服務器中我們平時用的最多的8080端口,就是所謂的Http Connector,使用Http(HTTP/1.1)協議,在 conf/server.xml 文件里Ajp協議對應的配置為
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
Tomcat服務器默認對外網開啟該端口,Web客戶訪問Tomcat服務器的兩種方式:
漏洞環境搭建
進入vulhub-master/tomcat/CVE-2020-1938目錄下,docker環境啟動
docker-compose up -d
- 使用nmap,掃描目標指定8009端口,表示漏洞環境搭建成功
nmap -p 8009 192.168.2.147
漏洞環境復現
webapp任意文件讀取
可以成功讀取web.xml文件內容
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.2.147 -p 8009 -f WEB-INF/web.xml
任意文件包含
漏洞攻擊流量分析
1、Wireshark抓取poc獲取web.xml內容流量
2、跟蹤流,服務器返回結果如下
漏洞影響版本
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
漏洞修復措施
1、在servce.xml中注釋AJP,或者綁定到localhost
2、升級無漏洞版本
3、Tomcat 7和Tomcat 9可為AJP Connector配置secret來設置AJP協議的認證憑證。
4、Tomcat 8的可為AJP Connector配置requiredSecret來設置AJP協議的認證憑證。
EXP
參考鏈接
CSDN-Tomcat AJP 文件包含漏洞(CVE-2020-1938)
CSDN-Tomcat AJP文件包含漏洞解析
Tomcat AJP 文件包含漏洞(CVE-2020-1938) 修復方案 (含Apache2 ajp 負載如何修復)
先知社區-Tomcat Ajp協議文件包含漏洞分析
聲明
嚴禁讀者利用以上介紹知識點對網站進行非法操作 , 本文僅用於技術交流和學習 , 如果您利用文章中介紹的知識對他人造成損失 , 后果由您自行承擔 , 如果您不能同意該約定 , 請您務必不要閱讀該文章 , 感謝您的配合 !