这个协议就像HTTP协议一样,规定了客户端和服务端通信要满足的规范。在RMI中对象是通过序列化方式进行编码传输的。 远程对象 使用远程方法调用,必然会涉及参数的传递和执行结果的返回。...所以这些需要被传输的对象必须可以被序列化,这要求相应的类必须实现 java.io.Serializable 接口,并且客户端的serialVersionUID字段要与服务器端保持一致。...客户端使用了与RMI注册表相同的机制。RMI服务端将URL传递给客户端,客户端通过HTTP请求下载这些类。 这个概念比较重要,JNDI注入的利用方法中也借助了动态加载类的思路。...这里涉及到的角色:客户端、RMI注册表、远程对象服务器、托管class文件的Web服务器可以分别位于不同的主机上: LDAP LDAP(Lightweight Directory Access Protocol...nc监听端口,在之前漏洞复现中已经讲过,就不再赘述了 我们在前面用到的都是远程加载RMI或LDAP服务端上的恶意类,即远程加载恶意类,在一些情况下,这种远程加载恶意类的方法并不能百分之百能够利用成功,这里就可以使用本地利用方式
首先RMI(Remote Method Invocation)是专为Java环境设计的远程方法调用机制,远程服务器实现具体的Java方法并提供接口,客户端本地仅需根据接口类的定义,提供相应的参数即可调用远程方法...这个协议就像HTTP协议一样,规定了客户端和服务端通信要满足的规范。在RMI中对象是通过序列化方式进行编码传输的。...()获取绑定对象的引用,并在目录中保存,当客户端使用lookup获取对应名字时,会返回ReferenceWrapper类的代理文件,然后会调用getReference()获取Reference类,最终通过...整个利用流程如下 1.首先开启HTTP服务器,并将我们的恶意类放在目录下 2.开启恶意RMI服务器 3.攻击者控制url参数为上一步开启的恶意RMI服务器地址 4.恶意RMI服务器返回ReferenceWrapper...HTTP服务器上的恶意类),在实例化时触发静态代码片段中的恶意代码 2.FastJson渗透总结 1.反序列化常用的两种利用方式,一种是基于rmi,一种是基于ldap。
当然使用Session可以实现这个功能,但是使用Session的同时也会增加服务器的存储压力,而JWT是将存储的压力分布到各个客户端机器上,从而减轻服务器的压力。...JWT实现认证的原理 服务器在生成一个JWT之后会将这个JWT会以Authorization : Bearer JWT 键值对的形式存放在cookies里面发送到客户端机器,在客户端再次访问收到JWT保护的资源...URL链接的时候,服务器会获取到cookies中存放的JWT信息,首先将Header进行反编码获取到加密的算法,在通过存放在服务器上的密匙对Header.Payload 这个字符串进行加密,比对JWT中的...JWT实现用户认证的流程图 ? JWT的代码实现 这里的代码实现使用的是Spring Boot(版本号:1.5.10)框架,以及Apache Ignite(版本号:2.3.0)数据库。...2.再让该用户进行登录,可以看到登录成功之后返回的JWT字符串 ? 3.直接申请访问/secure/users/user ,这时候肯定是无法访问的,服务器返回500错误 ?
hostname 故障背景 一次维护人员在上完线后,发现在分布式内存数据网格apache Ignite集群上通过客户端执行加载数据任务时,出现客户端节点连不上服务节点的问题。...命令如下: tcpdump -i ens192 host 10.1.12.XXX and port 47500 -w server.pcap 47500 为Ignite客户端与服务器建立连接的端口号...接着重试后往下看: 在客户端重试的TCP包中,37行发现发送len为1的应答包(RES_OK),但是重试前服务端没有发送这个应答包,结合处理TcpDiscoveryJoinRequest源码看,代码为...,客户端socket到了超时时间10秒后,重连了,在重连后,后续都正常。...2个,一是power服务端节点遗漏配置x86客户端的hostname,二是维护开启DNS,导致DNS解析hostname找不到,卡住15秒 结合ignite源代码回顾 客户端收集本地信息 首先客户端在启动加入节点前
在Apache Ignite中有三种自有的发现机制:组播、静态IP、组播+静态IP。下面就这几种来试一试吧。...测试方法简述 测试的方法主要是通过搭建2台tomcat服务器,使用nginx来代理这2台tomcat,tomcat服务器里有一个web应用,此应用内通过Apache Ignite webSession...这说明客户端模式的节点不保存数据。 测试一下静态IP指定 在之前的测试中静态IP是指定了全部的机器,那么如果只指定一个IP会如何呢?对节点启动顺序是否有影响。...先启动36.116-——>系统登录——>再启动49.204 这种模式没问题,访问nginx的服务地址可以访问到两台服务器。所以必须有一个服务器节点。...而且启动顺序也必须是先启动服务器节点再启动客户端节点才行。 测试服务器模式只配置静态IP192.168.36.116 上面测试了一个静态IP分服务端+客户端的模式,如果两台都是服务端呢?
反序列化则可以将字节流转换成对象,注入进程序之中,也就是说,不加以控制的反序列化,可以在程序中注入任意一个对象。...这意味着,RMI在接收到经过序列化编码的对象后会进行反序列化。...当客户端执行lookup()时,会对恶意的Factory类进行加载并实例化,通过factory.getObjectInstance()获取外部远程对象实例。...,放到vps的web目录下 python3 -m http.server 使用marshalsec启动一个RMI服务器,或者ladp服务器。...可以使用RMI或者LDAP的服务,将reference result 重定向到web服务器(即文件Exploit.class的存放位置)。
协调器 - 特定(按最小顺序号)服务器节点,负责协调集群中的不同过程(如验证发现消息,管理分区映射交换等)。 拓扑 - 所有节点都被组织成的结构。...实现了DiscoverySpi接口的类定义了一个拓扑(所有节点都被排列在其中)的结构。其中TcpDiscoverySpi集群使用的是环形拓扑。...客户端节点位于环外,并始终连接到特定服务端(客户端没有上一个的节点,只能连接到一个服务端)。 ? 大多数实现逻辑在服务端ServerImpl和客户端ClientImpl类中。...当新的服务器端节点启动时,它会通过TcpDiscoveryIpFinder提供的所有地址尝试查找现有集群。如果所有地址都不可用,则节点将自身视为第一个节点,从自身形成集群并成为此集群的协调者。...在加入请求的生命周期结束后; 只有NodeAdded消息进一步使用。协调器创建此消息,添加有关加入节点的信息(包括JoinReq中加入节点发现数据),并发送到环上。
当Kafka消费者首次启动时,它将向服务器发送拉取请求,要求检索偏移值大于0的特定topic的任何消息。服务器将检查该topic的日志文件并返回三个新消息。...消费者将处理消息,然后发送偏移量大于3的消息请求,依此类推。 在Kafka中,客户端负责记住偏移计数和检索消息.Kafka服务器不跟踪或管理消息消耗。默认情况下,Kafka服务器将保留七天的消息。...此客户端类包含从控制台读取用户输入并将该输入作为消息发送到Kafka服务器的逻辑。 我们通过从java.util.Properties类创建对象并设置其属性来配置生产者。...为了使用自定义对象作为键或值,我们需要创建一个实现类org.apache.kafka.common.serialization.Serializer。然后我们可以添加逻辑来将类序列化为byte[]。...我们还必须在我们的消费者代码中使用相应的反序列化器。 Kafka 生产者 在Properties使用必要的配置属性填充类之后,我们可以使用它来创建对象KafkaProducer。
内存计算:支持通过标准SQL或者LINQ的方式实现对内存数据的聚合、计算和查询,充分发挥、利用应用服务器的资源。 二. 业界有哪几类主流的内存数据库 1....内存数据被整合到SQL Server关系引擎中,使用内存数据库时,客户端应用程序甚至感受不到任何变化,DAL接口也不需要做任何修改。...Apache Ignite Apache Ignite是一个内存数据组织是高性能的、集成化的以及分布式的内存平台,他可以实时地在大数据集中执行事务和计算,和传统的基于磁盘或者闪存的技术相比,性能有数量级的提升...ACID事务:Ignite提供了一个完全符合ACID的分布式事务来保证一致性。 支持乐观和悲观的并发模型以及读提交、可复制读和序列化的隔离级别。...fastdb是一个面向应用的数据库,数据库表通过应用程序的类信息来构造。
:提供远程服务的程序,包含了实际的远程对象实现,服务器程序在启动时需要创建远程对象实例并使用Naming.rebind()方法将其与指定的名称绑定到RMI Registry,当接受到来自客户端的远程调用请求时...,服务器会执行相应的操作并返回结果 RMI Registry:运行在服务器上的一个简单的名称服务,用于管理远程对象的注册和查找,RMI Registry通常在独立的进程中运行(默认端口为1099),服务器在启动时会注册其提供的远程对象使得客户端能够通过名称访问这些对象...RMI接口都可以发一个自己构建的对象过去从而迫使服务器端将对象按任何一个存在于服务端classpath中的可序列化类来反序列化恢复对象 2、JVM之间远程通信时,数据对象是通过网络进行传输的,RMI会使用序列化机制将对象转换为字节流之后再进行传输...: Stub:客户端与远程服务之间的代理,负责将方法调用请求发往服务器 Skeleton:在较新的Java版本中已被弃用,属于服务器端的组件,负责接收来自Stub的请求并将调用转发到实际的实现对象 动态加载...: RMI服务端允许远程加载类 JDK 6u45、7u21、8u121以下 利用原理 RMI数据通信大量的使用了Java的对象反序列化,那么在使用RMI客户端去攻击RMI服务端时需要特别小心,如果本地RMI
整个利用流程如下 1.首先开启HTTP服务器,并将我们的恶意类放在目录下 2.开启恶意RMI服务器 3.攻击者控制url参数为上一步开启的恶意RMI服务器地址 4.恶意RMI服务器返回ReferenceWrapper...类 5.目标(JNDI_Client)在执行lookup操作的时候,在decodeObject中将ReferenceWrapper变成Reference类,然后远程加载并实例化我们的Factory类(即远程加载我们...HTTP服务器上的恶意类),在实例化时触发静态代码片段中的恶意代码 远程加载服务: rmi ldap 1.反序列化常用的两种利用方式,一种是基于rmi,一种是基于ldap。...3.JNDI是一个接口,在这个接口下会有多种目录系统服务的实现,通过名称等去找到相关的对象,并把它下载到客户端中来。 4.ldap指轻量级目录服务协议。...及以上的版本里,直接使用上面的链子是会报错的, 因为官方对之前的反序列化漏洞做了修复,引入了checkAutoType安全机制,默认情况下autoTypeSupport是关闭的,在反序列化时,会检查是否开启了
任何一台服务器都无法满足淘宝的双十一的数据吞吐量,一定是很多台服务器公共来完成 的。...1 RPC RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式 RPC基本的通信原理 在客户端将对象进行序列化 底层通信框架使用netty(基于tcp...协议的socket),将序列化的对象发给服务方提供方 服务提供方通过socket得到数据文件之后,进行反序列化,获得要操作的对象 对象数据操作完毕,将新的对象序列化,再通过服务提供方的socket返回给客户端...客户端获得序列化数据,再反序列化,得到最新的数据对象,至此,完成一次请求 RPC两个核心模块:通讯(socket),序列化。...) Monitor 监控服务的统计中心(统计服务被调用的次数) Container 服务运行容器(烧烤一条街,洗浴一条街) 3 调用关系 1.服务容器负责启动,加载,运行服务提供者; 2.服务提供者在启动时
本文的部分内容摘自《使用 Apache Ignite 进行内存高性能计算 》一书。如果对此感兴趣,请查阅此书的其余部分以获取更多有用的信息。...请注意,Hadoop 在商品硬件上运行的想法就是一个谎言。大多数 Hadoop 的流程都是 I/O 密集型的,需要多部同环境的服务器还有中介服务器配合工作才能实现良好的性能。...此执行环境由一组 Java 虚拟机构成,而集群中的每台服务器都会有一个这样的虚拟机。如上图所示,JVM 会形成 Ignite MapReduce 引擎。...另外,内存中的 Ignite 数据单元可以自动部署所有必需的可执行程序或类库,以便在整个内存单元中执行 MapReduce,从而大大缩短了启动时间,甚至能缩短到毫秒级别。 现在我们已经了解了基础知识。...只有在启用了上述事件之后,才可以在 Ignite Visor 中使用命令 “tasks” 来获取有关任务执行的统计信息。
5 原生对象 Ignite允许用户使用自己的领域对象模型并且提供对任何Java/Scala, C++和.NET/C#数据类型(对象)的原生支持,用户可以在Ignite缓存中轻易的存储任何程序和领域对象。...不支持 7 (服务端侧)并置处理 Ignite支持在服务器端靠近数据以并置的方式直接执行任何Java, C++和.NET/C#代码。...9 持续查询 Ignite提供对客户端和服务器端持续查询的支持,用户可以设置服务器端的过滤器来减少和降低传输到客户端的事件数量。...Redis提供客户端基于键的事件通知的支持,但是他不提供服务器端的过滤器,因此造成了在客户端和服务器端中更新通知网络流量的显著增加。...10 数据库集成 Ignite可以自动集成外部的数据库-RDBMS, NoSQL,和HDFS。 Redis无法与外部数据库集成。
ps: 虽然我们的对象被封装到了handler中,但是java在反序列化时是会层层进行的,所以,不用担心我们的对象不被反序列化。...其实这种攻击方式还是攻击的registry(应该是吧),如果registry与远程对象提供服务器不在同一主机上,那么就要注意我们攻击的是registry而不是远程对象提供服务器,但是一般Registry...与远程对象提供服务器都是同一主机。...客户端使用了与RMI注册表相同的机制。RMI服务端将URL传递给客户端,客户端通过HTTP请求下载这些类。 所以,如果我们可以控制客户端从哪里加载类,那么就能够让客户端加载恶意类,完成攻击的目的。...codebase属性,然后去对象地址加载类文件,如果对方没有提供codebase,才会错误的使用自己本地设置的codebase去加载类。
例如,当查询驻留在缓存中的数据时,集群可能使用与本文描述的拓扑不同的拓扑。...环形拓扑 TcpDiscoverySpi 将集群的所有服务器节点组织成环形结构,其中每个节点只能向单个节点(称为“邻居”)发送发现消息。客户端节点位于环之外,并连接到一个服务端。...此代码逻辑分别包含在服务器节点ServerImpl类和客户端节点ClientImpl 类中。...节点加入过程 概述 当一个新节点启动时,它尝试通过探测TcpDiscoveryIpFinder提供的地址列表来找到一个现有的集群。...创建连接 客户端创建连接代码跟踪如下: Ignite ignite = Ignition.start(cfg);//客户端启动代码 -->IgnitionEx$IgniteNamedInstance
三、Apache Thrift + Protobuf 如上所述,利用Protobuf在灵活数据定义、高性能的序列化/反序列化、兼容性上的优势,以及Thrift在传输上的成熟实现,将两者结合起来使用,是不少互联网公司的选择...; * 异常 * 1. userException:输入的参数有误; * 2. systemExeption:服务器端出错导致无法创建; * 3. notFoundException: 该实体在服务器端没有找到...; * 异常 * 1. userException:输入的参数有误; * 2. systemExeption:服务器端出错导致无法创建; * 3. notFoundException: 该实体在服务器端没有找到...; * 2. systemExeption:服务器端出错导致无法创建; * 3. notFoundException: 该实体在服务器端没有找到。...; 2: optional string message; 3: i32 rateLimit; } /** * 根据给定的ID或者其他条件无法找到对象。
重要的是,客户了解如何为项目选择要写入或读取的服务器。此外,如果客户端无法连接到服务器,则客户端非常了解该怎么办。...Ignite Apache Ignite是一个免费的开源、易于扩展的分布式键值存储,缓存和多模型数据库系统,它提供了强大的处理API,可用于在分布式数据上进行计算。...Ignite还通过允许您在服务器上启用身份验证并在客户端上提供用户凭据来支持安全性。还支持SSL套接字通信,以在所有Ignite节点之间提供安全连接。...它是一个出色的缓存引擎和内容加速器,您可以将其部署在Web服务器(例如NGINX,Apache和许多其他服务器)的前面,以侦听默认的HTTP端口,以接收客户端请求并将其转发到Web服务器,并交付Web服务器响应客户端...在安全性方面,Traffic Server支持控制客户端访问,方法是允许您配置允许使用代理缓存的客户端,客户端与自身之间以及自身与原始服务器之间的连接的SSL终止。
领取专属 10元无门槛券
手把手带您无忧上云