Tomcat-Remote-Code-Execution

0x01概述

  2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,该漏洞受影响版本为7.0-7.80之间,在一定条件下,攻击者可以利用这两个漏洞,获取用户服务器上JSP文件的源代码,或是通过精心构造的攻击请求,向用户服务器上传恶意JSP文件,通过上传的JSP文件,可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险。

0x02漏洞信息

  • 漏洞名称:CVE-2017-12615-远程代码执行漏洞
  • 漏洞评级:影响范围不是很广,因为这个漏洞的默认配置文件都是不会受影响。
  • 漏洞利用条件:CVE-2017-12615漏洞利用需要在Windows环境,且需要将 readonly 初始化参数由默认值设置为 false。但是经过实际测试,在linux平台以及tomcat 8 9这个漏洞依然通杀。
  • 影响范围:CVE-2017-12615影响范围: Apache Tomcat 7 8 9 全版本

0x03漏洞环境搭建

  在/conf/web.xml文件中加入false,开启PUT模式。

1

0x04原理分析

  我们可以看到PUT模式默认是关闭的。

2

  从这里可以看到处理jsp文件和静态文件涉及到了及到 DefaultServlet和 JspServlet。
  DefaultServlet作用是处理静态文件,而JspServlet是用来处理jsp和jspx的请求。本次漏洞的根本原因是因为JspServlet不支持PUT,而DefaultServlet支持PUT方法,通过构造特殊后缀名字段绕过JspServlet,让DefaultServlet来处理这个文件,从而达到上传的效果。

3

  定位DefaultServlet.java,重点看doPut,若readonly为true,直接抛出error,所以要触发漏洞必须将,readonly设置为false。

4

  而且看到调用了resources.bind。

5

  往下看看FileDirContext.java中的bind函数。调用rebind创建文件。

6

7

0x05漏洞复现

8

9

10

0x06修复建议

  禁用PUT!

参考连接

https://xianzhi.aliyun.com/forum/read.php?tid=2135&displayMode=1&page=1&toread=1#tpc