简单的反序列化—第一弹
反序列化标准形态
看一下这道题的代码
<?php include "flag.php"; $unserialize_str = $_POST['data']; $data_unserialize = unserialize($unserialize_str); if($data_unserialize['user'] == 'admin' && $data_unserialize['pass']=='nicaicaikan') { print_r($flag); } else{ highlight_file(__FILE__); }
首先我们要了解unserialize() 函数的作用
unserialize() 函数用于将通过serialize()函数序列化后的对象或数组进行反序列化,并返回原始的对象结构。
这样理解:serialize()函数是将序列化后的对象或数组进行反序列化,unserialize() 函数是将反序列化返回其序列化。
这就说明post获取的data要是反序列化之后的数据,通过unserialize()进行返回原始的对象结构,再进行对比,如果满足条件的话就可以得到flag。
//条件 data=array("user"=>"admin","pass"=>"nicaicaikan") <?php $arr=array("user"=>"admin","pass"=>"nicaicaikan"); echo serialize($arr); ?> //得到 a:2:{s:4:"user";s:5:"admin";s:4:"pass";s:11:"nicaicaikan";}
得到flag