在现代Web服务中,文件上传已经是一种极为常见的功能,它有助于企业与用户之间产生交互。在日常开发中,文件上传功能主要集中于用户头像上传、照片、视频、用户文件。如果对这些文件的格式内容不加以约束和过滤。恶意用户就会构造恶意文件,利用文件上传漏洞将可执行的脚本文件上传至服务器上运行。通过进一步提权操作,达到控制服务器的目的。

文件上传漏洞存在地方: 前端、后端

文件上传漏洞分类

文件上传漏洞主要分为以下几类:

文件检测流程

文件上传实例讲解

前端JS校验绕过

网站只对文件进行了前端JS校验,攻击者可以采用下面两种方式进行JS绕过:

  1. 浏览器禁用JS,删除校验部分的JS
  2. 使用抓包工具,对文件后缀或文件内容进行伪造
function checkFile() {
        var file = document.getElementsByName('upload_file')[0].value;
        if (file == null || file == "") {
            alert("请选择要上传的文件!");
            return false;
        }
        //定义允许上传的文件类型
        var allow_ext = ".jpg|.png|.gif";
        //提取上传文件的类型
        var ext_name = file.substring(file.lastIndexOf("."));
        //判断上传文件类型是否允许上传
        if (allow_ext.indexOf(ext_name) == -1) {
            var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
            alert(errMsg);
            return false;
        }
    }

Pass-01