一点进去就是一个大大的笑脸,暂时没有头绪,点开页面源码试试看
发现了一个source.php,从这里入手试试呢
能看到在source.php中有许多的if语句,猜测适用于验证过滤啥的,但看的不是太懂,一个个分析下先
这里isset()验证变量是否声明,is_string判断是否是字符串,只要有一个不符合,就会输出"you can't see it A"
判断传进来的变量是否在白名单whitelist里面
首先使用mb_strpos函数找到$page中第一个问号的位置,然后使用mb_substr函数将问号之前的部分作为$_page进行处理,也就是一个过滤问号的函数(如果$page的值有?则从?之前提取字符串)。
这里再次进行了白名单检测
对$page进行URL解码后,再次进行了白名单验证
检测传入的file是否是非空且是字符串并调用emmm::checkFile方法进行检查,如果一个不是就返回笑脸图片。若都满足,则通过include语句包含$_REQUEST['file']指定的文件并终止程序执行。在刚刚的source.php中还提到了hint.php,我们利用试试
提示我们flag in ffffllllaaaagggg,让我们来分析一下传入这个东西后,php代码是如何进行判断的:这里是参考了https://blog.csdn.net/Myon5/article/details/134286537里解释的。source.php一般是在html目录下,往上是www,var,然后到根目录,flag一般就放在根目录下面,这里还有一个hint.php?/或者source.php?/,因此需要返回四层才能到根目录。也就是我们可以构造如下payload:source.php?file=hint.php?/../../../../ffffllllaaaagggg,得到结果flag:flag{9ea6a0d5-bd15-4008-9bf0-6246f018a463}
标签:..,WarmUp,flag,HCTF,source,CTF,根目录,php,page From: https://www.cnblogs.com/Evan66/p/18073643