首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干货|最全fastjson漏洞复现与绕过

这个协议就像HTTP协议一样,规定了客户端和服务端通信要满足规范。RMI中对象是通过序列化方式进行编码传输。 远程对象 使用远程方法调用,必然会涉及参数传递和执行结果返回。...所以这些需要被传输对象必须可以被序列化,这要求相应必须实现 java.io.Serializable 接口,并且客户端serialVersionUID字段要与服务器端保持一致。...客户端使用了与RMI注册表相同机制。RMI服务端将URL传递给客户端客户端通过HTTP请求下载这些。 这个概念比较重要,JNDI注入利用方法中也借助了动态加载思路。...这里涉及到角色:客户端、RMI注册表、远程对象服务器、托管class文件Web服务器可以分别位于不同主机上: LDAP LDAP(Lightweight Directory Access Protocol...nc监听端口,之前漏洞复现中已经讲过,就不再赘述了 我们在前面用到都是远程加载RMI或LDAP服务端上恶意,即远程加载恶意一些情况下,这种远程加载恶意方法并不能百分之百能够利用成功,这里就可以使用本地利用方式

14.5K71

FastJson渗透测试

首先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。

1.7K50
您找到你想要的搜索结果了吗?
是的
没有找到

Spring Boot整合JWT实现用户认证(附源码)

当然使用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错误 ?

87920

Spring Boot整合JWT实现用户认证(附源码)

当然使用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错误 ?

62530

Apache 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分服务端+客户端模式,如果两台都是服务端呢?

1.8K00

通过Wireshark和arthas排查由DNS引发Ignite生产故障案例

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源代码回顾 客户端收集本地信息 首先客户端启动加入节点前

2.7K20

Apache 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分服务端+客户端模式,如果两台都是服务端呢?

2.7K60

ignite TCP发现原理

协调 - 特定(按最小顺序号)服务器节点,负责协调集群中不同过程(如验证发现消息,管理分区映射交换等)。 拓扑 - 所有节点都被组织成结构。...实现了DiscoverySpi接口定义了一个拓扑(所有节点都被排列在其中)结构。其中TcpDiscoverySpi集群使用是环形拓扑。...客户端节点位于环外,并始终连接到特定服务端(客户端没有上一个节点,只能连接到一个服务端)。 ? 大多数实现逻辑服务端ServerImpl和客户端ClientImpl中。...当新服务器端节点启动时,它会通过TcpDiscoveryIpFinder提供所有地址尝试查找现有集群。如果所有地址都不可用,则节点将自身视为第一个节点,从自身形成集群并成为此集群协调者。...加入请求生命周期结束后; 只有NodeAdded消息进一步使用。协调创建此消息,添加有关加入节点信息(包括JoinReq中加入节点发现数据),并发送到环上。

1.2K10

专为实时而构建:使用Apache Kafka进行大数据消息传递,第1部分

当Kafka消费者首次启动时,它将向服务器发送拉取请求,要求检索偏移值大于0特定topic任何消息。服务器将检查该topic日志文件并返回三个新消息。...消费者将处理消息,然后发送偏移量大于3消息请求,依此类推。 Kafka中,客户端负责记住偏移计数和检索消息.Kafka服务器不跟踪或管理消息消耗。默认情况下,Kafka服务器将保留七天消息。...此客户端包含从控制台读取用户输入并将该输入作为消息发送到Kafka服务器逻辑。 我们通过从java.util.Properties创建对象并设置其属性来配置生产者。...为了使用自定义对象作为键或值,我们需要创建一个实现org.apache.kafka.common.serialization.Serializer。然后我们可以添加逻辑来将序列化为byte[]。...我们还必须在我们消费者代码中使用相应序列化。 Kafka 生产者 Properties使用必要配置属性填充之后,我们可以使用它来创建对象KafkaProducer。

90630

matinal:高质量内存数据库技术选型推荐(二)

内存计算:支持通过标准SQL或者LINQ方式实现对内存数据聚合、计算和查询,充分发挥、利用应用服务器资源。 二. 业界有哪几类主流内存数据库 1....内存数据被整合到SQL Server关系引擎中,使用内存数据库时,客户端应用程序甚至感受不到任何变化,DAL接口也不需要做任何修改。...Apache Ignite   Apache Ignite是一个内存数据组织是高性能、集成化以及分布式内存平台,他可以实时地大数据集中执行事务和计算,和传统基于磁盘或者闪存技术相比,性能有数量级提升...ACID事务:Ignite提供了一个完全符合ACID分布式事务来保证一致性。 支持乐观和悲观并发模型以及读提交、可复制读和序列化隔离级别。...fastdb是一个面向应用数据库,数据库表通过应用程序信息来构造。

19910

7 什么是dubbo

任何一台服务器无法满足淘宝双十一数据吞吐量,一定是很多台服务器公共来完成 。...1 RPC RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式 RPC基本通信原理 客户端对象进行序列化 底层通信框架使用netty(基于tcp...协议socket),将序列化对象发给服务方提供方 服务提供方通过socket得到数据文件之后,进行反序列化,获得要操作对象 对象数据操作完毕,将新对象序列化,再通过服务提供方socket返回给客户端...客户端获得序列化数据,再反序列化,得到最新数据对象,至此,完成一次请求 RPC两个核心模块:通讯(socket),序列化。...) Monitor 监控服务统计中心(统计服务被调用次数) Container 服务运行容器(烧烤一条街,洗浴一条街) 3 调用关系 1.服务容器负责启动,加载,运行服务提供者; 2.服务提供者启动时

