在不同的classloader之间进行对象的序列化和反序列化

Java反序列化漏洞利用与内存马注入实战:从CB1链到Tomcat持久化攻击 Java反序列化漏洞是Web安全中常见的高危风险点,其原理在于应用在反序列化不可信数据时,可能执行攻击者构造的恶意代码链。这类漏洞的技术价值在于能够绕过常规安全边界,直接实现远程代码执行。在实际应用场景中,攻击者常利用ysoserial工具中的CommonsBeanutils1(CB1)等利用链,结合目标Classpath中的常见库,实现稳定利用。更值得关注的是,攻击者往往会进一步植入无文件内存马,如Tomcat Filter型内存马,以实现持久化控制。本文以致远M3漏洞复现为例,深入剖析了如何将CB1链与 阅读详情

    在同一个classloader中,利用如下的方法serializabale和deserializable对象:

  ByteArrayOutputStream bo=new ByteArrayOutputStream();

  ObjectOutputStream oo=new ObjectOutputStream(bo);
  oo.writeObject(outObject);

  

   ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());
  ObjectInputStream oi=new ObjectInputStream(bi);
  Object inObject = oi.readObject();
    当序列化的对象和反序列化的对象不在同一个classloader中时,以上的代码执行时,就会报无法把属性付给对象的错误,此时应当,通过设置反序列化得classloader,来解决这个问题。

  首先,从ObjectInputStream继承一个自己的ObjectInputStream:

public class CustomObjectInputStream extends ObjectInputStream {

 protected ClassLoader classLoader = this.getClass().getClassLoader();

 /**
  * @param in
  * @throws IOException
  */
 public CustomObjectInputStream(InputStream in) throws IOException {
  super(in);
  // TODO Auto-generated constructor stub
 }

 public CustomObjectInputStream(InputStream in, ClassLoader cl)
   throws IOException {
  super(in);
  // TODO Auto-generated constructor stub
  this.classLoader = cl;
 }

 /*
  * (non-Javadoc)
  *
  * @see java.io.ObjectInputStream#resolveClass(java.io.ObjectStreamClass)
  */
 @Override
 protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException,
   ClassNotFoundException {
  // TODO Auto-generated method stub
  String name = desc.getName();
  try {
   return Class.forName(name, false, this.classLoader);
  } catch (ClassNotFoundException ex) {
   return super.resolveClass(desc);
  }
 }

}

然后在反序列化时,把序列化对象的classloader的传入:

   

 

ByteArrayOutputStream bo=new ByteArrayOutputStream();

ObjectOutputStream oo=new ObjectOutputStream(bo);
oo.writeObject(outObject);

 

   ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());

   CustomObjectInputStream oi=new CustomObjectInputStream(bi,outObject.getClass().getClassLoader());
  
   Object = oi.readObject();

Nacos 2.x JRaft Hessian反序列化RCE漏洞深度解析 Nacos作为主流微服务配置与服务治理中心,其底层通信机制的安全性直接影响整个云原生架构的可信边界。JRaft是Nacos 2.0+默认启用的强一致性协议,而它依赖的Hessian 3.2.1序列化器因缺乏类白名单校验,构成高危反序列化风险。该漏洞不依赖用户认证、绕过WAF与RASP检测,仅需未鉴权HTTP接口(如/nacos/v1/ns/operator/metrics)配合application/x-hessian请求体即可触发远程代码执行。技术价值在于直击基础设施层,实现从服务治理组件到宿主机权限的越 阅读详情

相关推荐

commons-io-2.6.jar下载

commons-io-2.6.jar下载

不同类装载器生成的Class对象,所生成的实例相互转化报ClassCastException

package com.jaychang.demo; public class Dog { public String say(String name) { System.out.println("Hello " + name); return "Hello " + name; } }   package com.jaychang.demo; impor...

Jay Chang 572

国产数据库PolarDB-X实战:5分钟快速搭建本地开发环境(附Docker一键部署脚本)

本文提供了一份详尽的国产分布式数据库PolarDB-X本地开发环境搭建指南。通过Docker Compose一键部署脚本,开发者可在5分钟内快速启动一个功能完整的PolarDB-X实例,涵盖环境准备、脚本解析、连接验证及日常维护,极大简化了国产数据库的入门和体验流程。

