站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        php淺析反序列化結(jié)構(gòu)知識(shí)點(diǎn)

        本篇文章主要給大家介紹了關(guān)于PHP的相關(guān)知識(shí),序列化其實(shí)就是將數(shù)據(jù)轉(zhuǎn)化成一種可逆的數(shù)據(jù)結(jié)構(gòu),自然,逆向的過程就叫做反序列化。php將數(shù)據(jù)序列化和反序列化會(huì)用到兩個(gè)函數(shù):serialize 將對(duì)象格式化成有序的字符串、unserialize 將字符串還原成原來的對(duì)象,希望對(duì)大家有幫助。

        php淺析反序列化結(jié)構(gòu)知識(shí)點(diǎn)

        (推薦教程:PHP視頻教程)

        簡(jiǎn)介

        序列化的目的是方便數(shù)據(jù)的傳輸和存儲(chǔ),在PHP中,序列化和反序列化一般用做緩存,比如session緩存,cookie等。

        反序列化中常見的魔術(shù)方法

        • __wakeup() //執(zhí)行unserialize()時(shí),先會(huì)調(diào)用這個(gè)函數(shù)

        • __sleep() //執(zhí)行serialize()時(shí),先會(huì)調(diào)用這個(gè)函數(shù)

        • __destruct() //對(duì)象被銷毀時(shí)觸發(fā)

        • __call() //在對(duì)象上下文中調(diào)用不可訪問的方法時(shí)觸發(fā)

        • __callStatic() //在靜態(tài)上下文中調(diào)用不可訪問的方法時(shí)觸發(fā)

        • __get() //用于從不可訪問的屬性讀取數(shù)據(jù)或者不存在這個(gè)鍵都會(huì)調(diào)用此方法

        • __set() //用于將數(shù)據(jù)寫入不可訪問的屬性

        • __isset() //在不可訪問的屬性上調(diào)用isset()或empty()觸發(fā)

        • __unset() //在不可訪問的屬性上使用unset()時(shí)觸發(fā)

        • __toString() //把類當(dāng)作字符串使用時(shí)觸發(fā)

        • __invoke() //當(dāng)嘗試將對(duì)象調(diào)用為函數(shù)時(shí)觸發(fā)

        反序列化繞過小Trick

        php7.1+反序列化對(duì)類屬性不敏感

        我們前面說了如果變量前是protected,序列化結(jié)果會(huì)在變量名前加上x00*x00

        但在特定版本7.1以上則對(duì)于類屬性不敏感,比如下面的例子即使沒有x00*x00也依然會(huì)輸出abc

        <?php class test{     protected $a;     public function __construct(){         $this->a = 'abc';     }     public function  __destruct(){         echo $this->a;     } } unserialize('O:4:"test":1:{s:1:"a";s:3:"abc";}');

        繞過_wakeup(CVE-2016-7124)

        版本:

        PHP5 < 5.6.25

        PHP7 < 7.0.10

        利用方式:序列化字符串中表示對(duì)象屬性個(gè)數(shù)的值大于真實(shí)的屬性個(gè)數(shù)時(shí)會(huì)跳過__wakeup的執(zhí)行

        對(duì)于下面這樣一個(gè)自定義類

        <?php class test{     public $a;     public function __construct(){         $this->a = 'abc';     }     public function __wakeup(){         $this->a='666';     }     public function  __destruct(){         echo $this->a;     } }

        如果執(zhí)行unserialize('O:4:"test":1:{s:1:"a";s:3:"abc";}');輸出結(jié)果為666

        而把對(duì)象屬性個(gè)數(shù)的值增大執(zhí)行unserialize('O:4:"test":2:{s:1:"a";s:3:"abc";}');輸出結(jié)果為abc

        繞過部分正則

        preg_match('/^O:d+/')匹配序列化字符串是否是對(duì)象字符串開頭,這在曾經(jīng)的CTF中也出過類似的考點(diǎn)

        利用加號(hào)繞過(注意在url里傳參時(shí)+要編碼為%2B)

        serialize(array(a ) ) ; / / a));//a));//a為要反序列化的對(duì)象(序列化結(jié)果開頭是a,不影響作為數(shù)組元素的$a的析構(gòu))

        <?php class test{     public $a;     public function __construct(){         $this->a = 'abc';     }     public function  __destruct(){         echo $this->a.PHP_EOL;     } } function match($data){     if (preg_match('/^O:d+/',$data)){         die('you lose!');     }else{         return $data;     } } $a = 'O:4:"test":1:{s:1:"a";s:3:"abc";}'; // +號(hào)繞過 $b = str_replace('O:4','O:+4', $a); unserialize(match($b)); // serialize(array($a)); unserialize('a:1:{i:0;O:4:"test":1:{s:1:"a";s:3:"abc";}}');

        利用引用

        <?php class test{     public $a;     public $b;     public function __construct(){         $this->a = 'abc';         $this->b= &$this->a;     }     public function  __destruct(){          if($this->a===$this->b){             echo 666;         }     } } $a = serialize(new test());

        上面這個(gè)例子將$b設(shè)置為$a的引用,可以使$a永遠(yuǎn)與$b相等

        16進(jìn)制繞過字符的過濾

        O:4:“test”:2:{s:4:“%00*%00a”;s:3:“abc”;s:7:“%00test%00b”;s:3:“def”;}

        可以寫成

        O:4:“test”:2:{S:4:“

        主站蜘蛛池模板: 国内精品久久久久久久影视麻豆| 87国产私拍福利精品视频| 99热热久久这里只有精品68| 国产精品莉莉欧美自在线线| 国产精品久久网| 国产一精品一av一免费爽爽| 精品九九人人做人人爱| 99久re热视频这里只有精品6| 在线人成精品免费视频| 国产亚州精品女人久久久久久| 亚洲AV永久无码精品一区二区国产| 亚洲精品国产V片在线观看| 欧美精品中文字幕亚洲专区 | 国产成人精品午夜福麻豆| 欧美成人精品第一区二区| 亚洲精品你懂的在线观看| 久久久91精品国产一区二区三区| 国产A∨国片精品一区二区| 午夜精品久久影院蜜桃| 国产成人精品男人的天堂538| 国产精品嫩草影院久久| 亚洲精品无码午夜福利中文字幕 | 88国产精品欧美一区二区三区| 无码人妻精品一区二区蜜桃AV| 精品亚洲麻豆1区2区3区 | 四虎影视国产精品永久在线| 亚洲av永久无码精品漫画| 国产精品无码v在线观看| 精品国产a∨无码一区二区三区| 国产精品.XX视频.XXTV| 久久精品aⅴ无码中文字字幕不卡| 国产区精品福利在线观看精品| 欧美成人精品第一区二区三区| 国产精品自在线拍国产| 无码人妻精品一区二| 在线精品国产一区二区| 国产伦精品一区二区三区女| 老子影院午夜精品无码 | 国产精品青青在线观看爽香蕉| 97精品国产一区二区三区| 中文字幕久精品免费视频|