序列化serialize()
序列化說通俗點就是把乙個物件變成可以傳輸的字串,比如下面是乙個物件:
class s反序列化unserialize()$s=new s(); //建立乙個物件
serialize($s); //把這個物件進行序列化
序列化後得到的結果是這個樣子的:o:1:"s":1:
o:代表object
1:代表物件名字長度為乙個字元
s:物件的名稱
1:代表物件裡面有乙個變數
s:資料型別
4:變數名稱的長度
test:變數名稱
s:資料型別
7:變數值的長度
pikachu:變數值
就是把被序列化的字串還原為物件,然後在接下來的**中繼續使用。
$u=unserialize("o:1:"s":1:");序列化和反序列化本身沒有問題,但是如果反序列化的內容是使用者可以控制的,且後台不正當的使用了php中的魔法函式,就會導致安全問題echo $u->test; //得到的結果為pikachu
常見的幾個魔法函式:__construct()當乙個物件建立時被呼叫
__destruct()當乙個物件銷毀時被呼叫
__tostring()當乙個物件被當作乙個字串使用
__sleep() 在物件在被序列化之前執行
__wakeup將在序列化之後立即被呼叫
漏洞舉例:
class s
}$s = $_get['test'];
@$unser = unserialize($a);
payload:o:1:"s":1:靶場
使用payload:
即可觸發xss
pikachu靶場 十二 PHP反序列化
在理解這個漏洞前,你需要先搞清楚php中serialize unserialize 這兩個函式。序列化serialize 序列化說通俗點就是把乙個物件變成可以傳輸的字串,比如下面是乙個物件 classs s news 建立乙個物件 serialize s 把這個物件進行序列化 序列化後得到的結果是這...
PHP反序列化
php反序列化漏洞 一 序列化定義 序列化 serialization 在電腦科學的資料處理中,是指將資料結構或物件狀態轉換成可取用格式 例如存成檔案,存於緩衝,或經由網路中傳送 以留待後續在相同或另一台計算機環境中,能恢復原先狀態的過程。概念很容易理解,其實就是將資料轉化成一種可逆的資料結構,自然...
php反序列化
php序列化 將物件或變數轉換成字串。php反序列化 是將字串轉換成原來的變數。serialize serialize 函式用於序列化物件或陣列,並返回乙個字串。serialize 函式序列化物件後,可以很方便的將它傳遞給其他需要它的地方,且其型別和結構不會改變。sites array google...