91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

發布時間:2021-11-23 15:13:57 來源:億速云 閱讀:483 作者:小新 欄目:安全技術

小編給大家分享一下web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1、影響范圍

Yii2 < 2.0.38

2、環境搭建

影響范圍:Yii2 < 2.0.38

所以我們下載2.0.37即可

https://github.com/yiisoft/yii2/releases/tag/2.0.37

之后直接在根目錄下執行php yii serve開啟服務,然后修改下配置文件config/web.php;給cookieValidationKey修改一個任意值,不然會報錯。

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

3、PHP(反)序列化有關的魔法函數

環境搭建好了,就先了解下魔法函數,方便后面利用鏈的理解。

__construct():當對象創建(new)時會自動調用。但在unserialize()時是不會自動調用的。

__destruct():當對象被銷毀時會自動調用。

__call():是在對象上下文中調用不可訪問的方法時觸發

__callStatic():是在靜態上下文中調用不可訪問的方法時觸發。

__get():用于從不可訪問的屬性讀取數據。

__set():用于將數據寫入不可訪問的屬性。

__isset():在不可訪問的屬性上調用isset()或empty()觸發。

__unset():在不可訪問的屬性上使用unset()時觸發。

__sleep():在執行序列化函數serialize()時執行。

__wakeup():在執行反序列化函數unserialize()時執行。

__toString():允許一個類決定如何處理像一個字符串時它將如何反應。

__invoke():腳本嘗試將對象調用為函數時,調用__invoke()方法。

常用魔法函數圖示,更加直觀理解:

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

4、漏洞分析與復現

分析:

從大佬們的EXP入手分析

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

如圖所示,EXP執行順序為①②③最后RCE

①:new了一個BatchQueryResult對象,導致執行了BatchQueryResult類下的__construct函數

②:new了一個Generator對象,導致執行了Generator類下的__construct函數

③:new了一個CreateAction對象,導致執行了CreateAction類下的__construct

最后因為CreateAction類中run()方法中的checkAccess和id的值是可控的,導致了RCE。

根據EXP中的類,我們跟進每個文件去分析。

先new的BatchQueryResult,所以BatchQueryResult.php就是整個POP鏈的起點。

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

1、BatchQueryResult類中__destruct調了reset()方法,然后可以看到reset()方法中的$this->dataReader是可控的,這里的$this->dataReader->close()可以利用魔法函數__call(前面說了,如果執行不存在的方法就會調用call方法),這就說明在EXP的第二個類Generator存在可利用的__call方法,繼續跟進Generator.php。

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

2、Generator類中看到__call調用了format方法,format又調用了call_user_func_array,但是$formatter和arguments都是不可控的;繼續往下走,$formatter傳入了$this->getFormatter,在這個方法中,$this->formatters是我們可控的,也就是說getFormatter方法的返回值是可控的,call_user_func_array這個函數的第一個參數可控,第二個參數為空;那么EXP中的下一步代入了一個無參數的方法去RCE;我們去查看下EXP的最后一步,CreateActiion類中的run()方法,跟進CreateAction.php文件。

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

3、CreateAction類中,run()很明顯可以看到$this->checkAccess以及$this->id都可控,利用鏈就出來了

yii\db\BatchQueryResult::__destruct() -> Faker\Generator::__call() -> yii\rest\CreateAction.php::run()

復現:

復現的第一步,先自己添加一個反序列化的入口,在controllers目錄下新建一個存在反序列化的Action,TestController.php

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

入口建立成功后就可以去執行EXP了,執行EXP后會得到Base64編碼后的序列化字符

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

將攻擊代碼代入URL即可成功RCE

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

5、修復建議

升級到2.0.38之后的版本即可成功修復此漏洞。

web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例

以上是“web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民丰县| 威信县| 元江| 庄浪县| 绥中县| 商河县| 仙桃市| 屯昌县| 大兴区| 体育| 宜君县| 中西区| 台中市| 丽江市| 监利县| 锡林郭勒盟| 澳门| 浦县| 和林格尔县| 雷波县| 柳河县| 南昌市| 华容县| 巴里| 屏山县| 肃南| 克东县| 宁远县| 德安县| 仪陇县| 丹寨县| 沅陵县| 滨州市| 金门县| 怀安县| 东光县| 昌吉市| 博湖县| 清丰县| 孝义市| 萨嘎县|