Yii2框架 反序列化漏洞复现(CVE-2020-15148)

本文详细介绍了Yii2框架中的CVE-2020-15148反序列化漏洞的复现过程,包括错误的链子查找和正确的利用链子。通过魔术方法`__destruct`和`__call`,结合`call_user_func_array`,展示了如何利用可控参数触发远程代码执行。最后,作者总结了利用链子的关键点,强调了灵活运用魔术方法和回调函数的重要性。
摘要由CSDN通过智能技术生成

前言:

phpthink 的链子有点长 暂时先复现一下简单点的框架,跟着师傅们的思路学习一下,提高一下自己的代码审计能力,搞完这个复现 也该去学java了

源码地址:https://github.com/yiisoft/yii2/releases/download/2.0.37/yii-basic-app-2.0.37.tgz

该漏洞适用于YII2.0.38之前,用户如果可以控制unserialize的传入值,则可以进行远程代码执行。

环境用的是PHPstudy。 需要 修改config\web.php中cookieValidationKey为任意值,作为yii\web\Request::cookieValidationKey的加密值,不然会发送报错。

CVE-2020-15148漏洞复现

一般的反序列化链子 都会以魔术方法 __destruct 作为起点来找利用点   这个漏洞也是的。 全局搜索 __destruct ,对于这个魔术方法 有很多文件都有, 只能一个一个去找利用点 去探索了。

其实开查找 也挺方便的 直接 CTRL + 左键 ,最终找到 /vendor/yiisoft/yii2/db/BatchQueryResult.php  reset() 方法可以利用 这会又可以调用 _dataReader下的close方法。

class BatchQueryResult{
    private $_dataReader;
         
   public function __destruct()
    {
        // make sure cursor is closed
        $this->reset();
    }

    public function reset()
    {
        if ($this->_dataReader !== null) {
            $this->_dataReader->close();
        }
        $this->_dataReader = null;
        $this->_batch = null;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值