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