Dubbo

Hessian 反序列化及相关利用链

試著忘記壹切 提交于 2020-02-29 19:40:39
作者:Longofo@知道创宇404实验室 时间:2020年2月20日 原文链接: https://paper.seebug.org/1131/ 前不久有一个关于Apache Dubbo Http反序列化的漏洞,本来是一个正常功能(通过正常调用抓包即可验证确实是正常功能而不是非预期的Post),通过Post传输序列化数据进行远程调用,但是如果Post传递恶意的序列化数据就能进行恶意利用。Apache Dubbo还支持很多协议,例如Dubbo(Dubbo Hessian2)、Hessian(包括Hessian与Hessian2,这里的Hessian2与Dubbo Hessian2不是同一个)、Rmi、Http等。Apache Dubbo是远程调用框架,既然Http方式的远程调用传输了序列化的数据,那么其他协议也可能存在类似问题,例如Rmi、Hessian等。@pyn3rd师傅之前在 twiter 发了关于Apache Dubbo Hessian协议的反序列化利用,Apache Dubbo Hessian反序列化问题之前也被提到过, 这篇文章 里面讲到了Apache Dubbo Hessian存在反序列化被利用的问题,类似的还有Apache Dubbo Rmi反序列化问题。之前也没比较完整的去分析过一个反序列化组件处理流程,刚好趁这个机会看看Hessian序列化、反序列化过程,以及

初识云计算的三种服务模式 (IaaS SaaS PaaS)

半腔热情 提交于 2020-02-29 09:18:27
最近公司在使用其他云服务的同时,要封装自己的云服务,下面作为开发产品前的热身,来了解云计算中的三种服务模式,笔者也是从网络上查找,进行综合总结。请拍。。 三种服务模式 根据现在最常用,也就是比较权威的NIST(National Institute of Standard and Technology)美国国家标准技术研究院定义,云计算主要分为三种服务模式,而且这三层的分法重要是从用户体验的角度出发的: IaaS IaaS全拼是Infrastructure as a Service,基础设置即服务,消费者通过Internet可以从完善的计算机基础设施获得服务。例如AWS、OpenStack,CloudStack提供的虚拟机计算服务。通过这种模式,用户可以从供应商那里获得他所需要的虚拟机或者存储资源来装载相关应用,同时这些基础设置的繁琐的管理工作将由IaaS供应商来处理。IaaS能通过它上面对虚拟机支持众多的应用。IaaS主要的用户是系统管理员。 产品 主要包括:Amazon EC2,Linode,Joyent,Rackspace,IBM Blue Cloud和Cisco UCS等。 功能 IaaS云有哪些功能呢?在《虚拟化和 云计算 》中列出了Iaas的七个基本功能: 资源抽象 :使用资源抽象的方法,能更好的调度和管理物理资源。 负载管理 :通过负载管理

dubbo与springcloud初识

五迷三道 提交于 2020-02-29 09:03:09
dubbo 优势:稳定性以及性能不错 不足:还有很多功能不完善,需要自己去实习,比如调用链路跟踪、服务发布、应用监控、故障报警、服务短路 springcloud 优势:提供一种标准的微服务方案,功能比较齐全 不足:基于http rest实现,导致性能没有dubbo好,服务发布需要走公网 来源: oschina 链接: https://my.oschina.net/u/1017791/blog/1935063

Dubbo处理TCP拆包粘包问题

和自甴很熟 提交于 2020-02-29 08:01:55
#Dubbo处理TCP拆包粘包问题 在TCP网络传输工程中,由于TCP包的缓存大小限制,每次请求数据有可能不在一个TCP包里面,或者也可能多个请求的数据在一个TCP包里面。那么如果合理的decode接受的TCP数据很重要,需要考虑TCP拆包和粘包的问题。我们知道在Netty提供了各种Decoder来解决此类问题,比如 LineBasedFrameDecoder , LengthFieldBasedFrameDecoder 等等,但是这些都是处理一些通用简单的协议栈,并不能处理高度自定义的协议栈。由于dubbo协议是自定义协议栈,并且包含消息头和消息体两部分,而消息头中包含消息类型、协议版本、协议魔数以及payload长度等信息。所以使用Netty自带的处理方案可能无法满足Dubbo解析自身协议的需求,所以需要Dubbo自己来处理,那自己处理,就需要自己处理TCP的拆包和粘包的问题。这里就对Dubbo处理此类问题进行探讨,从而加深自己对它的理解。 ##说明 此处所描述的协议是dubbo协议,其他的协议比如http,webservice等协议不是这里讨论范围。并且这里使用的通信框架以Netty来讲解,Mina以及grizzly也不在种类讨论范围。 ##NettyCodecAdapter NettyCodecAdapter 是对dubbo协议解析的入口

构建dubbo分布式平台-maven构建ant-framework核心代码annotation

感情迁移 提交于 2020-02-29 03:41:10
今天重点讲解的是ant-framework核心代码的编写过程。 其中ant-framework是ant分布式框架的基础核心框架,其中包括CRUD,MVC等一系列基类和模板。另外定义了spring,mybatis,wink等底层框架扩展项目,具体内容包括: 1. annotation相关注解:数据签名注解、用户是否走sso登录注解等,今天我们着重讲解一下annotation的编写。 提醒:自定义annotation可以有效的将我们需要注解的类、方法、字段根据业务所需进行定义可配置化。 2. 编写数字签名的annotaion的类,DataSign.java内容如下: package com.sml.sz.common.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 数据签名注解 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface DataSign { } 3.

