Java序列化与反序列化

文章目录

  • 一、Java序列化和反序列化
      • 1、序列化和反序列化的含义和用途
          • 序列化主要使用场景
          • 反序列化漏洞出现的原因
  • 下一期


一、Java序列化和反序列化

1、序列化和反序列化的含义和用途

Java对象(存在于内存)———序列化——>>字符串/二进制流(存在于磁盘、网络)
Java对象(存在于内存)<<———反序列化——字符串/二进制流(存在于磁盘、网络)
这样做就是为了方便存储和传输,实现对象的持久化,方便协议解释

序列化主要使用场景

1、持久化内存数据
2、网络传输对象
3、远程方法调用(RMI)

序列化
java.io.ObjectOutputStream.writeObject()
反序列化
java.io.ObjectInputStream.readObject()
反序列化漏洞出现的原因

readObject()是可以进行重写的,如果我们重写了这个类,那么在代码中就不会去调用原始的readObject(),而是调用我们重写的readObject(),如果重写的readObject()中执行了一些敏感的方法,再加上一些参数可被控制就会造成漏洞
在这里插入图片描述
验证POC,确定一个程序是否有漏洞的操作,会打开一个计算器

public class UnsafeTest{}public static void main(String args[]) throws Exception{UnsafeClass Unsafe = new UnsafeClass();Unsafe.name = "hacked by yy";//序列化FileOutputStream fos = new FileOutputStream("D: /yy.java");ObjectOutputStream os = new ObjectOutputStream(fos);os.writeObject(Unsafe);os.close();/从反序列化FileInputStream fis = new FileInputStream("D: /yy.class");ObjectInputStream ois = new ObjectInputStream(fis);UnsafeClass objectFromDisk = (UnsafeClass)ois.readObject();System.out. println(objectFromDisk.name);ois.close();}}

如果我们运行上面的代码,进行序列化和反序列化时,计算器被打开,则证明漏洞存在(用来序列化的类是重写后的,加了Runtime)
如果有一个接口或程序,允许接受一个序列化字符串,然后去将其反序列化,那么我们可以自己构建一个恶意类,里面包含重写的readObject()方法,进行序列化,交给接口或程序去反序列化,就会因为传输来的类中有重写的readObject()方法,在反序列化时,会使用重写的方法,从而执行我们包含在其中的命令

实际上并没有这么简单,因为要知道服务器上有没有这个类(自己写的类不一定在别人的项目中存在),所以,我们需要去寻找在java中有没有一个现存的类,要求 重写了readObject()方法,然后还要有 存在参数能够控制,让我们的恶意代码让他去帮我执行的这样的类

1、重写类的readObject()方法
2、反序列过程中会执行自定义的readObject()


下一期

Apache Commons Collections 反序列化漏洞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/139.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Vue computed watch

computed watch watch current prev

基于Spring Boot+Vue的助农销售平台(协同过滤算法、限流算法、支付宝沙盒支付、实时聊天、图形化分析)

&#x1f388;系统亮点&#xff1a;协同过滤算法、节流算法、支付宝沙盒支付、图形化分析、实时聊天&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk1…

GetX的一些高级API

目录 前言 一、一些常用的API 二、局部状态组件 1.可选的全局设置和手动配置 2.局部状态组件 1.ValueBuilder 1.特点 2.基本用法 2.ObxValue 1.特点 2.基本用法 前言 这篇文章主要讲解GetX的一些高级API和一些有用的小组件。 一、一些常用的API GetX提供了一些高级…

第三届北京国际水利科技博览会将于25年3月在国家会议中心召开

由中国农业节水和农村供水技术协会、北京水利学会、振威国际会展集团等单位联合主办的第三届北京国际水利科技博览会暨供水技术与设备展&#xff08;北京水利展&#xff09;将于2025年3月31日至4月2日在北京•国家会议中心举办&#xff01; 博览会以“新制造、新服务、新业态”…

基于SpringBoot的学生读书笔记共享的设计与实现

一、项目背景 计算机的普及和互联网时代的到来使信息的发布和传播更加方便快捷。用户可以通过计算机上的浏览器访问多个应用系统&#xff0c;从中获取一些可以满足用户需求的管理系统。网站系统有时更像是一个大型“展示平台”&#xff0c;用户可以选择所需的信息进入系统查看…

org.springframework.boot:type=Admin,name=SpringApplication异常

org.springframework.boot:typeAdmin,nameSpringApplication异常 问题&#xff1a;更换最新版本idea之后&#xff0c;启动springboot项目报错 javax.management.InstanceNotFoundException: org.springframework.boot:typeAdmin,nameSpringApplication idea自动默认的启动设…

Netty核心源码与优化

1.Netty的优化 1.1 使用EventLoop的任务调度 直接使用 channel.writeAndFlush(data) 可能会导致线程切换&#xff0c;这是因为如果当前线程并不是该 Channel 所绑定的 EventLoop 线程&#xff0c;那么 writeAndFlush() 操作会将任务重新提交给关联的 EventLoop 线程执行&#…

CTF之web题集详情随手笔记

《Web安全》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484238&idx1&snca66551c31e37b8d726f151265fc9211&chksmc0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene21#wechat_redirect 1 WEB 1 靶场目…

使用Nginx作为反向代理和负载均衡器

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Nginx作为反向代理和负载均衡器 引言 Nginx 简介 安装 Nginx Ubuntu CentOS 配置 Nginx 作为反向代理 配置 Nginx 作为负载…

【PTA】图的邻接矩阵存储和遍历

图的邻接矩阵存储用一个一维数组存储各顶点数据元素&#xff0c;一个二维数组存储顶点之间的邻接关系。 如上面的无向加权图&#xff0c;顶点数据元素为“A-Z”之间的单个字符&#xff0c;为了使遍历输出结果唯一&#xff0c;要求顶点数据元素按由小到大(ASCII码)的顺序存储。…

数据结构之树

1.树的基本概念 1.树的定义 树是由n(n>0)个结点&#xff08;或元素&#xff09;组成的有限集合&#xff08;记为T&#xff09;。 如果n0,它是一棵空树&#xff0c;这是树的特例。 如果n>0&#xff0c;这个结点中有且仅有一个结点作为树的根结点&#xff0c;简称为根。…

国内PLC市场份额报告,西门子老大的地位从未动摇

【导读】国内PLC市场占有率&#xff0c;西门子依然是老大。 PLC市场集中度很高&#xff0c;从销售额来看&#xff0c;TOP3厂家占据一半以上的市场份额&#xff0c;以外资品牌为主&#xff0c;其中西门子排名第一&#xff0c;2022年市场份额约47.1%&#xff1b;三菱排名第二&…

计算机毕业设计 | 基于SpringBoot的健身房管理系统(附源码)

1&#xff0c;项目背景 随着人们生活水平的提高和健康意识的增强&#xff0c;健身行业逐渐兴起并迅速发展。而现代化的健身房管理系统已经成为健身房发展的必备工具之一。传统的健身房管理方式已经无法满足现代化健身房的需求&#xff0c;需要一种更加高效、智能、安全的管理系…

ADI常规SHARC音频处理器性能对比

1、 ADSP-2156x:是基于SHARC+ DSP架构的单核32位/40位/64位浮点处理器,不仅具有灵活的音频连接性和性能可扩展性,还提供多个引脚兼容版本(400MHz至1GHz)和多种片内存储器选项,数据手册链接:https://www.analog.com/media/en/technical-documentation/data-sheets/adsp-2…

PG实践|条件处理表达式函数及其操作

文章目录 引言条件处理表达式1.1 GREATEST() 和 LEAST() - 最大值和最小值1.2 CASE() - 万一/具体情况为1.3 COALESCE - 处理NULL1.4 NULLIF - 处理NULL 总结 &#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端…

跨境行业的客户运营利器:构建在线培训知识库

在跨境行业中&#xff0c;客户运营是企业成功的关键。随着全球市场的不断扩大和数字化转型的深入&#xff0c;构建一个有效的在线培训知识库对于提升客户服务质量、优化客户体验至关重要。本文将探讨在线培训知识库的构建策略、应用价值&#xff0c;并分析其在跨境行业的实际应…

C语言另一种编码方式开发状态机(无switch)

目录 概述 一、开发环境 二、coding 三、运行结果 四、总结 概述 状态机编码思想&#xff0c;在很多领域都随处可见&#xff0c;传统的coding方式使用switch case来实现&#xff0c;状态跳转可读性差&#xff0c;咋们换一种思路来实现状态机开发&#xff0c;该方式 拓展好…

Android 面试Socket与WebSocket

Android 面试Socket与WebSocket 文章目录 Android 面试Socket与WebSocketSocket什么是SocketSocket通讯的过程TCP协议Socket代码示例UDP协议Socket代码示例Socket实现Android跨进程通信 WebSocket什么是websocket Socket 什么是Socket 网络上的两个程序通过以一个双向通讯的链…

python通过pyarmor库保护源代码

pyarmor 介绍 python是解释型语言&#xff0c;因此&#xff0c;代码不需要编译&#xff0c;而是通过明文提供的。在这种情况下&#xff0c;假如你发布了一个软件&#xff0c;那么&#xff0c;只能将源代码提供给使用者&#xff0c;这样就造成了源代码泄露。 使用pyinstaller…

使用传感器融合进行3D激光雷达点云运动补偿

此示例展示了如何通过融合来自全球定位系统 (GPS) 和惯性测量单元 (IMU) 传感器的数据来补偿由于自我车辆运动而导致的点云失真。此示例的目标是补偿点云数据中的失真并准确地重新创建周围环境。 文章目录 概述坐标系预处理激光雷达数据预处理 GPS 数据结合 GPS、IMU 和激光雷达…