1. 程式人生 > >php序列化函數漏洞----unserialize()函數

php序列化函數漏洞----unserialize()函數

PHP反序列化 unserialize() 實驗吧

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

php序列化函數漏洞----unserialize()函數