1. 程式人生 > 其它 >簡單的反序列化—第一彈

簡單的反序列化—第一彈

serialize()函式是將序列化後的物件或陣列進行反序列化,unserialize() 函式是將反序列化返回其序列化。

反序列化標準形態

看一下這道題的程式碼

<?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