Upload-labs文件上传漏洞(图片马)——Pass13

0×00 题目概述

0×01 源代码

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

源代码也提示只读两个字节,因此直接上传图片马试试

0×02 解题步骤

将普通图片和一句话木马文本放到同一个文件夹下,要使用的是1.php和6.jpg

在目录下输入cmd即可进入该目录下的任务管理器

然后输入

copy 6.jpg /b + 1.php /a 2.png

表示将文件b:6.jpg与文件a:1.php合成为文件2.png

这时候看到文件夹中多了一个文件2.png

图片马制作完成,可直接上传

抓包看图片解析

能够解析出来其中的webshell代码

但是吧,菜刀和蚁剑连不上

应该是无法解析图片的原因

所以根据题目一开始的提示,要使用文件包含漏洞

在www/upload-labs/upload目录下建立一个php文件,代码如下

<?php
/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/
header("Content-Type:text/html;charset=utf-8");
$file = $_GET[file];
if(isset($file)){
    include $file;
}else{
    show_source(__file__);
}
?>

然后我上传的文件被重命名为5220200728083133.jpg,所以跳转到如下url

就可以解析出如下页面(和抓包里面看到的一样)

即解析成功

这样看可能不太直观,就用phpinfo来看是否解析成功

重现建一个图片“马”,内容为图片和phpinfo代码

直接上传

然后用文件包含漏洞的指定url打开

7420200728085254.jpeg

真 解析成功

经验分享 程序员 微信小程序 职场和发展