[SWPUCTF 2022 新生赛]1z_unserialize
[SWPUCTF 2022 新生赛]ez_ez_unserialize
[SWPUCTF 2021 新生赛]ez_unserialize
[SWPUCTF 2022 新生赛]1z_unserialize
1.打开题目查看源码。
2.分析一下,进行反序列化时,会让
a
的值为
a的值为
a的值为lt
然后执行函数,且参数值为$lly
payload
得到flag。
[SWPUCTF 2022 新生赛]ez_ez_unserialize
1.打开是段PHP代码。
2.创造类x,定义了一个魔术常量x为_FILE_(当前文件名),又定义了几个函数,construct函数让x类中的x赋值,wakeup让x重新赋值为_FULE_,destruct函数高亮x常量,如果传参x存在反序列化,否则输出
看到提示flag在fllllllag.php中,将代码复制,删掉没有的,加上x序列化。
3.由于要绕过wakeup函数,只要序列化的中的成员数大于实际成员数,即可绕过
O:1:“X”:1:{s:1:“x”;s:13:“fllllllag.php”;}
修改为O:1:“X”:2:{s:1:“x”;s:13:“fllllllag.php”;}即可绕过
得到flag。
[SWPUCTF 2021 新生赛]ez_unserialize
1.打开链接出现此画面。
2.右键点击查看源码。
在最下部出现Disallow,使用robots.txt即以下操作。
3.在robots.txt里面我们找到了一个路径 /cl45s.php,打开之后是PHP源码。
4.简单审一下,构造pop链:
链尾(就是最终我们想要利用的地方),在echo $flag 并且include了flag.php
往上看,发现只需要满足 ($this->admin === “admin” && $this->passwd === “ctf”)
即admin=“admin”,passwd=“ctf”
再往上看,发现执行这条语句我们需要触发__destruct()函数
__destruct是析构函数,会在对象的所有引用被删除或者当对象被显式销毁时自动执行,比如new完一个对象,当创建完成之后就不引用了,如果有赋值指向就会立马丢弃,触发destruct函数。
这里还有一个__construct()构造函数,它是在实例化一个对象(即new时)会自动调用。
上脚本:
得到 O:4:“wllm”:2:{s:5:“admin”;s:5:“admin”;s:6:“passwd”;s:3:“ctf”;}
5.题目中提示要以get方式给p传参,并且会对传入参数进行反序列化操作
因此我们将序列化后的内容传给p即可
构造payload:
?p=O:4:“wllm”:2:{s:5:“admin”;s:5:“admin”;s:6:“passwd”;s:3:“ctf”;}
传入后直接回显flag。