# 聊一聊悟空编辑器 #

Posted 一只傻子墨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# 聊一聊悟空编辑器 #相关的知识,希望对你有一定的参考价值。

php反序列化

--韩子墨

为了有效的存储或传递数据,同时不丢失其类型和结构,经常需要序列化和反序列化的函数对数据进

行处理。

序列化:返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方。(对象变成字节流)

反序列化:对单一的已序列化的变量进行操作,将其转换回原来的值。(字节流变成对象)

这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。

在PHP语言中常见的系列化和反系列化方式主要有:serialize,unserialize;json_encode,

json_decode。

序列化是什么样子的,常见的类型有什么?

例:O:11:"ctfShowUser":3:{s:5:"isVip";b:1;s:8:"username";s:1:"a";s:8:"password";s:1:"a";}

这里就是序列化,里面的O这是object 对象后面的11是这个对象的长度,3是指对象有3个字段,s则为字符串型的数据,5则表示后面字符串长度为5,b则是boolean(布尔)类型,1则是true,这里代表isVip的值为布尔类型的true,以此类推

 

常见的类型有:

a   array (数组类型)

b   boolean(布尔类型)

d   double (双精度)

i integer (整形)

o/C object (对象或者class)

r reference

N NULL (空或0或NULL)

s string(字符串型)

 

反序列化的样子

例:

object(ctfShowUser)#2 (3) { ["isVip"]=> bool(true) ["username"]=> string(1) "a" ["password"]=> string(1) "a" }

表示对象或者类ctfShowUser 中有三个变量,isVip的变量值为bool类型的true,以此类推。

 

知道了序列化和反序列化后还应该知道魔法函数

 

在php的语法中,有一些系统自带的方法名,均以双下划线开头,它会在特定的情况下被调用。即所谓的魔法函数。

 

常见的魔法函数作用:

__construct() 对象初始化时会调用此方法(对于内核而言是指初始化完成后调用此方法).此方法用得比较多。

__destruct() 当对象销毁时会调用此方法.那么什么时候对象会销毁呢?一是用户主动销毁对象,二是当程序结束时由引擎自动销毁。

#主动销毁对象即unset($有对象的变量名)

__sleep() 当对象被序列化之前会调用此方法,sleep与serialize都是s开头所以可以这么记,当一个对象准备序列化的时候,那么对象要先睡着了才能序列化,所以调用sleep。

__wakeup() 当进行反序列化后,会调用此方法,可以这么记,字节流反序列化变回对象了,那么对象就该醒了。

__toString() 当对象或者类被当成字符串调用后会调用此方法,(醒醒该工作了,现在你是字符串了)。

 

例:一个魔术变量有问题的反序列化漏洞

\'#

此为payload生成脚本

 \'#

Payload:

O:1:"a":1:{s:4:"test";s:18:"<?php phpinfo();?>";}

测试:

\'#

 

以上是关于# 聊一聊悟空编辑器 #的主要内容,如果未能解决你的问题,请参考以下文章

# 聊一聊悟空编辑器 #

#聊一聊悟空编辑器# 51CTO博客悟空编辑器体验

# 聊一聊悟空编辑器 #

# 聊一聊悟空编辑器 #

# 聊一聊悟空编辑器 # 51CTO之悟空编辑器初体验(一个有自己名字的编辑器)

#聊一聊悟空编辑器#第一次接触WuKong编辑器