CVE-2017-12615调试复现

CVE-2017-12615调试

漏洞名称:

  • 远程代码执行漏洞

影响版本:

  • Apache Tomcat 7.0.0-7.0.81

漏洞详情:

  • Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将readonly初始化参数由默认值设置为false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的JSP文件,JSP文件中的恶意代码将能被服务器执行,导致服务器上的数据泄露或获取服务器权限。

  • 通过以上两个漏洞可在用户服务器上执行任意代码,从而导致数据泄漏或获取服务器权限,存在高安全风险。

image.png

漏洞分析:

  • Windows服务器上,若Tomcat配置文件中的readonly参数设置为false时,则可通过HTTP PUT请求方法来创建JSP文件,造成任意代码执行漏洞。

  • 那是指当readonly设置为false时,就可以通过HTTP PUT方法来上传jsp文件么?

  • 不是这样的,这里要提到DefaultServletJspServletDefaultServlet的作用是处理静态文件,而JspServlet的作用是处理jspjspx文件的请求,以下是默认配置情况:

image.png
  • DefaultServlet可以处理PUTDELETE请求,而JspServlet中没有PUT上传的逻辑,PUT的代码实现只存在于DefaultServlet中。所以这个漏洞需要给jsp文件构造特殊后缀名,绕过tomcat检测,让它用DefaultServlet的逻辑去处理请求,从而上传jsp文件。

漏洞复现

漏洞环境vulhub

image.png

0x01 运行docker-compose up -d启动一个容器

image.png

0x02 运行docker ps可以看到容器已经跑起来了,至此,漏洞环境已经搭建好

image.png

0x03 进到该容器中

image.png

0x04 查看conf文件夹下的web.xml文件,发现readonly默认设置为true,可以通过PUT/DELETE进行文件操控

image.png

0x05 在该配置文件中,我们把readonly设置为false

image.png

0x06 接下来就是构造数据包的问题了,在构造数据包时,需要构造绕过检测的jsp文件名,查阅资料,有以下三种方式:

(1)test.jsp%20 //针对Apache Tomcat 7.0.0-7.0.81

(2)test.jsp:$DATA //针对Apache Tomcat 7.0.0-7.0.81

(3)test.jsp/ 任意版本,所以这种利用方法不属于该CVE漏洞,但利用方式相同

由于我测试的漏洞环境中Apache Tomcat版本是8.x的,所以使用第三种文件名绕过方法。

image.png
image.png

0x07 返回201,可以看到文件上传成功,文件可以上传成功,所以在文件中写入恶意可执行代码上传进行测试:

利用msf生成payload反弹shell,名为shell.jsp,设置反弹shell的端口为7777

image.png

0x08 构造PUT方法的数据包,将shell.jsp上传

image.png

0x09 开启对应7777端口进行监听,因为设置的反弹shell端口为7777

image.png

0x0a 在浏览器访问上传的shell.jsp文件,http://172.18.0.2:8080/shell.jsp,可以看到返回了shell,到此,获得了服务器的最高权限root

image.png

漏洞防护:

1、配置conf/web.xml文件的readonlytrue

2、如果没有业务需求,禁用PUT方法

3、升级Apache Tomcat版本

3、使用WAF

你可能感兴趣的:(CVE-2017-12615调试复现)