真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php反序列化結(jié)構(gòu)知識點實例分析

本篇內(nèi)容主要講解“php反序列化結(jié)構(gòu)知識點實例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“php反序列化結(jié)構(gòu)知識點實例分析”吧!

創(chuàng)新互聯(lián)是一家專業(yè)提供高郵企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、網(wǎng)站設(shè)計、H5場景定制、小程序制作等業(yè)務(wù)。10年已為高郵眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。

php反序列化結(jié)構(gòu)知識點實例分析

簡介

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

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

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

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

  • __destruct() //對象被銷毀時觸發(fā)

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

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

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

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

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

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

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

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

反序列化繞過小Trick

php7.1+反序列化對類屬性不敏感

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

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

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

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

對于下面這樣一個自定義類

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

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

繞過部分正則

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

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

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

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";}';
// +號繞過
$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";}}');

利用引用

a = 'abc';
        $this->b= &$this->a;
    }
    public function  __destruct(){

        if($this->a===$this->b){
            echo 666;
        }
    }
}
$a = serialize(new test());

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

16進制繞過字符的過濾

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

可以寫成

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

表示字符類型的s大寫時,會被當(dāng)成16進制解析。

到此,相信大家對“php反序列化結(jié)構(gòu)知識點實例分析”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


文章名稱:php反序列化結(jié)構(gòu)知識點實例分析
本文地址:http://weahome.cn/article/gohjjc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部