文件上传漏洞靶场-2

发布于 2021-11-02  217 次阅读


访问靶场环境第2关,查看下源码:

我们把源码dump下来分析一下:

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {  /*判断变量submit是否设置*/
    if (file_exists(UPLOAD_PATH)) { /*检查UPLOAD_PATH中的文件或目录是否存在*/
        if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) { /*如果上传的文件格式为jpeg或png或type的话if语句结果为真,向下执行。*/
            $temp_file = $_FILES['upload_file']['tmp_name']; /*上传文件的临时路径赋值给$temp_file*/
            $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']    /*UPLOAD_PATH/上传文件名*/  
            if (move_uploaded_file($temp_file, $img_path)) { /*如果移动的文件路径和文件名称正确,结果为真。*/
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '文件类型不正确,请重新上传!';
        }
    } else {
        $msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
    }
}


代码分析完毕,我们可以看出,源码中判断的点在于上传文件的类型,这时我们只需要修改上传文件的MIME值就可以绕过过滤。

我们上传一个php文件,并抓包修改MIME值,将MIME值修改为: image/jpeg。

修改后我们传输数据包到服务器

可以看到我们上传成功,我们访问下上传的php文件,并利用一句话木马查看phpinfo()。

成功调用phpinfo(),说明我们上传的一句话木马可以正常使用,绕过了后端对上传文件的限制。


我从未觉得繁琐,说浪漫些,我很爱你。