10610

Java反序列化(十二) | Fastjson②1.2.24-68总结

整个利用流程如下 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是关闭序列化时,会检查是否开启了

66140

内存中 MapReduce 和 Hadoop 生态系统:第 1 章

本文部分内容摘自《使用 Apache Ignite 进行内存高性能计算 》一书。如果对此感兴趣,请查阅此书其余部分以获取更多有用信息。...请注意,Hadoop 商品硬件上运行想法就是一个谎言。大多数 Hadoop 流程都是 I/O 密集型,需要多部同环境服务器还有中介服务器配合工作才能实现良好性能。...此执行环境由一组 Java 虚拟机构成,而集群中每台服务器都会有一个这样虚拟机。如上图所示,JVM 会形成 Ignite MapReduce 引擎。...另外,内存中 Ignite 数据单元可以自动部署所有必需可执行程序或库,以便在整个内存单元中执行 MapReduce,从而大大缩短了启动时间,甚至能缩短到毫秒级别。 现在我们已经了解了基础知识。...只有启用了上述事件之后,才可以 Ignite Visor 中使用命令 “tasks” 来获取有关任务执行统计信息。

1.5K60

大型架构之科普工具篇

5 原生对象 Ignite允许用户使用自己领域对象模型并且提供对任何Java/Scala, C++和.NET/C#数据类型(对象)原生支持,用户可以Ignite缓存中轻易存储任何程序和领域对象。...不支持 7 (服务端侧)并置处理 Ignite支持服务器端靠近数据以并置方式直接执行任何Java, C++和.NET/C#代码。...9 持续查询 Ignite提供对客户端服务器端持续查询支持,用户可以设置服务器过滤器来减少和降低传输到客户端事件数量。...Redis提供客户端基于键事件通知支持,但是他不提供服务器过滤器,因此造成了客户端服务器端中更新通知网络流量显著增加。...10 数据库集成 Ignite可以自动集成外部数据库-RDBMS, NoSQL,和HDFS。 Redis无法与外部数据库集成。

2.8K61

你知道怎么攻击RMI吗?

ps: 虽然我们对象被封装到了handler中,但是java序列化时是会层层进行,所以,不用担心我们对象不被反序列化。...其实这种攻击方式还是攻击registry(应该是吧),如果registry与远程对象提供服务器不在同一主机上,那么就要注意我们攻击是registry而不是远程对象提供服务器,但是一般Registry...与远程对象提供服务器都是同一主机。...客户端使用了与RMI注册表相同机制。RMI服务端将URL传递给客户端客户端通过HTTP请求下载这些。 所以,如果我们可以控制客户端从哪里加载,那么就能够让客户端加载恶意,完成攻击目的。...codebase属性,然后去对象地址加载文件,如果对方没有提供codebase,才会错误使用自己本地设置codebase去加载

1.2K30

ignite 2.11.0 节点发现原理及源码分析

例如,当查询驻留在缓存中数据时,集群可能使用与本文描述拓扑不同拓扑。...环形拓扑 TcpDiscoverySpi 将集群所有服务器节点组织成环形结构,其中每个节点只能向单个节点(称为“邻居”)发送发现消息。客户端节点位于环之外,并连接到一个服务端。...此代码逻辑分别包含在服务器节点ServerImpl客户端节点ClientImpl 中。...节点加入过程 概述 当一个新节点启动时,它尝试通过探测TcpDiscoveryIpFinder提供地址列表来找到一个现有的集群。...创建连接 客户端创建连接代码跟踪如下: Ignite ignite = Ignition.start(cfg);//客户端启动代码 -->IgnitionEx$IgniteNamedInstance

61710

不懂RPC实现原理怎能实现架构梦

三、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或者其他条件无法找到对象

1.2K30

Java安全漫谈学习笔记 — 一个新旧交替时刻

RMI流程中,客户端和服务端之间传递是一些序列化对象,这些对象序列化时,就会去寻找。...对,RMI中,我们是可以将codebase随着序列化数据一起传输服务器接收到这个数据后就会去CLASSPATH和指定codebase寻找,由于codebase被控制导致任意命令执行漏洞。...URLClassLoader 实际上是我们平时默认使用 AppClassLoader ,所以,我们解释 URLClassLoader 工作过程实际上就是解释默认Java加载工作流程。...所以,作为攻击者,如果我们能够控制目标Java ClassLoader基础路径为一个http服务器,则可以利 用远程加载方式执行任意代码了。...但是p神得到了更准确答案:如果反序列化流中包含非Java自身数组,则会出现无法加载错误。

88780

JAVA面试常考系列八

Class.forName方法是一个静态方法,用于加载将建立到数据库连接驱动程序,返回与给定字符串名称相关联或接口Class对象。...第一种形式参数name表示全名;initialize表示是否初始化;loader表示加载使用加载。...特别是当数据库客户端数量增加时,这个代价非常高,消耗了大量资源。应用服务器启动时获得一个数据库连接池,并保存在一个池中。连接请求由驻留在池中连接提供。...远程方法调用(RMI)也可以看作是远程运行对象上激活方法过程。 题目九 如何使用RMI开发?...4.产生远程访问对象桩和框。 5.注册远程对象。 6.运行服务器和客户程序。 题目十 什么是RMI架构基本原理? RMI体系结构是基于一个非常重要行为定义和行为实现相分离原则。

993110
领券