PHP反序列化

2021-10-21 06:20:19 字數 1308 閱讀 9618

**php反序列化漏洞**
一、序列化定義:序列化(serialization)在電腦科學的資料處理中,是指將資料結構或物件狀態轉換成可取用格式(例如存成檔案,存於緩衝,或經由網路中傳送),以留待後續在相同或另一台計算機環境中,能恢復原先狀態的過程。概念很容易理解,其實就是將資料轉化成一種可逆的資料結構,自然,逆向的過程就叫做反序列化。

二、php序列化函式

序列化serialize()

序列化通俗點說就是把乙個物件變成可以傳輸的字串,比如下面是乙個物件:

classs$s

=news(

);//建立乙個物件

serialize($s

);//把這個物件進行序列化

序列化後得到的結果是這個樣子的:o:1:

"s":1:

o:代表object

1:代表物件名字長度為乙個字元

s:物件的名稱

1:代表物件裡面有乙個變數

s:資料型別

4:變數名稱的長度

test:變數名稱

s:資料型別

7:變數值的長度

pikachu:變數值

反序列化unserialize()

就是把被序列化的字串還原為物件,然後在接下來的**中繼續使用。$u=

unserialize

("o:1:"s":1:");

echo$u-

>

test

;//得到的結果為pikachu

序列化和反序列化本身沒有問題,但是如果反序列化的內容是使用者可以控制的,且後

臺不正當的使用了php中的魔法函式,就會導致安全問題

常見的魔法:

__construct

():當乙個物件建立時被呼叫

__destruct

():當乙個物件銷毀時被呼叫

__tostring

():當乙個物件被當作乙個字串使用

__sleep

() :在物件在被序列化之前執行

__wakeup

():將在序列化之後立即被呼叫

漏洞舉例;

classs}

$s=$_get

['test'];

@$unser

=unserialize($a

);payload如下:

o:1:

"s":1:

三、實戰

php反序列化

php序列化 將物件或變數轉換成字串。php反序列化 是將字串轉換成原來的變數。serialize serialize 函式用於序列化物件或陣列,並返回乙個字串。serialize 函式序列化物件後,可以很方便的將它傳遞給其他需要它的地方,且其型別和結構不會改變。sites array google...

PHP反序列化

類定義是以關鍵字class開頭,後跟類的名稱。類的主體是包含在一對花括號中,裡面有類的屬性與方法的定義。類屬性存在於資料段,類方法存在於 段,對於乙個類來說,類的方法不占用類的空間,佔空間的只有類的屬性。要建立乙個類的例項,必須使用new關鍵字。當建立新物件時該物件總是被賦值,除非該物件定義了建構函...

php序列化與反序列化

php的序列化 反序列化對與一些大檔案的壓縮操作,讀寫操作十分有用。乙個簡單的序列化案例 同時用到了序列化與反序列化函式,二者在被呼叫時會分別自己呼叫對應的函式,sleep 以及 wakeup.sleep和 wakeup練習題 故事 乙個果農生產了很多水果種類,於是需要把乙個買家指定的種類寄給他,生...