某达反序列化链分析

0x00 前景

互联网上披露了该OA的反序列化漏洞,趁有时间分析了一下链。


0x01 yii2环境搭建

下载yii2对比OA的yii目录,发现OA少了很多拓展,但多了yii-redis,这大概就是链条的关键了

部署YIi2后,安装一个redis拓展(https://github.com/yiisoft/yii2-redis)

使用命令安装:安装在 /vendor/yiisoft/yii2-redis目录

composer require --prefer-dist yiisoft/yii2-redis:"~2.0.0"

添加配置:/vendor/yiisoft/extensions.php

  'yiisoftyii2-redis' => array(
      'name' => 'yiisoft/yii2-redis',
      'version' => '2.0.0',
      'alias' =>
          array (
              '@yii/redis' => $vendorDir . '/yiisoft/yii2-redis',
          ),
  ),


0x03 链条流程

语言组织能力有限,流水线描述如下:

反序列化触发db/BatchQueryResult.php #  __destruct(),进入 reset()

_dataReader 可控,调用某个类的close()

某达反序列化链分析

全局搜索close(),进入db/DataReader.php,通过_statement 触发__call()

某达反序列化链分析

进入 redis/Connection.php   –> __call()  ,(审计时,之所以不在 _dataReader 触发__call() ,是因为Connection类存在close(),用不到)

某达反序列化链分析

配置可控参数,进入executeCommand() –> open()

某达反序列化链分析

配置可控参数,让后几个if取反,走到 initConnection()

某达反序列化链分析

trigger() extends base/Component

某达反序列化链分析

base/Component.php, 明显用了call_user_func,关键参数是可以控制的

某达反序列化链分析

控制 $handler[0]的值,回调 rest/CreateAction.php  –> run()

两个参数可控,导致RCE,链条到此截止。

某达反序列化链分析


原文始发于微信公众号(XINYU2428):某达反序列化链分析

版权声明:admin 发表于 2023年9月16日 下午5:11。
转载请注明:某达反序列化链分析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...