vlambda博客
学习文章列表

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

Snipaste_2022-05-03_18-11-31

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

  • 前提条件:一般

    影响范围:Apache Tomcat 7.0.0 – 7.0.79

    利用条件:

  1. 服务器是windows

  2. Tomcat 7.0.x版本

  3. 配置文件中readonly=false(默认是true)

    利用过程:

    用PUT请求提交jsp马,文件后缀需要加%20绕过

    tomcat任意文件写入(CVE-2017-12615)
    image-20220418213700918

    注意我这里后缀加%20是可以上传文件,不过文件后缀相当于jsp%20,而我后缀加/则能上传webshell

    image-20220418220514072
    image-20220418220615214
    1、PUT /shell.jsp%20 HTTP/1.1
    这种方式可以成功创建jsp文件是因为Windows下不允许文件名以空格结尾,但是尾部添加空格可以使tomcat认为其不是jsp文件从而交由DefaultServlet处理。这种利用方式适用与Windows系统+Tomcat 7.x。

    2、PUT /shell.jsp::$DATA HTTP/1.1
    这种方式可以成功创建jsp文件是因为利用了Windows环境下NTFS文件格式的特性,NTFS文件格式存在如下的性质,为此同样可以使tomcat认为其不是jsp文件从而交由DefaultServlet处理。这种利用方式适用与Windows系统+Tomcat 7.x。

    3、PUT /shell.jsp/ HTTP/1.1
    这种就是上方我们所使用的形式,这种形式适合与Windows系统及Linux系统,覆盖了Tomcat 5.x-9.x。

    漏洞原理:

    当conf/web.xml 中readonly值为false时,可通过PUT请求上传文件,虽然Tomcat存在过滤机制,不过可利用Windows或Linux的特性绕过。

    修复:

  • 不影响正常业务时,配置conf/web.xml 中readonly值为True或注释参数,禁止使用PUT方法并重启tomcat。

  • 根据官方补丁升级最新版本。