upload-labs第11-15关

upload-labs第十一关 && 第十二关(截断漏洞)

这是一个古老的漏洞,在php5.3.4以后就被修复了
由于我配置环境没有成功,这里放上另一位博主的链接
https://blog.csdn.net/u014029795/article/details/102889924

upload-labs第十三关(文件头检查)

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 = "上传出错!";
        }
    }
}

代码检查了文件的的前两个字节,我们只需要在文件里加上gif | jpg | png 的文件头就行
upload
这里加的GIF的头GIF98a
然后利用文件包含漏洞
upload

upload-labs第十四关(突破getimagesize())

function isImage($filename){
    $types = '.jpeg|.png|.gif';
    if(file_exists($filename)){
        $info = getimagesize($filename);
        $ext = image_type_to_extension($info[2]);
        if(stripos($types,$ext)>=0){
            return $ext;
        }else{
            return false;
        }
    }else{
        return false;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

getimagesize() 函数将测定任何GIF JPG PNG SWF SWC PSD TIFF BMP IFF JP2 JPX JB2 JPC XBM WBMP图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。

我在Windows下用cmd将一个hacker.jpg图片和web.php代码(结合在一起
upload-labs第11-15关_第1张图片

返回1.jpg文件,1.jpg文件表面上看起来是个正常图片
upload-labs第11-15关_第2张图片
实际上里面有php程序,利用文件包含漏洞

upload-labs第11-15关_第3张图片成功

upload-labs第十五关(突破exif_imagetype())

function isImage($filename){
    //需要开启php_exif模块
    $image_type = exif_imagetype($filename);
    switch ($image_type) {
        case IMAGETYPE_GIF:
            return "gif";
            break;
        case IMAGETYPE_JPEG:
            return "jpg";
            break;
        case IMAGETYPE_PNG:
            return "png";
            break;    
        default:
            return false;
            break;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

发现有exif_imagetype()函数

exif_imagetype()函数可以获取图片类型

上传方法和upload-labs第十四关方法一样

你可能感兴趣的:(upload-labs)