百谖夷 发表于 2025-6-9 08:34:47

[SWPUCTF 2021 新生赛]ez_unserialize

概括

这是一道PHP反序列化的CTF赛题,本意是想用这道题对PHP反序列化进行一定的学习。
过程

我们打开赛题,看看内容

 
没有发现什么东西,看看他的页面代码

 
 
根据他的提示,感觉是存在一个robots.txt文件的,尝试访问一下。

 
进去看看。

 
果然如此
我们来分析一下这段代码
 
我们进行代码分析:

[*]error_reporting(0); :关闭PHP错误报告。
[*]show_source("cl45s.php"); :显示这个文件里面的内容。
[*]创建了一个wllm类,然后在类里面定义了两个公共属性$admin与$passwd。
[*]创建了两个函数__construct()函数和__destruct()函数,这两个的功能分别是初始化admin和passwd以及判断admin和passwd的值是否为ture。
[*]如果admin==="admin",passwd==="ctf"的话,则echo出包含的flag文件
[*]通过GET方式上传一个p参数,并将其传递给unserialize()函数进行反序列化。
我们可以通过实例化这个类,分别给admin和passwd赋值,然后使用序列化函数进行序列化操作,最后通过p参数进行上传访问。
脚本

拿下flag
https://img2024.cnblogs.com/blog/2899036/202402/2899036-20240221215555807-1292918548.png
 
总结

这道赛题让我们可以简单入门php的反序列化,其中对于代码解析上存在一些疑问。比如这里的$this->admin与$this->passwd。这里通过Google了解到,$this在OOP中是一个伪变量,简单点说就是哪个对象调用,$this就是哪个变量。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: [SWPUCTF 2021 新生赛]ez_unserialize