Weblogic 反序列化命令执行漏洞(CVE-2018-2628)

漏洞概述

​ 2018年4月17日,北京时间4月18日凌晨,Oracle官方发布了4月份的关键补丁更新CPU(Critical Patch Update),其中包含一个高危的Weblogic反序列化漏洞(CVE-2018-2628),这个漏洞是在2017年11月份报给Oracle的,通过该漏洞,攻击者可以在未授权的情况下远程执行任意代码。

其基本原理其实都是利用了T3协议的缺陷实现了Java虚拟机的RMI:远程方法调用(Remote Method Invocation),能够在本地虚拟机上调用远端代码。

影响版本

10.3.6.0,12.1.3.0,12.2.1.2, 12.2.1.3

JAVA序列化和反序列化

1.序列化

Java是运行在JVM(java虚拟机)之上的一种语言,我们通过命令行javac生成的字节码格式的类文件在任何平台的JVM上都可以运行而JVM(java虚拟机)运行时会解释类文件中的命令。在Java下对象这个概念很重要,java允许我们在内存中创建可复用的对象,但是一般情况下,只有当JVM属于运行状态时,这些对象才能够存在,也就是说这些对象的生命周期没有JVM的生命周期来的长。那如果我们需要保证即使在JVM停止运行的情况下,也能够保存相关制定对象,并且在将来某个时刻能够被读取是用得到,Java的序列化正是为了解决这一需求而产生的。

Java序列化是指把Java对象转换为字节序列的过程便于保存在内存、文件、数据库中,ObjectOutputStream类的writeObject()方法可以实现序列化。

2.反序列化

通过对序列化的理解,那么就可以很好的来理解反序列化。

反序列化的过程是指把字节序列恢复为 Java 对象的过程。我们可以将反序列化理解为一个”读”操作,通过ObjectInputStream 类的 readObject() 方法可以将对象实例进行”反序列化”操作。

综合来说,序列化与反序列化是让 Java 对象脱离 Java 运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化存储。

漏洞原理

远程攻击者可利用该漏洞在未授权的情况下发送攻击数据,通过T3协议(EJB支持远程访问,且支持多种协议。这是web Container和EJB Container的主要区别)在Weblogic Server在执行反序列化操作,利用RMI(远程方法调用)机制的缺陷,通过JRMP协议(JAVA Remote Messaging Protocol: Java远程消息交换协议)达到执行任意反序列化目的。

环境搭建

vulhub

漏洞复现

使用ysoserial工具启动一个JRMP Server:

接下来使用exploit.py脚本,向服务器发送数据包:

连接成功,并且返回了payload,可以继续利用上传shell。

接下来进入容器内,查看命令是否执行:

漏洞修复

更新至最新版

禁用T3协议

参考链接

https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2018-2628

https://blog.csdn.net/he_and/article/details/90580999

https://github.com/jas502n/CVE-2018-2628

https://www.cnblogs.com/sallyzhang/p/12326738.html

posted @ 2020-07-21 14:59  菜包胖嘟嘟  阅读(1241)  评论(0编辑  收藏  举报