php序列化与反序列化范例

之前做CTF题的时候遇到了php反序列化的题,由于本人不太会php反序列化,所以稍微学习了一下,这里做出一个范例

php反序列化范例

格式

个人认为php序列化后的格式应该是这样的:

类型:长度:{类型1:长度1:值1;类型2:长度2:值2;……}

类型一般有:

  • array->a
  • common object->o
  • string->s
  • integer->i
  • boolean->b
  • double->d
  • reference->r
  • custom object->C
  • null->N
  • pointer reference->R
  • unicode string->U
  • class->O

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
class just4fun{
var $secret;
var $enter;
}
# 序列化与反序列化范例
$o1=new just4fun(); # 实例化该类
$o1->secret='aaa'; # 给实例中的一些变量赋值
$o1_ser=serialize($o1); # 序列化该实例
print_r($o1_ser); # 输出序列化后的内容
echo("\n"); # 输出换行,必须用双引号
print_r(unserialize($o1_ser)); # 输出反序列化后的内容
echo("\n");
echo("\n");
# 序列化与指向引用的结合使用
$o2=new just4fun();
$o2->enter=&$o2->secret; # 此处的enter的值是引用的secret的值,使用符号:&
$o2_ser=serialize($o2);
print_r($o2_ser);
echo("\n");
print_r(unserialize($o2_ser));
echo("\n");
?>

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
O:8:"just4fun":2:{s:6:"secret";s:3:"aaa";s:5:"enter";N;}
just4fun Object
(
[secret] => aaa
[enter] =>
)
O:8:"just4fun":2:{s:6:"secret";N;s:5:"enter";R:2;}
just4fun Object
(
[secret] =>
[enter] =>
)
[Finished in 0.2s]

本文标题:php序列化与反序列化范例

文章作者:暮沉沉

发布时间:2017年11月10日 - 22:11

最后更新:2017年11月10日 - 22:11

原始链接:http://maplege.github.io/2017/11/10/php-serialize/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------