upload-labs-master-Pass-10 双写绕过

143 阅读1分钟
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");

        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = str_ireplace($deny_ext,"", $file_name);
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = UPLOAD_PATH.'/'.$file_name;        
        if (move_uploaded_file($temp_file, $img_path)) {
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

核心过滤代码换了,同样是黑名单 这里讲解一下核心代码的意思,把带有黑名单中的后缀替换为空

$deny_ext 替换为空 意思他以后保存到服务器的文件就只有文件名 没有后缀名 比如上传一个 10.php 到了服务器上就显示10. 这样做就是让不符合条件的文件即使上传到服务器也不能运行起来!!!

$file_name = str_ireplace($deny_ext,"", $file_name);

把 world 替换成 shanghai 内容来源

image.png

但是我们发现只是替换了一次,我们可以双写绕过,如10.pphpphp,过滤一个直接拼凑出10.php

10.php 把php 过滤 剩下10我们要的是10.php 就要加上10.pphphp

image.png

http://192.168.31.33/upload-labs-master/upload/10.php

image.png