zoukankan      html  css  js  c++  java
  • 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
     
    欢迎一起交流。
  • 相关阅读:
    php获取http请求原文
    windows下安装MongoDB服务
    微服务RESTful 接口设计规范
    mysql主从复制原理及步骤
    nodejs主要框架
    redis事务机制和分布式锁
    计算机专业学生一定要学好这几门课
    redis常见7种使用场景
    js类型判断
    SQL语句:case when then的用法
  • 原文地址:https://www.cnblogs.com/huazige/p/15039889.html
Copyright © 2011-2022 走看看