Jump to content
  • Hello visitors, welcome to the Hacker World Forum!

    Red Team 1949  (formerly CHT Attack and Defense Team) In this rapidly changing Internet era, we maintain our original intention and create the best community to jointly exchange network technologies. You can obtain hacker attack and defense skills and knowledge in the forum, or you can join our Telegram communication group to discuss and communicate in real time. All kinds of advertisements are prohibited in the forum. Please register as a registered user to check our usage and privacy policy. Thank you for your cooperation.

    TheHackerWorld Official

Recommended Posts

0x00 为什么使用php序列化

序列化的原因:为了数据存取方便。

 

0x01 什么是php反序列化

什么是序列化,将值以字符串的形式存储:serialize($tom)

 1674381-20220903210459674-2132082873.png

 

0x02 php反序列化基础语法

1、基础语法

O:6 : 参数类型为对象(object) "Person":2  :  参数名为 Person ,有两个值 s:4:"name" :   s数据类型为字符串,长度为4 ,值为"name" i:18 : i为数据类型为 int 值为18

 

1674381-20220903210559064-1126035726.png

 

2、反序列化:

1674381-20220903210615348-1538530278.png

 

1674381-20220903210632489-1497684000.png

3、注意点:

\x00 + 类名 + \x00 + 变量名 反序列化出来的是private变量 \x00 + * + \x00 + 变量名    反序列化出来的是protected变量

 

4、私有属性的反序列化:

1674381-20220903210707354-1688832808.png

 

1674381-20220903210718789-238533719.png

1674381-20220903210733718-2144526887.png

 

5、魔术方法(写了才会调用,不写不会)

__wakeup() //使用unserialize时触发 
__sleep() //使用serialize时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__toString() //把类当作字符串使用时触发 __invoke() //当脚本尝试将对象调用为函数时触发

 

常用的几个:

__construct:构造函数,PHP5允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。 
__toString: 打印一个对象时,如果定义了__toString()方法,就能在测试时,通过echo打印对象体,对象就会自动调用它所属类定义的toString方法,格式化输出这个对象所包含的数据。
__destruct: 析构函数,PHP5引入了析构函数的概念,这类似于其它面向对象的语言, 如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
__sleep magic方法,在一个对象被序列化的时候调用。
__wakeup magic方法,在一个对象被反序列化的时候调用。

 

存在echo,打印对象时,将调用__toString

 1674381-20220903210935121-568710690.png

 

不存在echo则不会调用类定义的toString方法

 1674381-20220903210953524-739049241.png

 

__wakeup,为magic方法,在一个对象被反序列化的时候调用:

 1674381-20220903211025266-169104454.png

 

绕过wakeup的方法(使该wakeup函数不执行的办法):属性超过原定义属性个数:

 1674381-20220903211047309-1812629965.png

 

0x03 php反序列化例题讲解

php反序列化简单实例讲解:

首先序列化,再进行反序列化:

 1674381-20220903211111088-951123759.png

 

1674381-20220903211159212-1958238763.png

 

 

上面序列化的构造是可以在网上找平台直接传入方法就能构造成功的。

Link to post
Link to comment
Share on other sites

 Share

discussion group

discussion group

    You don't have permission to chat.
    • Recently Browsing   0 members

      • No registered users viewing this page.
    ×
    ×
    • Create New...