首页 > 编程语言 >反序列化之JAVA

反序列化之JAVA

时间:2023-09-19 13:12:51浏览次数:36  
标签:字符 Java ASCII base64 JAVA 序列化 数据

Java中的API实现: 

位置:Java.io.ObjectOutputStream java.io.ObjectInputStream

序列化:ObjectOutputStream类-->writeObject() 

注:该方法对参数指定的obj对象进行序列化,把字节序列写到哟个目标输出流中,按Java 的标准约定是给文件一个.ser扩展名 反序列化:ObjectInputStream类-->readIObject() 

注:该方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。

序列化和反序列化 

序列化(Serialization):将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。 

反序列化:从存储区中读取该数据,并将其还原为对象的过程,称为反序列化。

webgoat靶场-有java反序列化的训练环境 

下方特征可以作为序列化的标志参考 一段数据以rO0AB开头,可以基本确定这就是JAVA序列化base64加密的数据,payload制 造就需要先序列化再base64加密。或者如果以aced开头,那么他就是这一段java序列化的16进制 序列化内容进行base64编码的作用:由于某些系统中只能使用ASCII字符。Base64就是用 来将非ASCII字符的数据转换成ASCII字符的一种方法。

使用Base64编码原因

    1.base64是网络上最常见的用于传输8bit字节代码的编码方式之一。我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可 见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备, 由于 不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是 不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可 能性就大降低了 

    2.用于在http环境下传递较长的标识信息。对于反序列化的工具需要书写payload,有一款ysoserial工具可以使用,可以选择指定的选 项,利用时也要注意执行命令的payload是无法回显的,所以一般情况下需要反弹shell Java序列化后并转换格式的内容, 可以先根据格式(base64、16进制)解码得到序列化内 容,再通过serializationDumper解析数据,与ysoserial反向操作。

黑盒测试可以通过http头发现反序列化利用处。 

 

翻译

搜索

复制

<iframe></iframe>

标签:字符,Java,ASCII,base64,JAVA,序列化,数据
From: https://www.cnblogs.com/TinKode123/p/17714352.html

相关文章

  • tus java client 使用以及问题说明
    代码来自官方参考,支持在使用的时候发现了一些问题记录下参考代码App.javapackageorg.example; importio.tus.java.client.*; importjava.io.File;importjava.io.IOException;importjava.net.URL;importjava.util.HashMap;importjava.u......
  • 如何在JavaScript中实现链表
      转载来自:https://www.freecodecamp.org/news/implementing-a-linked-list-in-javascript/  Ifyouarelearningdatastructures,alinkedlistisonedatastructureyoushouldknow.IfyoudonotreallyunderstanditorhowitisimplementedinJavaScript......
  • 无涯教程-JavaScript - ROUND函数
    描述ROUND函数将数字四舍五入为指定的位数。ROUND是Excel舍入函数之一。语法ROUND(number,num_digits)争论Argument描述Required/OptionalnumberThenumberthatyouwanttoround.Requirednum_digitsThenumberofdigitstowhichyouwanttoroundthenum......
  • Java8(jdk1.8u321)下载、安装及配置
    jdk1.8的下载、jdk1.8的安装、配置环境变量。一、jdk1.8下载下载官网地址:https://www.oracle.com/java/technologies/downloads/#java8-windows下载版本:jdk-8u381-windows-x64.exe二、jdk1.8的安装双击jdk1.8安装包进行安装:按照安装步骤,直至完成安装。确认是否完成安装:打......
  • JAVA17/JAVA21继承和抽象类
    day07-JAVAOOP课程目标1.【理解】什么是继承2.【掌握】继承的使用3.【理解】继承中的成员的特点4.【理解】super和this的作用5.【理解】什么是抽象类6.【掌握】抽象的使用继承继承概述​ 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,这个类就是......
  • Java stream 中 peek() 的合理用法
    目录背景最终操作(terminaloperation)peek()vsforEach()peek()的典型用法:协助调试小结参考链接背景这周遇到了一件很有意思的事情。在看项目代码时,发现了这么一段:returnobjects.stream() .peek(object->addInfo(object,someParams)) .collect(Collectors.toL......
  • 62基于java的高校奖学金管理系统设计与实现(可参考做毕业设计)
    本章节给大家带来一个基于java高校奖学金管理系统设计与实现,可适用于大学奖学金管理系统,学生奖学金管理系统,学校奖学金,校园奖学金申请管理系统;引言以往的高校奖学金管理系统相关信息管理,都是工作人员手工统计。这种方式不但时效性低,而且需要查找和变更的时候很不方便。随着科学......
  • 自定义全局反序列化器
    以处理LocalDateTime格式的全局反序列化器为例,全局序列化器类似1、全局反序列化器代码importcom.fasterxml.jackson.annotation.JsonFormat;importcom.fasterxml.jackson.core.JsonParser;importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml......
  • 序列化器
    序列化器作用1、序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串,即把数据库的表数据转换成客户端的json格式并返回2、反序列化,反序列化器会把客户端发送过来的数据。经过request以后变成字典,序列化器可以把字典转成模型3、反序列化,完......
  • 万字长文深度解读Java线程池,硬核源码分析
    前言本文将深入分析Java线程池的源码,包括线程池的创建、任务提交、工作线程的执行和线程池的关闭等过程。通过对线程池源码的解析,我们能够更好地理解线程池的原理和机制,为我们在实际开发中合理使用线程池提供指导。文章内容较长,建议找个安静的环境慢慢细读,由于线程池涉及的内容......