[HCTF 2018]WarmUp-滑稽

启动场景打开链接,出现一下图片

F12查看代码出现一个注释,应该在这个文件中,

进入到该页面,出现一段代码

php 复制代码
<?php

    highlight_file(__FILE__);

    class emmm

    {

        public static function checkFile(&$page)

        {

            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];

    

            //定义了一个白名单,只有source.php和hint.php有新的PHP页面



            if (! isset($page) || !is_string($page)) {



                //isset就是判断$page是不是NULL,只要不是NULL返回的都是true

                //is_string就是判断是不是字符串,是的话返回true,但是要注意前面有!,所以是取反

                //所以只要传入的数据是字符串就不会返回false



                echo "you can't see it";

                return false;

            }



            if (in_array($page, $whitelist)) {



                //in_array()函数搜索数组中是否存在制定的值

                //这个函数是判断$page是否在白名单$whitelist里面,而我们只能传入source.php

                  或者hint.php,但是我们要获取flag肯定要输入其他字符,所以往下继续看



                return true;

            }



            //在$page?里面匹配第一个问号

            //例如$page=123?45,$page . '?'=123?45? 返回int(3)$_page=123



            $_page = mb_substr(

                $page,

                0,

                mb_strpos($page . '?', '?')

            );



            //这个if语句也是判断$_page是否在白名单内,无法绕过



            if (in_array($_page, $whitelist)) {

                

                return true;

            }



            $_page = urldecode($page);

            $_page = mb_substr(



                //mb_substr()函数返回字符串的一部分



                $_page,

                0,

                mb_strpos($_page . '?', '?')   



                //mb_strpos - 查找字符串在另一字符串中首次出现的位置



            );

            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'])    //让这个类checkFile返回true

    ) {

        include $_REQUEST['file'];

        exit;

    } else {

        echo "

<img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";

    }  

?>

这段PHP代码定义了一个名为emmm的类,其中包含一个静态方法checkFile。这个方法的作用是检查请求的文件名是否在一个白名单内,即$whitelist数组中列出的几个文件(如"source.php"、"hint.php")。如果文件名在列表中或者经过URL解码处理后仍在列表中,方法返回true,表示可以访问该文件;否则返回false,并显示"You can't see it"的信息。

在主程序部分,它首先检查$_REQUEST'file'变量是否存在、是否为字符串,然后调用emm::checkFile()方法。如果检查通过,就包含并执行指定的文件;如果没有通过检查,则显示一个图片链接。

先构造?file=hint.php

进入到其中出现以下情况

所以flag应该是在ffffllllaaaagggg这个文件里

构造payload:source.php?file=source.php?/../ffffllllaaaagggg,经过mb_strpos为source.php?/../ffffllllaaaagggg?,mb_strpos这个函数只返回首次出现?的位置,而mb_substr截取函数,从0开始截取一直到第一个?的位置,截取内容为source.php,正好可以与白名单中进行匹配,可以返回true

然后执行payload,发现没有显示flag,所以应该不是这个目录,继续加../,直到得到flag

payload:/source.php?file=source.php?/../../../../ffffllllaaaagggg

相关推荐
数智化管理手记13 小时前
智能财务能替代人工核算吗?智能财务核心功能包含哪些?
大数据·网络·数据库·数据挖掘·精益工程
白帽小阳14 小时前
我的AI辅助开发工具链2026版:从编码到部署的全栈智能实践
网络·人工智能·学习·安全·自动化
衣舞晨风14 小时前
什么样的 AI 网关算是一个好网关
网络·人工智能·网关·ai·大模型·ai网关
Keepingrun15 小时前
http登录和授权
网络·网络协议·http
Sirius Wu15 小时前
OpenClaw 并发安全完整详解
网络·人工智能·安全·ai·架构·aigc
rcms1527026921815 小时前
AMAT 0190-27952-04 终端服务器
网络
海外数字观察家16 小时前
品未云:博兹瓦纳华商批发零售一体化 ERP,破解本土软件适配难题|CSDN 技术分享
大数据·网络·人工智能·博兹瓦纳进销存系统·博兹瓦纳收银系统·博兹瓦纳erp系统·博兹瓦纳仓库管理系统
段一凡-华北理工大学16 小时前
AI Agent 从入门到封神:24 讲打造你的超级智能体~系列文章23:从Demo到上线:Agent应用的架构设计、性能优化与成本控制实战
运维·网络·人工智能·性能优化·高炉炼铁·工业智能体
leagsoft_100317 小时前
从“策略看不清”到“风险可收敛”:某高端精密制造企业的网络安全策略治理实践
网络·web安全·制造
paopaokaka_luck17 小时前
基于Springboot3+Vue3的宠物殡葬管理系统(webSocket实时通讯、接入腾讯地图、支付宝沙盒支付、Echarts图形化分析)
java·开发语言·网络·后端