Web中間件漏洞之Tomcat篇
1.Tomcat簡介
Tomcat 服務器是一個免費的開放源代碼的 Web 應用服務器,屬于輕量級應用服務器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調試 JSP 程序的好選擇。
對于一個初學者來說,可以這樣認為,當在一臺機器上配置好 Apache 服務器,可利用它響應 HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上 Tomcat 是 Apache 服務器的擴展,但運行時它是獨立運行的,所以當運行 tomcat 時,它實際上作為一個與 Apache 獨立的進程單獨運行的。
2.遠程代碼執(zhí)行
漏洞簡介及成因
Tomcat 運行在 Windows 主機上,且啟用了 HTTP PUT 請求方法,可通過構造的請求向服務器上傳包含任意代碼的 JSP 文件,造成任意代碼執(zhí)行。
影響版本:Apache Tomcat 7.0.0 – 7.0.81
漏洞復現(xiàn)
配置漏洞,開啟put方法可上傳文件功能
- tomcat文件夾下的/conf/web.xml文件插入
- readonly
- false
重啟tomcat服務
訪問127.0.0.1:8080,burp抓包,send to Repeater,將請求方式改為PUT,創(chuàng)建一個122.jsp,并用%20轉義空格字符。123.jsp內容為:
- <%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
返回201,說明創(chuàng)建成功
訪問127.0.0.1:8080/122.jsp?cmd=calc
彈出計算器
漏洞修復
1)檢測當前版本是否在影響范圍內,并禁用PUT方法。
2)更新并升級至新版。
3.后臺弱口令war包部署
漏洞簡介及成因
Tomcat支持在后臺部署war文件,可以直接將webshell部署到web目錄下。
若后臺管理頁面存在弱口令,則可以通過爆破獲取密碼。
漏洞復現(xiàn)
Tomcat安裝目錄下conf里的tomcat-users.xml配置如下
訪問后臺,登陸
上傳一個war包,里面是jsp后門
成功上傳并解析,打開
可執(zhí)行系統(tǒng)命令
也可進行文件管理,任意查看、刪除、上傳文件
漏洞修復
1)在系統(tǒng)上以低權限運行Tomcat應用程序。創(chuàng)建一個專門的 Tomcat服務用戶,該用戶只能擁有一組最小權限(例如不允許遠程登錄)。
2)增加對于本地和基于證書的身份驗證,部署賬戶鎖定機制(對于集中式認證,目錄服務也要做相應配置)。在CATALINA_HOME/conf/web.xml文件設置鎖定機制和時間超時限制。
3)以及針對manager-gui/manager-status/manager-script等目錄頁面設置最小權限訪問限制。
4)后臺管理避免弱口令。
4.反序列化漏洞
漏洞簡介及成因
該漏洞與之前Oracle發(fā)布的mxRemoteLifecycleListener反序列化漏洞(CVE-2016-3427)相關,是由于使用了JmxRemoteLifecycleListener的監(jiān)聽功能所導致。而在Oracle官方發(fā)布修復后,Tomcat未能及時修復更新而導致 的遠程代碼執(zhí)行。
該漏洞所造成的最根本原因是Tomcat在配置JMX做監(jiān)控時使用了JmxRemoteLifecycleListener的方法。
漏洞影響版本:
- ApacheTomcat 9.0.0.M1 到9.0.0.M11
- ApacheTomcat 8.5.0 到8.5.6
- ApacheTomcat 8.0.0.RC1 到8.0.38
- ApacheTomcat 7.0.0 到7.0.72
- ApacheTomcat 6.0.0 到6.0.47
漏洞復現(xiàn)
利用條件:外部需要開啟JmxRemoteLifecycleListener監(jiān)聽的10001和10002端口,來實現(xiàn)遠程代碼執(zhí)行。
conf/server.xml中第30行中配置啟用JmxRemoteLifecycleListener功能監(jiān)聽的端口:
配置好jmx的端口后,在tomcat版本所對應的extras/目錄下來下載catalina-jmx-remote.jar以及下載groovy-2.3.9.jar兩個jar包。下載完成后放至在lib目錄下。
接著再去bin目錄下修改catalina.bat腳本。在ExecuteThe Requested Command注釋前面添加這么一行。
重啟tomcat,監(jiān)聽本地的10001和10002的RMI服務端口是否成功運行。

構造payload,彈出計算器
成功彈出計算器。
漏洞修復
1、關閉JmxRemoteLifecycleListener功能,或者是對jmx JmxRemoteLifecycleListener遠程端口進行網絡訪問控制。同時,增加嚴格的認證方式。
2、根據(jù)官方去升級更新相對應的版本。