本文目錄一覽:
php的魔術方法
PHP的魔術方法:
1、__construct() :實例化對象時自動調用。
2、__destruct() :銷毀對象或腳本執行結束時自動調用。
3、__call($name, $args) :調用對象不存在得方法時執行此函數。
4、__get() :獲取對象不存在的屬性時執行此函數。
5、__set() :設置對象不存在的屬性時執行此函數。
6、__isset() : 檢測對象的某個屬性是否存在時執行此函數。
7、__unset() :銷毀對象的某個屬性時執行此函數。
8、__toString() :將對象當作字符串輸出時執行此函數。
9、__clone() :克隆對象時執行此函數。
10、__autoload() :實例化對象時,當類不存在時,執行此函數自動加載類。
11、__sleep() :serialize之前被調用,可以指定要序列化的對象屬性。
12、__wakeup :unserialize之前被調用,可以執行對象的初始化工作。
13、__set_state() :調用var_export時,被調用。用__set_state的返回值做為var_export的返回值。
php如何循環反序列化?
1.構造HITCON類反序列化字符串,其中$method=’login’,$args數組’username’部分可用於構造SQL語句,進行SQL注入,’password’部分任意設置。
2.調用login()函數後,利用username構造聯合查詢,使查詢結果為SoFun類反序列化字符串,設置username構造聯合查詢,使查詢結果為SoFun類反序列化字符串,設置username構造聯合查詢,使查詢結果為SoFun類反序列化字符串,設置file=‘flag.php’,需繞過__wakeup()函數。
3.繞過oadData()函數對反序列化字符串的驗證。
4.SoFun類 __destruct()函數調用後,包含flag.php文件,獲取flag,需繞過__wakeup()函數。
php中常用的魔術方法有哪些?
php規定以兩個下劃線__開頭的方法都保留為魔術方法,建議自定義函數的函數名最好避開。
__construct() 實例化類時自動調用。
__destruct() 類對象使用結束時自動調用。
__set() 在給未定義的屬性賦值的時候調用。
__get() 調用未定義的屬性時候調用。
__isset() 使用isset()或empty()函數時候會調用。
__unset() 使用unset()時候會調用。
__sleep() 使用serialize序列化時候調用。
__wakeup() 使用unserialize反序列化的時候調用。
__call() 調用一個不存在的方法的時候調用。
__callStatic()調用一個不存在的靜態方法是調用。
__toString() 把對象轉換成字符串的時候會調用。比如 echo。
__invoke() 當嘗試把對象當方法調用時調用。
__set_state() 當使用var_export()函數時候調用。接受一個數組參數。
__clone() 當使用clone複製一個對象時候調用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/152052.html