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远程消息交换协议)达到执行任意反序列化目的。
环境搭建
漏洞复现
使用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