Weblogic反序列化(CVE-2023-21839)漏洞复现
前言
序列化(Serialization):将对象的状态信息转换为可以存储或传输的形式的过程,一般将对象转换为字节流。序列化时,对象的当前状态被写入到临时或持久性存储区(文件、内存、数据库等)。
反序列化(Deserialization):从序列化的表示形式中提取数据,即把有序字节流恢复为对象的过程
反序列化攻击:攻击者控制了序列化后的数据,将有害数据传递到应用程序代码中,发动针对应用程序的攻击
Weblogic简介
WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。
漏洞详情
由于Weblogic IIOP/T3协议存在缺陷,当IIOP/T3协议开启时,允许未经身份验证的攻击者通过IIOP/T3协议网络访问攻击存在安全风险的WebLogic Server,漏洞利用成功WebLogic Server可能被攻击者接管执行任意命令导致服务器沦陷或者造成严重的敏感数据泄露。
漏洞影响版本
Weblogic 12.2.1.3.0
Weblogic 12.2.1.4.0
Weblogic 14.1.1.0.0
环境搭建
在vulhub社区更新了此漏洞,直接拉取该环境即可
https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2023-21839
下载地址:https://github.com/vulhub/vulhub
clone下载项目:git clone https://github.com/vulhub/vulhub.git
cd weblogic //进入weblogic文件夹
cd CVE-2023-21839 //进入CVE-2023-21839漏洞文件夹
docker-compose up -d //开启漏洞环境,拉取镜像
docker ps //查看当前docker运行情况,可以看到该漏洞环境已经开启


访问http://your-ip:7001/console,可以看到登录界面

漏洞复现
漏洞解析:
ForeignOpaqueReference是OpaqueReference接口的实现类。在ForeignOpaqueReference类中声明了两个私有变量:jndiEnvironment和remoteJNDIName,同时声明了两个构造方法,在有参构造方法中接收env和remoteJNDIName,并分别赋值给了上面的两个私有类变量。
ForeignOpaqueReference类的getReferent()方法是OpaqueReference接口的实现方法,在getReferent()方法中,retVal = context.lookup(this.remoteJNDIName); 对本类remoteJNDIName变量中的JNDI地址进行远程加载,导致了反序列化漏洞
package weblogic.jndi.internal;
//进入反序列化
public class ForeignOpaqueReference implements OpaqueReference, Serializable {
private Hashtable jndiEnvironment;
private String remoteJNDIName;
......
public ForeignOpaqueReference(String remoteJNDIName, Hashtable env) {
this.remoteJNDIName = remoteJNDIName;
this.jndiEnvironment = env;
}
public Object getReferent(Name name, Context ctx) throws NamingException {
InitialContext context;
if (this.jndiEnvironment == null) {
context = new InitialContext();
} else {
Hashtable properties = this.decrypt();
context = new InitialContext(properties);
}
Object retVal;
try {
retVal = context.lookup(this.remoteJNDIName); // 漏洞点
} finally {
context.close();
}
return retVal;
}
......
}
getReferent()调用分析
package weblogic.jndi;
public interface OpaqueReference {
Object getReferent(Name var1, Context var2) throws NamingException;
String toString();
}
OpaqueReference 接口有两个抽象方法:getReferent() 和 toString();
ForeignOpaqueReference 类的 getReferent() 方法调用在WLNamingManager类中。
在 WLNamingManager 类的 getObjectInstance() 方法中,当传入的 boundObject 对象实现了 OpaqueReference 接口时,则会调用该对象的 getReferent() 方法,即 boundObject = ((OpaqueReference)boundObject).getReferent(name, ctx);。
正如上方提到的 ForeignOpaqueReference 类实现了 OpaqueReference 接口,因此会调用该类中的 getReferent() 方法,导致反序列化代码执行漏洞。
package weblogic.jndi.internal;
public final class WLNamingManager {
public static Object getObjectInstance(Object boundObject, Name name, Context ctx, Hashtable env) throws NamingException {
if (boundObject instanceof ClassTypeOpaqueReference) {
......
} else if (boundObject instanceof OpaqueReference) {
boundObject = ((OpaqueReference)boundObject).getReferent(name, ctx);
} else if (boundObject instanceof LinkRef) {
...
}
}
}
CVE-2023-21839是在反序列化过程中没有进行恶意操作,在完成反序列化过程后执行了漏洞类ForeignOpaqueReference中getReferent()方法中的lookup()才触发的漏洞。
其中,Context的lookup方法是用来查找指定名称的对象的,它接受一个字符串参数,返回一个Object对象,如果没有找到指定名称的对象,则返回null,我们则利用此点触发反序列化漏洞。
这里我直接使用dnslog进行测试
下载漏洞检测工具用于测试是否存在该漏洞
https://github.com/4ra1n/CVE-2023-21839
使用官方提供的工具需要使用go语言编译
cd cmd
go build -o CVE-2023-21839.exe

使用dnslog检测
CVE-2023-21839.exe -ip 192.168.31.230 -port 7001 -ldap ldap://2qdt3z.dnslog.cn

