unserialize()函數概念php
unserialize() 對單一的已序列化的變量進行操做,將其轉換回 PHP 的值。返回的是轉換以後的值,可爲 integer、float、string、array 或 object。若是傳遞的字符串不可解序列化,則返回 FALSE。與之相對的函數serialize()序列化函數。
咱們看一個題目
題目:天網管理系統,連接: http://ctf5.shiyanbar.com/10/web1/ html
一、進入題目查看網頁源碼web
這行提示比較霸氣,直接讓你判斷你的用戶名的md5值是否是等於0,這裏利用php處理MD5哈希缺陷,遇到哈希值是0e開頭的字符串被當作0,QNKCDZO就是這樣的字符串。推薦網站;http://www.javashuo.com/article/p-kdsdvvqj-ca.html.
二、輸入這個特殊字符串,查看一下
三、給了一個路徑,查看一會兒
這裏又獲得一個源碼,裏面關鍵的部分說的就是unserialize()函數。從源碼中很明顯能夠看出,post傳輸的username值應該是一個數組。這樣才能分別得出user,pass的值。
咱們直接給出數組是不行的,由於unserialize()函數須要處理序列化以後的字符串,而後將其反序列化爲php的值。因此咱們輸入的值應該是通過序列化函數serialize()處理後的數組,而後交由unserialize()函數去處理。
編寫序列化字符串腳本:
<?php
$a=array(「user」 => true,」pass」 => true) //或false
$b=serialize($a)
echo $b
?>
這裏要記着數組的值要根據提示用布爾值,否則不會獲得flag
最後將獲得的結果填入文本框即可以拿到flag。數組
推薦一篇文章:https://blog.csdn.net/cnbird2008/article/details/8664026ide