Yii2反序列化漏洞复现

Yii2反序列化漏洞复现

CVE-2020-15148

漏洞描述

Yii 是一个通用的 Web 编程框架,即可以用于开发各种用 PHP 构建的 Web 应用。 因为基于组件的框架结构和设计精巧的缓存支持,它特别适合开发大型应用, 如门户网站、社区、内容管理系统(CMS)、 电子商务项目和 RESTful Web 服务等。Yii2 2.0.38 以前的版本中存在反序列化漏洞,CVE编号是CVE-2020-15148

环境搭建

github上下载yii22.0.37版本

打开 /config/web.php

image-20220711150722785

给17行的cookieValidationKey添加一个值,随便什么都行

image-20220711151429779

不添加就会这样

php yii serve --port=xxx 启动

image-20220711151913244

显示默认主页,环境搭建成功

image-20220711152341398

2.0.37版本漏洞复现

前置知识

在漏洞复现之前,补充一点yii2框架的前置知识点,yii2调用控制器和方法的格式是

http://url/index.php?r=[控制器]/[方法]

但是这是我们自己搭的环境,什么服务都没有,反序列化也就没有入口点,所以我们自己手动添加一个入口

/controllers 文件夹底下创建一个新的控制器,控制器里面写一个新的action方法,执行传入的aaa变量

注意命名空间

image-20220711180206759

然后在网址界面调用这个我们自定义控制器下面的自定义方法

这里的控制器和action方法命名有严格规范,图中可以明显看出来,不做过多解释

image-20220711180342882

上面我们只是测试了一下自定义控制器能不能正常工作,想要写一个自定义的反序列化入口,还是得这么写

<?php

namespace app\controllers;
use yii\web\Controller;

class HahaController extends Controller{
   
    public function actionXixi($aaa){
   
        // return phpinfo();
        return unserialize(base64_decode($aaa));
        
    }
}
反序列化链分析

2.0.38版本之前的漏洞是从**/vendor/yiisoft/yii2/db/BatchQueryResult.php里面的BatchQueryResult**类开始的

在开始分析链之前,先看看这些类属性,这些都是可控点,在后面的分析中需要保持敏感

image-20220711182610954

BatchQueryResult类的 __destruct() 是这条链的入口

image-20220711185524505

跟进**reset()**方法

image-20220711185851031

这里调用了 _dataReaderclose()方法,这里跟进了close()之后也找不到可以利用的点,但是 _dataReaderBatchQueryResult类的属性,可控,所以我们可以想办法调用一下某个类的 __call() 方法

在框架里面全局搜索有 __call() 方法的类

image-20220711192250402

其中Generator.php里面的Generator就符合我们的要求,老规矩先看看属性部分

image-20220711222213912

Generator的 **__call()**方法

image-20220711192509477

这里的** m e t h o d ∗ ∗ 是 被 调 用 的 那 个 不 存 在 的 方 法 名 , 在 这 里 就 是 ∗ ∗ c l o s e ∗ ∗ , ∗ ∗ method**是被调用的那个不存在的方法名,在这里就是**close**,** methodcloseattributes**是后面的参数,这里就为空

继续跟进format()方法,这里call_user_func_array已经和目标很接近了

image-20220711222131895

format()方法的两个参数, f o r m a t t e r ∗ ∗ 就 是 上 一 层 的 ∗ ∗ formatter**就是上一层的** formattermethod,即为close a r g u m e n t s ∗ ∗ 也 变 成 了 空 数 组 , ∗ ∗ c a l l u s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值