Pass-11

1.根据题意,本pass的上传路径可控。

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else{
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

2.根据题意,本题是通过白名单的方式来判定上传,根据高亮处的代码发现,是根据上传的文件名进行重新拼接,通过%00进行截断上传

类似move_uploaded_file函数的底层实现类似于C语言,遇到0x00会截断

 

 

 3.提示上传出错

 

 根据查询,截断条件为:
1、php版本小于5.3.4
2、php.ini的magic_quotes_gpc为OFF状态

 
posted @ 2021-07-21 17:22  Nuyoah_QQ  阅读(106)  评论(0)    收藏  举报