[MRCTF2020]Ezpop

首先,看到题目就已经知道,应该是一个反序列化的题,打开环境,发现有三个类:

这里先进行一个简单的分析,Modifier类是进行文件包含的,根据提示我们知道flag在flag.php中,因此我们肯定是要用到这里的文件包含的,然后是show类,这里有三种魔术方法,触发条件也已经注释上了,然后是Test类:

这里我们想要做的是读取flag.php,然后就要触发invoke魔术方法,而想要触发invoke魔术方法就就是类被当作是函数调用,也就是要触发Test类中的__get魔术方法,而想要触发这个魔术方法,就要访问类中的私有属性或者是不存在的属性,也就是触发Show类中的toString魔术方法,而想要触发这个魔术方法,就是对象也就是类,被当成字符串使用。也就是Show类中的wakeup魔术方法,而想要触发该魔术方法就要使用反序列化函数,而恰好,我们通过get传参执行的就是反序列化函数。这样就构造了一个完整的pop链。这时我们从终点反向推,构造的序列化代码如下:

解释一下,我们传参pop会触发__wakeup魔术方法,然后检测到a对象的source属性是b对象,这样就会触发__toString魔术方法,从而执行读取b对象的str属性的source属性,而我们的b对象的str属性值为Test对象,而这个对象中不存在source属性,就会触发Test对象中的__get魔术方法,而我们的Test对象中的p属性的值是Modifier对象,这样在执行的时候,把这个对象当成函数执行,这样就触发了,Modifier对象中的__invoke魔术方法,从而执行我们的包含flag.php操作。

在执行之后,我们得到的是:

这时我们就要想办法读取该页面的源代码,我们知道这里的过滤有:/gopher|http|file|ftp|https|dict|

因此这里构造:

这样来读取flag.php的源码:

然后base64解码即可:

相关推荐
m0_738120722 小时前
应急响应——知攻善防蓝队溯源靶机Linux-2详细流程
linux·服务器·网络·安全·web安全·php
oMcLin2 小时前
如何在Ubuntu 22.04上通过调优Nginx和PHP‑FPM,提升高并发WordPress网站的负载均衡与缓存性能?
nginx·ubuntu·php
全栈小52 小时前
【PHP】如何将ThinkPHP 5部署到windows服务器的IIS里,和PHP版本又是一个怎么样的关系,三分钟教程搞定部署
服务器·windows·php
JaguarJack2 小时前
2026 年 PHP 8.4 依然重要:跳到 8.5 之前你该掌握的特性
后端·php·服务端
BingoGo2 小时前
2026 年 PHP 8.4 依然重要:跳到 8.5 之前你该掌握的特性
后端·php
ad禥思妙想2 小时前
NSSCTF_MISC_WP_刷题记录(四)
ctf·misc
专注前端30年18 小时前
【PHP开发与安全防护实战】性能调优手册
android·安全·php
oMcLin19 小时前
如何在 RHEL 7 上优化 Nginx 与 PHP‑FPM 配置,确保高并发 Web 应用的稳定性与响应速度?
前端·nginx·php
IT=>小脑虎1 天前
PHP零基础衔接进阶知识点【详解版】
开发语言·学习·php
xifangge20251 天前
PHP 接口跨域调试完整解决方案附源码(从 0 到定位问题)
开发语言·php