[HCTF 2018]WarmUp

这个题的前身是一个cve漏洞(phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613))

刚入坑的小伙伴不要慌,我们一步一步慢慢来看

点开题目,日常f12发现有提示,所以我们进行访问

发现是源代码,让我们进行阅读(分为两块1、主函数部分 2、外部类)

外部方法:

 

这里对两个函数进行解释查询以下资料

(关于mb_strpos函数在测试时发现如果没有匹配到指定符号,将返回字符串长度)

我们进行一些本地测试加深理解:

代码如下:

 class emmm
    {
        public static function checkFile(&$page)
        {
            //先看一下对函数里输入了什么
			$a=&$page;
			echo $a."<br>";

            $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;
            }

            echo mb_strpos($page . '?', '?')."<br>";//没匹配到所以返回字符串长度

            $_page = mb_substr($page,0, mb_strpos($page . '?', '?'));

			echo "2".$_page."<br>";//经过一次后返回值
            if (in_array($_page, $whitelist)) {
                return true;
            }

            $_page = urldecode($page);

			echo "3".$_page."<br>";//二次编码后的返回值

			echo mb_strpos($page . '?', '?')."<br>";//注意输出时与第一次的区别

            $_page = mb_substr($page,0, mb_strpos($_page . '?', '?'));

			echo "4".$_page."<br>";//再次看经过截取后的输出

            if (in_array($_page, $whitelist)) {
				echo "sdf you can't see it";//证明进入该函数
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }

看测试结果:

看到第4部分输出为白名单内的内容,证明我们已经绕过了检查部分,只需要将含有flag的文件包含进去即可;

这是我们观察到白名单中的提示:hint.php

所以进行目录穿越即可获得flag(ffffllllaaaagggg这里flag被写了四次所以使用4或5个../) 

关于.和/的解释:

 .表示当前目录
. .表示当前目录的上一级目录。
. ./表示当前目录下的某个文件或文件夹,视后面跟着的名字而定
./表示当前目录上一级目录的文件或文件夹,视后面跟着的名字而定。
例如:
文件夹 a
下面有 文件夹b c 和文件 d。
文件夹b下面有e.php 和文件f。
则e中的 . 表示 文件夹b
./f 表示b下面的文件f。
. .表示a文件夹。
. ./d 表示a文件夹下的d文件。

查阅资料:

PHP mb_substr() 函数 | 菜鸟教程 (runoob.com) 

PHP: mb_strpos - Manual

大佬博客

https://blog.csdn.net/m0_53314778/article/details/112629012

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值