您好,登錄后才能下訂單哦!
unserialize()函數概念
unserialize() 對單一的已序列化的變量進行操作,將其轉換回 PHP 的值。返回的是轉換之后的值,可為 integer、float、string、array 或 object。如果傳遞的字符串不可解序列化,則返回 FALSE。與之相對的函數serialize()序列化函數。
我們看一個題目
題目:天網管理系統,鏈接: http://ctf5.shiyanbar.com/10/web1/
1、進入題目查看網頁源碼
這行提示比較霸氣,直接讓你判斷你的用戶名的md5值是不是等于0,這里利用php處理MD5哈希缺陷,遇到哈希值是0e開頭的字符串被當做0,QNKCDZO就是這樣的字符串。推薦網站;https://www.cnblogs.com/Primzahl/p/6018158.html.
2、輸入這個特殊字符串,查看一下
3、給了一個路徑,查看一下子
這里又得到一個源碼,里面關鍵的部分說的就是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/8664026
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。