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

PHP&JAVA反序列化

时间:2023-03-18 13:57:02浏览次数:36  
标签:触发 PHP JAVA 魔术 对象 访问 序列化 方法

PHP反序列化:

原理:序列化就是将对象转为字符串。反序列化与之相反,数据的格式的转换对象的序列化利于对象的保存和传输,也可以让多个文件共享对象

技术:有类(触发魔术方法);无类

利用点:真实应用下;各种ctf比赛中

原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQI注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一-些魔术方法。

serialize()//将一个对象转换成一个字符串(序列化)
unserialize()//将一个字符串转为对象(反序列化)

魔术方法:
__construct () / /创建对象时触发
_destruct() / /对象被销毁时触发
_call() //在对象 上下文中调用不可访问的方法时触发
_callstatic() //在静态上下文中调用不可访问的方法时触发
_get() //用于从不可访问的属性读取数据
_set() //用于将数据写入不可访问的属性
_isset() //在不可访问的属性上调用isset ()或empty ()触发
_unset() //在不可访问的属性 上使用unset ()时触发
_invoke () //当脚本尝试将对象调用为函数时触发


===强类型比较需要对比类型和数值
==弱类型比较只需对比数值

Java反序列化:

概念:我们需要保存某一刻某个对象的信息,来进行一些操作。比如利用反序列化将程序运行的对象状态以二进制形式储存与文件系统中,然后可以在另一个程序中对序列化后的对象状态数据进行反序列化恢复对象。可以有效地实现多平台之间的通信、对象持久化存储。

利用payload生成器--ysoerial
自定义检测工具或脚本

黑盒检测:数据格式点(HTTP请求中的参数,自定义协议,RMI协议),特定扫描
Java中的API实现
序列化:
objectoutputStream类--> writeobjec()
注:该方法对参数指定的obj对象进行序列化,把字节序列写到一个目标输出流中
按Java的标准约定是给文件一个. ser扩展名
反序列化: objectInputStream类 --> readobject()
注:该方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。


下方的特征可以作为序列化的标志参考:
一段数据以rO0AB开头, 你基本可以确定这串就是JAVA序列化base64加密的数据。
或者如果以aced开头,那么他就是这一段java序列化的16进制。|

 

标签:触发,PHP,JAVA,魔术,对象,访问,序列化,方法
From: https://www.cnblogs.com/juejuezi/p/17230253.html

相关文章

  • JAVA-反射机制-2023-03-18
    反射机制,反过来,通过修改配置文件达到更新,拓展程序的目的,而不需要修改代码传统方法:对象.方法()反射机制:方法.invoke(对象)实体类及方法packagecom.feijian;publicc......
  • 随机抽取四张牌,并打印出来---Java
    packagepractice.people.apple;importjava.util.Random;publicclassDeckOfCards{publicstaticvoidmain(String[]args){intdeck[]=newint[52];Strin......
  • 记一个技术博客网站,前端后端服务器,机器学习大数据,java python php,angular vue
    ToForU为你|博客文章前端后端服务器机器学习大数据chatgpt程序开发技术资料TOFORU为你......
  • 关于java stream流中的peek方法和foreach的自我理解:
    场景:我需要在数据库中将信息查出,在将其转化为某一个对象,再将该对象进行添加进入list集合 我首先想到的是stream().peek()方法,编写的代码如下:productAtt......
  • java中判断字符串是否为数字的三种方法
    1用JAVA自带的函数publicstaticbooleanisNumeric(Stringstr){for(inti=str.length();--i>=0;){if(!Character.isDigit(str.charAt(i))){returnfalse;......
  • 【JAVA基础】正则表达式
    正则表达式就是我们程序员为了在海量数据中搜索到符合我们规定的格式的数据所采用的一种规范,官方一点就是说正则表达式是一种文本模式,包括普通字符(例如,a到z之间的字母)和......
  • 第十三届蓝桥杯省赛 Java B 组 C题——字符统计(AC)
    目录​​1.字符统计​​​​1.题目描述​​​​2.输入格式​​​​3.输出格式​​​​4.数据范围​​​​5.原题链接​​​​2.解题思路​​​​3.Ac_code​​1.字符统计1.......
  • 读Java性能权威指南(第2版)笔记20_垃圾回收G
    1. Survivor空间1.1. 新生代被划分为两个Survivor空间和一个Eden空间的原因1.1.1. 刚刚被创建并且还在使用中,所以不能被回收,但它们的寿命并没有长到足以进入老年代......
  • java基础_基本数据类型
    介绍鄙人才疏学浅,如有谬论,敬请指教。计算机储存容量单位讲解计算机储存容量基本单位就是字节(Byte),而字节下面还有一个比特>(bit),对应关系是一个字节=八个比特,比特(bit......
  • java类加载器有哪些
    java类加载器有:1、引导类加载器;2、拓展类加载器;3、系统类加载器;4、用户自定义类加载器。其中,引导类加载器(BoostrapClassLoader),又叫启动类加载器,由原生代码(如C语言)编写,不......