php序列化與非序列化

0x00 基礎知識

講的超詳細:http://www.javashuo.com/article/p-sdrgfdcm-mx.htmlphp

重點摘抄:html

一、序列化對象時,不會保存常量的值。對於父類中的變量,則會保留。函數

二、當調用serialize()函數序列化對象時,該函數會檢查類中是否存在一個魔術方法__sleep()。若是存在,該方法會先被調用,而後才執行序列化操做。能夠經過重載這個方法,從而自定義序列化行爲。ui

三、若被反序列化的變量是一個對象,在成功從新構造對象以後,PHP會自動地試圖去調用__wakeup()成員函數(若是存在的話)spa

0x01實踐

xctf_unsealize3code

打開網址能夠看到htm

 

關於非序列化字符串的構造可直接寫代碼執行一下它的序列化,也可手動構造,我是手動構造的:O:4:"xctf":1:{s:4:"flag";s:6:"111";},O表示對象,s表示字符串對象

由上可知,反序列化的若爲對象,且存在_wakeup()成員函數,會自動調用,想辦法繞過,百度可知當序列化字符串表示對象屬性個數的值大於真實個數的屬性時就會跳過__wakeup的執行blog

因此可構造:O:4:"xctf":2:{s:4:"flag";s:6:"111";}:字符串

0x03 總結

php語言果真是一門神奇的語言

相關文章
相關標籤/搜索