至此,dnslog有回显证明漏洞存在
修复方式
1.下载最新补丁,链接:https://support.oracle.com/rs?type=doc&id=2917213.2
2.限制T3协议访问
Weblogic反序列化(CVE-2023-21839)漏洞复现的更多相关文章
- Typecho反序列化导致前台 getshell 漏洞复现
Typecho反序列化导致前台 getshell 漏洞复现 漏洞描述: Typecho是一款快速建博客的程序,外观简洁,应用广泛.这次的漏洞通过install.php安装程序页面的反序列化函数,造成了 ...
- Weblogic反序列化远程命令执行漏洞(CNVD-C-2019-48814)测试
漏洞简介 2018年4月18日,Oracle官方发布了4月份的安全补丁更新CPU(Critical Patch Update),更新中修复了一个高危的 WebLogic 反序列化漏洞CVE-2018- ...
- WebLogic任意文件上传漏洞复现与分析 -【CVE-2018-2894 】
CVE-2018-2894 漏洞影响版本:10.3.6.0, 12.1.3.0, 12.2.1.2, 12.2.1.3 下载地址:http://download.oracle.com/otn/nt/m ...
- 【原创】Weblogic 反序列化远程命令执行漏洞GetShell&Cmd Exploit
这工具写到半夜四点,做个记录. 已发布至freebuf,链接:http://www.freebuf.com/vuls/90802.html
- JAVA反序列化漏洞复现
目录 Weblogic反序列化漏洞 Weblogic < 10.3.6 'wls-wsat' XMLDecoder 反序列化漏洞(CVE-2017-10271) Weblogic WLS Cor ...
- struts2(s2-052)远程命令执行漏洞复现
漏洞描述: 2017年9月5日,Apache Struts发布最新安全公告,Apache Struts2的REST插件存在远程代码执行的高危漏洞,该漏洞由lgtm.com的安全研究员汇报,漏洞编号为C ...
- WebLogic任意文件上传漏洞(CVE-2019-2725)
一,漏洞介绍 1.1漏洞简介 Oracle weblogic反序列化远程命令执行漏洞,是根据weblogic的xmldecoder反序列化漏洞,只是通过构造巧妙的利用链可以对Oracle官方历年来针对 ...
- 8.Struts2-057漏洞复现
漏洞信息: 定义XML配置时如果namespace值未设置且上层动作配置(Action Configuration)中未设置或用通配符namespace时可能会导致远程代码执行. url标签未设置va ...
- Weblogic wls9_async_response 反序列化远程命令执行漏洞(CVE-2019-2725)复现
一. 漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-2725,危险级别:高危,CVSS分值:9.8. CNVD 编号:CNVD-C-2019-48814,CNVD对该漏洞的综合评级为 ...
- WebLogic XMLDecoder反序列化漏洞复现
WebLogic XMLDecoder反序列化漏洞复现 参考链接: https://bbs.ichunqiu.com/thread-31171-1-1.html git clone https://g ...
随机推荐
- 大数据 Hadoop 的五大优势
Hadoop与竞争对手相比有哪些优势? 到目前为止,人们可能已经听说过ApacheHadoop.这个名字来源于一只可爱的玩具大象,但Hadoop只不过是一个毛绒玩具.Hadoop是一个开源软件项目,它 ...
- WebSocket服务器
//创建websocket 服务器 ws_server.php //https://wiki.swoole.com/wiki/page/479.html //创建websocket服务器对象,监听0 ...
- go简易tcp/udp连接测试工具
package main import ( "fmt" "io" "log" "net" "os" ...
- 第三章3.3 selenium基础
seleniumIDE:是一款可以实现录制回放的操作:存在可视化窗口进行录制回放操作:它属于firefox(chrome)浏览器的插件;安装方式:两种 : 1.下载安装包离线安装2.在线安装 注意:不 ...
- C#自定义事件(简单版本)
C#中的事件分为两种:一种是厂商微软在VS中已经内置,以供用户使用:另一种是有用户自己定义的事件: 先简单回顾下第一种: [场景1]一个Form上一个Textbox控件和Button控件,当用户按下B ...
- OpenWRT实现NAT64/DNS64
OpenWRT实现NAT64/DNS64 连接到核心路由器 # 连接到核心路由器 [C:\~]$ ssh root@10.0.0.1 Connecting to 10.0.0.1:22... Conn ...
- 修复Joe主题静态资源为国内地址
背景 Typecho 是由 type 和 echo 两个词合成的,来自于开发团队的头脑风暴. Type,有打字的意思,博客这个东西,正是一个让我们通过打字,在网络上表达自己的平台.Echo,意思是回声 ...
- CentOS8 搭建Kubernetes
CentOS8 搭建Kubernetes 主机名 IP 组件 k8s-master 192.168.40.128/24 kubeadm.kubelet.kubectl.docker-ce k8s-no ...
- python入门教程之四基本语法
1Python 标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分大 ...
- [JAVA/Maven/IDEA]解决JAR包冲突
1 前言 想必这个问题,诸多同仁都遇到过. 很不凑巧,这段时间咱也屡次撞上这问题好几次了. 因此,实在是有必要说说怎么解决好这问题了0.0 2 诊断:包冲突的异常信息特征 [类定义未发现错误] NoC ...