您好,登錄后才能下訂單哦!
小編給大家分享一下web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Yii2 < 2.0.38
影響范圍:Yii2 < 2.0.38
所以我們下載2.0.37即可
https://github.com/yiisoft/yii2/releases/tag/2.0.37
之后直接在根目錄下執行php yii serve開啟服務,然后修改下配置文件config/web.php;給cookieValidationKey修改一個任意值,不然會報錯。
環境搭建好了,就先了解下魔法函數,方便后面利用鏈的理解。
__construct():當對象創建(new)時會自動調用。但在unserialize()時是不會自動調用的。
__destruct():當對象被銷毀時會自動調用。
__call():是在對象上下文中調用不可訪問的方法時觸發
__callStatic():是在靜態上下文中調用不可訪問的方法時觸發。
__get():用于從不可訪問的屬性讀取數據。
__set():用于將數據寫入不可訪問的屬性。
__isset():在不可訪問的屬性上調用isset()或empty()觸發。
__unset():在不可訪問的屬性上使用unset()時觸發。
__sleep():在執行序列化函數serialize()時執行。
__wakeup():在執行反序列化函數unserialize()時執行。
__toString():允許一個類決定如何處理像一個字符串時它將如何反應。
__invoke():腳本嘗試將對象調用為函數時,調用__invoke()方法。
常用魔法函數圖示,更加直觀理解:
從大佬們的EXP入手分析
如圖所示,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鏈的起點。
1、BatchQueryResult類中__destruct調了reset()方法,然后可以看到reset()方法中的$this->dataReader是可控的,這里的$this->dataReader->close()可以利用魔法函數__call(前面說了,如果執行不存在的方法就會調用call方法),這就說明在EXP的第二個類Generator存在可利用的__call方法,繼續跟進Generator.php。
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文件。
3、CreateAction類中,run()很明顯可以看到$this->checkAccess以及$this->id都可控,利用鏈就出來了
yii\db\BatchQueryResult::__destruct() -> Faker\Generator::__call() -> yii\rest\CreateAction.php::run()
復現的第一步,先自己添加一個反序列化的入口,在controllers目錄下新建一個存在反序列化的Action,TestController.php
入口建立成功后就可以去執行EXP了,執行EXP后會得到Base64編碼后的序列化字符
將攻擊代碼代入URL即可成功RCE
升級到2.0.38之后的版本即可成功修復此漏洞。
以上是“web中CVE-2020-15148 Yii2反序列化RCE分析與復現的案例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。