美文网首页
mt_rand()/文件上传/phar协议/文件包含--C1ct

mt_rand()/文件上传/phar协议/文件包含--C1ct

作者: ch3ckr | 来源:发表于2017-12-12 15:18 被阅读153次

    我把题目简化了一下,去掉命令执行部分,主要剩下标题四个知识点。

    题目界面:

    题目代码:链接
    关键代码:

    <?php
        $type = array('gif','jpg','png');
        mt_srand((time() % rand(1,100000)%rand(1000,9000)));
        echo mt_rand();
        if (isset($_POST['submit'])) {
            $check = getimagesize($_FILES['file']['tmp_name']);
            @$extension = end(explode('.',$_FILES['file']['name']));
            echo $extension;
            if(in_array($extension,$type)){
                echo 'File is an image - ' . $check['mime'];
                $filename = 'D:/phpstudy/PHPTutorial/WWW/upload/'.mt_rand().'_'.$_FILES['file']['name']; 
                move_uploaded_file($_FILES['file']['tmp_name'], $filename);
                echo "<br>\n";
            } else {
                echo "File is not an image";
            }
        }
        if(isset($_GET['p'])){
            if(@preg_match("/\.\.\//",$_GET['p'])){
                echo "too young too simple";
            }
            else{
               @include $_GET['p'].".php";
            }
        }
    ?>
    

    第一个问题:mt_rand()可以使用php_mt_seed进行爆破,得到种子后产生的第二个随机数就是文件名的一部分。

    第二个问题,上传部分这里仅仅校验mime类型与文件后缀,所以可以通过使用phar伪协议来解决,即将一个php文件打包成zip,然后修改成array里面种的一个后缀就可以上传成功了。

    nac.php -> 压缩 -> nac.zip -> -> 改后缀 -> nac.png ->上传
    

    第三个问题就是文件包含,源代码最后有一个文件包含就可以利用上传的文件了。

    相关文章

      网友评论

          本文标题:mt_rand()/文件上传/phar协议/文件包含--C1ct

          本文链接:https://www.haomeiwen.com/subject/eixnixtx.html