文件上传漏洞原理:在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。

上传触发点:相册、头像上传、视频、照片分享、附件上传、文件管理器

上传漏洞的危害:直接上传后门,控制网站,得到web权限(服务器权限)。

造成文件上传漏洞的原因

1.服务器配置不当

2.开源编辑器上传漏洞

3.本地文件上传限制被绕过

4.过滤不严格被绕过

5.文件解析漏洞导致文件执行

6.文件路径截断

上传漏洞的绕过方法

1.本地禁用JS

2.修改后缀名

3.修改content-type

常见的媒体格式类型如下:

    text/html : HTML格式
    text/plain :纯文本格式
    text/xml : XML格式
    image/gif :gif图片格式
    image/jpeg :jpg图片格式
    image/png:png图片格式

以application开头的媒体格式类型:

    application/xhtml+xml :XHTML格式

    application/xml : XML数据格式

    application/atom+xml :Atom XML聚合格式

    application/json : JSON数据格式

    application/pdf :pdf格式

    application/msword : Word文档格式

    application/octet-stream : 二进制流数据(如常见的文件下载)

    application/x-www-form-urlencoded : 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

4.修改文件头

5.空格绕过

6.::$DATA绕过

7.大小写、双写、点绕过

8.配合中间件解析绕过

IIS6.0:文件夹目录解析 /xx.asp/xx.jpg "xx.asp"是文件夹名,这样只要在 xx.asp 目录下面的任意文件都会当脚本解析。
xx.asp;.jpg 通过上传功能传到网站目录,直接会当作 asp 脚本执行。

IIS 7.0、IIS7.5:默认 Fast-CGI 开启,直接在 url 中图片地址后面输入/1.php,会把正常图片当成 php 解析

Nginx:版本小于等于 0.8.37,利用方法和 IIS 7.0/7.5 一样,Fast-CGI 关闭情况下也可利用。空字节代码 xxx.jpg.php

Apache:上传的文件命名为:test.php.x1.x2.x3,Apache 是从右往左判断后缀

lighttpd:xx.jpg/xx.php 与上面一样

9.%00截断、0x00截断

10.MIME绕过

文件上传过WAF:

1.在数据包filename之前,手动加入大量垃圾数据(以分号结尾),造成数据溢出,防止waf匹配关键字,从而绕过waf防护。

2.使用符号变异的方法,来防止WAF匹配关键字,从而实现WAF绕过。

3.数据截断-防匹配(%00 ; 换行)

4.重复数据-防匹配(参数多次)

文件上传安全修复方案:

1.后端验证:采用服务端验证模式

2.后缀检测:基于黑名单、白名单过滤

3.MIME检测:基于上传自带类型检测

4.内容检测:文件头,完整性校验