upload-labs-master pass-11(00截断)

源码:

$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类型文件!";
    }
}

白名单强制匹配(jpg、png、gif),顾00截断突破上传。其原理是利用C语言的终止符特性,当C语言在执行过程中遇到%00会被当成终止符,因此程序会自动截断后续信息。

00截断有条件限制,PHP版本必须为5.2.X,且GPC关闭。

 

%00截断

upload-labs-master pass-11(00截断)_第1张图片

 

解析

upload-labs-master pass-11(00截断)_第2张图片

你可能感兴趣的:(文件上传)