PHP&JAVA反序列化

admin 2024年2月9日14:00:59评论10 views字数 1142阅读3分48秒阅读模式
点击蓝字
PHP&JAVA反序列化
关注我们

PHP反序列化

原理:

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

技术:

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

利用点:

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

原理:

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

serialize()//将一个对象转换成一个字符串(序列化)unserialize()//将一个字符串转为对象(反序列化)魔术方法:__construct () / /创建对象时触发__destruct() / /对象被销毁时触发__call() //在对象 上下文中调用不可访问的方法时触发__callstatic() //在静态上下文中调用不可访问的方法时触发__get() //用于从不可访问的属性读取数据__set() //用于将数据写入不可访问的属性__isset() //在不可访问的属性上调用isset ()或empty ()触发__unset() //在不可访问的属性 上使用unset ()时触发__invoke () //当脚本尝试将对象调用为函数时触发

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

==弱类型比较只需对比数值

概念:

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

利用payload生成器--ysoerial

自定义检测工具或脚本

黑盒检测:

数据格式点(HTTP请求中的参数,自定义协议,RMI协议),特定扫描

Java中的API实现

序列化:

objectoutputStream类--> writeobject()注:该方法对参数指定的obj对象进行序列化,把字节序列写到一个目标输出流中

按Java的标准约定是给文件一个. ser扩展名

反序列化:

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

下方的特征可以作为序列化的标志参考:

    一段数据以rO0AB开头, 你基本可以确定这串就是JAVA序列化base64加密的数据。或者如果以aced开头,那么他就是这一段java序列化的16进制。|

PHP&JAVA反序列化
PHP&JAVA反序列化
扫码关注我们
微信号:hanlu_security
QQ交流群:553897268

原文始发于微信公众号(寒鹭网络安全团队):PHP&JAVA反序列化

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月9日14:00:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP&JAVA反序列化http://cn-sec.com/archives/2217704.html

发表评论

匿名网友 填写信息