[BUUCTF]HCTF 2018 WarmUp wp

打开靶机后是一张滑稽的图片,按照惯例,我们F12看看源码,发现有提示:source.php
[BUUCTF]HCTF 2018 WarmUp wp_第1张图片根据提示发现以下代码:

 <?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];//白名单,并且发现hint.php
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }

            if (in_array($page, $whitelist)) {
                return true;
            }//in_array() 函数搜索数组中是否存在指定的值,即数组whitelist中是否能匹配$page

            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')//返回$page中从第一次出现“?”的位置
            );//$_page为从$page中0位置开始截取长度为mb_strpos($page . '?', '?')的字符串
            if (in_array($_page, $whitelist)) {
                return true;
            }//如果$_page能和白名单元素匹配返回true

            $_page = urldecode($page);//URL解码
            $_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 "
"
; } ?>

checkfile函数的分析我已经在代码中加了注释,大家可以参考。

总的来说就是要满足3条件:

  • flie不能为空
  • file必须是字符串类型
  • 必须通过checkfile函数检验
    而checkfile函数中有很多if语句,只要有一个返回值就能通过,这里我们只能满足截取的那个if语句才能通过。
    构造参数file的值url解码后把“?”之前的内容和白名单匹配,全部成功即可拿到flag,但是我们还缺少file的值,别忘了代码中出现了一个hint.php
    在这里插入图片描述好的我们知道了flag文件在ffffllllaaaagggg中,开始构造payload。
    因为他会进行一次url解码,而且服务器也会进行一次url解码,所以我们把“?”编码两次为%253f,构造payload=?file=source.php?../ffffllllaaaagggg
    但是并没有出现flag,想了想可能存在多级目录,ffffllllaaaagggg每个字母都出现了四次,试一试再加四次…/,果然最终出现了flag
    最终的payload:?file=source.php?../…/…/…/…/ffffllllaaaagggg
    在这里插入图片描述ps:若有不足之处,欢迎大佬们及时斧正,感谢您的观看!

你可能感兴趣的:(CTF,WP)