zoukankan      html  css  js  c++  java
  • php序列化与非序列化

    0x00 基础知识

    讲的超详细:https://www.cnblogs.com/youyoui/p/8610068.html

    重点摘抄:

    1、序列化对象时,不会保存常量的值。对于父类中的变量,则会保留。

    2、当调用serialize()函数序列化对象时,该函数会检查类中是否存在一个魔术方法__sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。可以通过重载这个方法,从而自定义序列化行为。

    3、若被反序列化的变量是一个对象,在成功重新构造对象之后,PHP会自动地试图去调用__wakeup()成员函数(如果存在的话)

    0x01实践

    xctf_unsealize3

    打开网址可以看到

     

    关于非序列化字符串的构造可直接写代码执行一下它的序列化,也可手动构造,我是手动构造的:O:4:"xctf":1:{s:4:"flag";s:6:"111";},O表示对象,s表示字符串

    由上可知,反序列化的若为对象,且存在_wakeup()成员函数,会自动调用,想办法绕过,百度可知当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行

    所以可构造:O:4:"xctf":2:{s:4:"flag";s:6:"111";}:

    0x03 总结

    php语言果然是一门神奇的语言

  • 相关阅读:
    GitLab-添加SSH Key亲历教程
    java-数组Array的应用总结
    Java-方法的重载和重写
    JSON-相关的工具收藏分享
    java-无重复的排列组合小技能
    Charles安装与使用
    深拷贝浅拷贝
    文件操作
    列表生成式
    非空即真,非零即真
  • 原文地址:https://www.cnblogs.com/dx-yll/p/12028346.html
Copyright © 2011-2022 走看看