解析PHP對象注入漏洞_PHP教程

來源:互聯網
上載者:User

解析PHP對象注入漏洞


??

0、前言

逛烏雲知識庫的時候看到一篇有趣的譯文:www.Bkjia.com

說的是一種注入方式,叫對象注入。對象也能注入?

是的,只要是存在汙染資料,沒有什麼是不可能注入的,但是這個漏洞有點太古怪了,所以我覺得有趣。

1、原理

在程式編寫的時候,往往需要序列化一些運行時資料,所謂序列化就是按照一定的格式將運行時資料寫入本地檔案。這樣做可以對資料進行本地儲存,用的時候直接讀檔案就可以把運行時產生的資料讀出。在PHP中就是serialize和unserialize函數了。

能夠注入的原理就是在還原序列化的時候,引入了汙染資料造成的,比如:

$obj = unserialize($_GET[‘injection’]) ;

通過這個語句,我們可以自己按照序列化資料的格式進行構造,得到我們想要的對象$obj。

有人就要問了,你僅僅得到這個對象$obj有啥用?先看看下面的執行個體。

2、情景

該情景也是來源於譯文中的demo,這裡還原一下:

 . $this->filename ;        return file_get_contents($this->filename) ;                    }} // Main User class class User{    // Class data     public $age = 0;    public $name = '';     // 允許對象作為一個字串輸出上面的data     public function __toString()    {        return 'User ' . $this->name . ' is ' . $this->age . ' years old. ';    }} // 使用者可控 $obj = unserialize($_GET['usr_serialized']); // 輸出 __toStringvar_dump($obj) ;echo $obj;?>

上面的代碼是從使用者可控的資料擷取一個序列化資料,然後調用unserialize方法對$_GET['usr_serialized']進行還原序列化,那麼這個$obj就可以被我們控制了。

正常的方式是提交:

http://127.0.0.1/code/objin.php?usr_serialized=O:4:User:2:{s:3:age;i:20;s:4:name;s:4:John;}

上面的序列化資料是一個User類的對象,其中$age=20, $name=John。

這時,echo $obj ;直接echo對象,就能調用魔術方法__toString,在User類中已經對這個魔術方法進行了重載,即輸出一段字串,運行效果如下:

上面的代碼是從使用者可控的資料擷取一個序列化資料,然後調用unserialize方法對$_GET['usr_serialized']進行還原序列化,那麼這個$obj就可以被我們控制了。

正常的方式是提交:

http://127.0.0.1/code/objin.php?usr_serialized=O:4:User:2:{s:3:age;i:20;s:4:name;s:4:John;}

上面的序列化資料是一個User類的對象,其中$age=20, $name=John。

這時,echo $obj ;直接echo對象,就能調用魔術方法__toString,在User類中已經對這個魔術方法進行了重載,即輸出一段字串,運行效果如下:

3、漏洞挖掘

這類漏洞相當隱蔽,但是一旦出現效果很到位。挖掘主要是找找unserialize函數中的參數是否是汙染資料。找到相應的控制位置,再看看哪個類可以利用起來完成我們的攻擊,比如本情景中的FileClass類。

http://www.bkjia.com/PHPjc/953320.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/953320.htmlTechArticle解析PHP對象注入漏洞 ?? 0、前言 逛烏雲知識庫的時候看到一篇有趣的譯文:www.Bkjia.com 說的是一種注入方式,叫對象注入。對象也能注入?...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.