weixin_29246195的博客 356

Parcelable 实现序列化与反序列化

Android Parcelable 实现序列化与反序列化

zsy_2020的博客 483

从零到一:YOLOv11高帧率模型在RDK X5上的ONNX转换与部署实战

本文详细介绍了将最新的YOLOv11高帧率模型部署到地平线RDK X5开发板的完整实战流程。内容涵盖从PyTorch模型导出ONNX、地平线工具链环境配置与模型量化编译,到编写高效的板端推理代码,并针对高帧率目标进行了后处理优化。通过实战避坑指南,帮助开发者在RDK X5上实现30FPS以上的实时目标检测。

weixin_29089057的博客 139

实战指南:从零开始用YOLOv8训练VisDrone无人机检测模型

本文提供了一份详细的实战指南,手把手教你从零开始使用YOLOv8训练一个无人机检测模型。内容涵盖VisDrone数据集下载与格式转换、YAML配置文件编写、模型训练与评估,以及最终的推理部署,旨在帮助开发者快速掌握无人机视角下的目标检测技术。

salt的博客 682

ClassLoader引发的类型转换异常

Java的类型转换异常(ClassCastException),恐怕是开发中最常见的异常之一,比如你把一个本身为String的对象强行转换成List时,就会抛出此异常。当然,一般情况下这种错误很容易就从异常信息中发现原因并纠正,通常对于此类问题我们的想法就是:class文件相同,即字节码相同,那么实例化产生的对象肯定也会相同类型。但是,存在一些情况,会发生形如“把class1转换成class1却抛

王程斯的专栏 8082

Python 爬虫实战:去哪儿网机票价格爬取与出行比价分析

本文介绍了一个基于Python的机票价格监控系统,通过爬取去哪儿网数据实现多航线查询与智能比价。系统采用requests+BeautifulSoup+selenium技术栈,具备以下功能: 实时查询指定航线价格 历史价格追踪与分析 最低价推荐与价格预警 数据可视化展示 文章详细解析了去哪儿网的页面结构和反爬机制,提供了Selenium浏览器的完整配置方案,并实现了一个可稳定运行的机票采集爬虫。该系统能帮助用户掌握价格波动规律,选择最优购票时机,每年可节省可观的出行成本。

u014481728的博客 665

Apahce-Shiro反序列化漏洞复现(CVE-2016-4437)

复现环境:vulhub 漏洞原理 Apache Shiro框架提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问。 Shiro对rememberMe的cookie做了加密处理,shiro在CookieRememberMeManaer类中将cookie中rememberMe字段内容分别进行序列化、AES加密、Base64编码操作。 在识别身份的时候,需要对Cookie里的rememberMe字段解密。根据加密的顺序,不难知道解密的顺序为 获取re

Biodog的博客 1809

Modbus协议介绍及解析

Modbus协议介绍及解析 1.Modbus简介 Modbus是一种广泛应用于工业控制领域串行通信协议,以其开放性、高可靠性、高效简单性、免费等优点,成为了工业领域通信协议的业界标准,是工业现场电子设备之间常用的连接方式。Modbus按其格式可分为Modbus-RTU,Modbus-ASCII,Modbus-TCP,其中前两者适用于串行通信控制网络中,例如RS485,RS232等,而Modbus-TCP主要应用于基于以太网TCP/IP通信的控制网络中。通过此协议,控制器相互之间、或控制器和其它设备之间进行通

逍遥子的博客 1万+

【WRF-UCM】BEP+BEM 模拟:README

【WRF-UCM】BEP+BEM 模拟:README

WW、forever的博客 222

对象流涉及的序列化与反序列化