dubbo 双网卡或者VPN的时候,服务提供者的错误IP注册到中心

天涯浪子 提交于 2020-02-28 23:00:36
使用了VPN,启动了dubbo服务提供者应用,又连了正式环境的注册中心; 一旦dubbo获取的ip错误后(拨了vpn 本机IP就会有多个), 这种情况即使提供者服务停掉,目前dubbo没有能力清除这类错误的提供者; (需要修改源码测试,需要客户端重新更细包,因为清除动作client端) 规避方案: 线上最好直接把(连接注册中心的)做ip限制,VPN拨上的IP过滤掉; 团队人员行为控制; 拨VPN又需要调试dubbo提供者的应用时,指定DUBBO服务IP的主机绑定; 发现这种情况的解决方法: 到dubbo管理后台,禁用错误的服务提供者; Dubbo 主机IP绑定说明: 缺省主机IP查找顺序: 通过LocalHost.getLocalHost()获取本机地址。 如果是127.*等loopback地址,则扫描各网卡,获取网卡IP。 注册的地址如果获取不正确,比如需要注册公网地址,可以: 1. 可以在/etc/hosts中加入:机器名 公网IP,比如: test1 205.182.23.201 2. 在dubbo.xml中加入主机地址的配置: < dubbo:protocol host=" http://10.20.160.198/wiki/display/dubbo/205.182.23.201" > 3. 或在dubbo.properties中加入主机地址的配置: dubbo

使用dubbo zookeeper出现的一些问题

白昼怎懂夜的黑 提交于 2020-02-28 20:57:12
1 、在服务提供者方面 @Service要使用dubbo的注解 2、在消费者方面 @Reference 使用dubbo的 3 、消费者开启成功,但一直没有在dubbo中看到服务注册的应用 测试简单的页面也报404错误,这个要注意自己是有在启动类上添加 componentScan来扫描controller 4、在消费者和服务者都成功后,可以会出现说bean没有Serializable接口 这个是因为dubbo中的远程调用的原因,要传输数据,得序列化和反序列化 5、可以在版本方面发生冲突问题(注意版本搭配问题) 来源: oschina 链接: https://my.oschina.net/u/2511906/blog/3178100

分布式项目(一)iot-pt

╄→尐↘猪︶ㄣ 提交于 2020-02-28 20:54:30
前言 目前很多项目都是些微服务,分布式,基本也都是基于spring cloud,dubbo实现的,关于spring cloud和dubbo网络上也有很多实用教程,但很少有基于项目开发的整套流程来写的,因为项目原因,突然有点小灵感,所以想从项目设计,开发,分布式部署整个流程来记录一个简单的分布式项目大概是个什么样子的。笔者也处于学习提高自己的阶段,所以有写的不好的和不对的地方,欢迎看官指正。 项目介绍 名称 :iot-pt 说明 :iot-pt是一个关于物联网的项目,简单的说就是物理设备通过某种协议上传数据到服务器,服务器对数据进行分类、存储,管理后台通过某些指令可以控制远程的物理设备。 先阶段,物联网设备非常多,熟悉的比如家里的水表,气表,电表,这些都是物联网设备,各种物联网设备所用的协议也是非常之多,像coap,tcp私有协议,lwm2m,mqtt,所传输的数据格式也是五花八门,像16进制,2进制,json等。所以我在构思iot-pt时,让协议和数据格式分开,协议更多的是一种传输规则、拆包规则,而数据格式则是能把物理设备发送的原始数据解码成有业务意义的数据。 业务概念设计 : 概念说明 产品:产品是一个业务概念,是一类物理设备的集合,定义了一类物理设备是什么,比如小米6手机,单个小米6手机,我们可以叫我的手机或者我的移动设备,但是对于小米公司来说

dubbo的服务注册发现是怎么实现的.

ぐ巨炮叔叔 提交于 2020-02-28 20:42:19
以 Zookeeper 作为 Dubbo 服务的注册中心为例 , 先来看看如何使用 : 到 webapps/ROOT/WEB-INF 下,有一个 dubbo.properties 文件,里面指向 Zookeeper ,使用的是 Zookeeper 的注册中心 服务端配置 <dubbo:application name="dubbo_provider"></dubbo:application> <dubbo:registry address="zookeeper://127.0.0.1:2181" check="false" subscribe="false" register=""></dubbo:registry> <!-- 暴露服务 --> <dubbo:service interface="cn.test.dubbo.registry.service.TestRegistryService" ref="testRegistryService" /> 客户端配置 : <dubbo:application name="dubbo_consumer"></dubbo:application> <!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://192.168.74.129:2181" check=

dubbo核心流程分析

南笙酒味 提交于 2020-02-28 20:02:30
dubbo流程图 首先我们将引用dubbo官方文档和其它一些博客中发布的dubbo的流程图来对dubbo的流程有个概括的了解。 参考博客: http://shiyanjun.cn/archives/325.html dubbo的总体架构图 服务发布及取消时序 服务引用及销毁时序 源代码调试流程追踪 接下来我们将通过调试源代码的方式来追踪核心流程,让我们更加细致和深入的了解dubbo的核心流程。 源代码调试环境 接口ProcessService定义 package com.alibaba.dubbo.test; public interface ProcessService { public Object test(Object object); } 接口实现类ProcessServiceImpl package com.alibaba.dubbo.test; public class ProcessServiceImpl implements ProcessService { public Object test(Object object) { //测试方法,直接返回参数值。 return object; } } 服务发布入口类ServerMain package com.alibaba.dubbo.test; import org.springframework.context