[FSCTF 2023]ez_php1已解决
第一关:
要求原本的值不一样,但是md5值一样,因为是符号,符号是弱类型比较,
QNKCDZO 和 240610708 进行 md5 后加密的数值为 0e 开头,在 PHP 中会被识别为科学计数法,所有 0e 开头的数据进行弱类型比较皆为 True;
FL_AG随便等于一个值不为空就行。拿到下一关的文件名
第二关:
把KEY变量拿去序列化一下就好了。
第三关:
思路:让a的值赋值给b,所以打印b就是在打印a的值了
但如果不传地址,直接赋值是不行的,我的理解是:
$b
不是引用 $a
,而是直接赋值为 $a
的值,那么在对象销毁时,$b
会被销毁。因此,在 __destruct
方法中访问 $this->b
时,可能会引发错误因为 $b
已经不存在。
通过使用引用关系,$a
和 $b
共享相同的内存地址,确保了在 __destruct
方法中能够正确访问到 $a
的内容,因为在销毁对象时,引用关系并没有导致 $b
提前被销毁。这也能解释为什么反序列化函数前面为什么要加一个容错符,因为在__destruct函数里面访问b时,b已经不存在会产生报错信息吧……