对象流 对象流是一对高级流,可以对java中的任何对象进行读写 将对象读写到文件中 先新建一个Person类 public class Person implements Serializable{ private static final long serialVersionUID = 1L;//这个叫序列化版本号,影响着反序列化是不是能够成功 private String name; p...

qq_37959072的博客 196

微信支付PHP集成指南

完整实现建议参考微信支付官方文档,包含更多支付场景(H5支付、Native支付等)和安全性处理细节。微信支付在PHP中的集成主要涉及服务端接口的调用和支付流程的实现。

bqq506615054的专栏 155

对象的序列化和反序列化

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。 把Java对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为Java对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保...

daixj110的专栏 152

线性代数-第24篇:线性代数在控制系统中的核心应用

线性代数通过状态空间建模、矩阵分解与优化算法,为控制系统提供了从理论分析到工程实现的完整框架。从传统PID控制到现代智能控制,其应用贯穿系统设计、分析与优化的全流程。未来,随着多智能体协同控制、量子控制系统等前沿领域的发展,线性代数将在高维矩阵计算、分布式优化等方向持续创新,为复杂控制系统的突破提供核心支撑。如果对线性代数在控制系统中的应用细节有疑问,欢迎在评论区留言!

无 423

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用自定义ClassLoader解决反序列化serialVesionUID不一致问题

转载于:使用自定义ClassLoader解决反序列化serialVesionUID不一致问题 0x01 背景 serialVesionUid不一致导致反序列化失败也算是Java反序列化漏洞利用比较常见的问题了。查了下资料,发现了各种各样的方法,但没有找到一种适合所有gadget的通用解决方案,为此我花了一些时间,算是找到了自己心中比较完美的解决方案:自定义ClassLoader。目前已经将其集成到ysoserial中,可完美解决各类gadget serialVesionUID不一致问题。 0x02 各方案的

yangyangrenren的专栏 691

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Hessian/Java反序列化采用自定义的Classloader

Hessian/Java反序列化采用自定义的Classloader 对于采用OSGi来做系统的人而言,ClassLoader的问题必然是头号需要解决的问题,如果又是个需要远程通讯的OSGi应用的话,那么反序列化的classloader问题几乎可以肯定是会碰到的,来看看在如今流行的两种序列化、反序列化协议:java/hessian中如何使用自定义的classloader。 java/hessi...

GodIstheBoy 452

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java对象的序列化和反序列化

引言:   序列化是将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其带你过去的状态写入到临时或持储存区,反序列化就是重新创建对象的过程,此对象来自于临时或持久储存区。 序列化的作用:   就好比如存储数据到数据库,将一些数据持久化到数据库中,而有时候需要将对象持久化,虽然说将对象状态持久化的方式有很多,但是java给我们提供了一种很便捷的方式,那就是序列化,序列化可以实现对...

qiyue683209的博客 279

【Java反序列化】URLDNS

序列化代码: import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.lang.reflect.Field; import java.net.URL; import java.util.HashMap; public class UrlDnsClient { public static void main(String[] args)

m0_61572518的博客 2628

ObjectOutputStream序列化和ObjectInputStream反序列化

/* java对象本来是存储在堆中的,若是采取保护措施,则保存到硬盘中,这个过程叫序列化 相应的有反序列化 java也有编译和反编译,不过反编译产生的java源文件和本来的java源文件存在一定区别 java.io.ObjectOutputStream;序列化java对象到硬盘(Serial) java.io.ObjectInputStream;将硬盘中的数据反序列化到jvm内存(DeSeri...

rolic_的博客 509

ClassLoader 反序列化利用链

文章目录ClassLoader类核心方法1、loadClass:加载java类2、findCLass:查找Java类3、defineClass:定义Java类例子????本地栗子远程栗子回显栗子通过loadClass函数通过defineClass函数 ClassLoader类中loadClass()、findClass()、defineClass()等方法都可以成为利用链中的重要一环,特别是在反序列化漏洞中常常被用到。 ClassLoader类核心方法 1、loadClass:加载java类 该方法使用双亲

你和萤火虫有两个共同点,在我的眼里都会发光,同时,都已经很多年没见了 1136

对象的反序列化流_ObjectInputStream

package com.learn.demo04.ObjectStream; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; /* java.io.ObjectInputStream extends InputStream ObjectI...

Leon_Jinhai_Sun的博客 226

网络安全之反序列化漏洞分析

网络安全之反序列化漏洞分析

2201_75735270的博客 904

Java反序列化基础-类的动态加载

类的动态加载、双亲委派的作用,以及字节码文件的利用

每天一小步,进步一大截 1425
上一篇: java序列化的理解
下一篇: Java多线程编程总结
tkxing
博客等级 码龄19年 1粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值