PHP反序列化學習筆記

2021-10-10 12:48:20 字數 2068 閱讀 5025

方法名

作用__construct

建構函式,在建立物件時候初始化物件,一般用於對變數賦初值

__destruct

析構函式,和建構函式相反,在物件不再被使用時(將所有該物件的引用設為null)或者程式退出時自動呼叫

__tostring

當乙個物件被當作乙個字串被呼叫,把類當作字串使用時觸發,返回值需要為字串,例如echo列印出物件就會呼叫此方法

__wakeup()

使用unserialize時觸發,反序列化恢復物件之前呼叫該方法

__sleep()

使用serialize時觸發 ,在物件被序列化前自動呼叫,該函式需要返回以類成員變數名作為元素的陣列(該陣列裡的元素會影響類成員變數是否被序列化。只有出現在該陣列元素裡的類成員變數才會被序列化)

__destruct()

物件被銷毀時觸發

__call()

在物件中呼叫不可訪問的方法時觸發,即當呼叫物件中不存在的方法會自動呼叫該方法

__callstatic()

在靜態上下文中呼叫不可訪問的方法時觸發

__get()

讀取不可訪問的屬性的值時會被呼叫(不可訪問包括私有屬性,或者沒有初始化的屬性)

__set()

在給不可訪問屬性賦值時,即在呼叫私有屬性的時候會自動執行

__isset()

當對不可訪問屬性呼叫isset()或empty()時觸發

__unset()

當對不可訪問屬性呼叫unset()時觸發

__invoke()

當指令碼嘗試將物件呼叫為函式時觸發

__tostring的具體觸發場景:

(1)  echo($obj) / print($obj) 列印時會觸發

(2) 反序列化物件與字串連線時

(3) 反序列化物件參與格式化字串時

(4) 反序列化物件與字串進行==比較時(php進行==比較的時候會轉換引數型別)

(5) 反序列化物件參與格式化sql語句,繫結引數時

(6) 反序列化物件在經過php字串函式,如 strlen()、addslashes()時

(7) 在in_array()方法中,第乙個引數是反序列化物件,第二個引數的陣列中有tostring返回的字串的時候tostring會被呼叫

(8) 反序列化的物件作為 class_exists() 的引數的時候

通過對比發現,在受保護的成員前都多了兩個位元組,受保護的成員在序列化時規則:

1. 受private修飾的私有成員,序列化時: \x00 +  [私有成員所在類名]  + \x00 [變數名]

2. 受protected修飾的成員,序列化時:\x00 + * + \x00 + [變數名]

其中,"\x00"代表ascii為0的值,即空位元組," * " 必不可少。

序列化格式中的字母含義:

a - array                    b - boolean  

d - double i - integer

o - common object r - reference

s - string c - custom object

o - class n - null

r - pointer reference u - unicode string

pop鏈構造常用方法

- 命令執行:exec()、passthru()、popen()、system()

- 檔案操作:file_put_contents()、file_get_contents()、unlink()

- **執行:eval()、assert()、call_user_func()

PHP反序列化學習

利用反序列化漏洞的有兩個條件 1.unserialize 函式的引數可控 2.php中有可以利用的類並且類中有魔術函式 魔術方法就是在某些條件下自動執行的函式 序列化 sites array google runoob facebook serialized data serialize sites...

PHP反序列化學習

在理解這個漏洞前,你需要先搞清楚php中serialize unserialize 這兩個函式。序列化serialize 序列化說通俗點就是把乙個物件變成可以傳輸的字串,比如下面是乙個物件 class s s new s 建立乙個物件 serialize s 把這個物件進行序列化 序列化後得到的結果...

反序列化學習筆記

什麼是序列化,就是將物件轉換為字串。什麼是反序列化,就是將字串轉化為物件。為什麼會有序列化機制?在傳遞變數的過程中,有可能遇到變數值要跨指令碼檔案傳遞的過程。如果乙個指令碼中想要呼叫之前乙個指令碼的變數,但是之前的指令碼已經執行完畢,所有變數和內容被釋放掉了序列化與反序列化一些簡單例子 demo n...