任意文件上传

任意文件上传是什么?

文件上传是Web 应用必备功能之一,如,头像上传,附件分享等。如果服务器配置不当或者没有进行足够的过滤,Web 用户就可以上传任意文件,包括恶意脚本文件,exe 程序等等,这就造成了任意文件上传漏洞。

如果服务器配置不当或没有进行足够的对文件的验证和过滤(根据后缀名、内容、类型检测过滤),导致用户可以上传任意文件,包括恶意的脚本文件,这就是任意文件上传漏洞。

文件上传漏洞有以下的限制条件:

  • Web 服务器开启文件上传功能,Web 用户可以使用该功能。
  • Web 用户对目标目录具有可写权限,甚至具有执行权限。一般情况下,Web 目录都有执行权限。
  • 完美利用意味着文件可以执行,也就是说代码可以被服务器解析。
  • 服务器开启了PUT方法。

该漏洞为什么会出现?

服务器配置不当,开启了PUT方法。
Web应用开放了文件上传功能,没有对上传的文件做足够的限制和过滤在程序开发部署时,没有考虑以下因素,导致限制被绕过

  • 代码特性;
  • 组件漏洞
  • Web容器漏洞
  • 系统特性

PUT方法是一种HTTP的请求方法,它很不安全,如果开启了PUT方法,就会造成文件上传漏洞。并且如果web应用开启了文件上传功能,但是对上传的文件的过滤不够,也会出现该漏洞

该漏洞怎么防御?

可以对文件的三个点进行检测,防止任意文件上传:

  • 文件后缀名
  • 文件类型
  • 文件内容

代码角度:

  • 采用白名单策略,严格限制上传文件的后缀名
  • 上传文件重命名,尽量少的从客户端获取信息,包括文件名、文件类型、文件内容等;
  • 文件内容检测;
  • 进行二次渲染,过滤掉图片马中的恶意代码
  • 避免文件包含漏洞
  • 严格处理文件路径,防御00 截断漏洞
  • 检测Token 值,防止数据包重放。

业务角度:

  • 强口令策略,避免恶意攻击者登录网站后台
  • 尽量避免Web 用户修改上传白名单

检测文件类型更严格的方法是检测文件头部,检测幻数是否合法,下面是常见文件的幻数:

常见文件幻数

文件类型 文件头 文件尾
JPG FF D8 FF E0 FFD9
GIF 47 49 46 38
PSD 38 42 50 53
PNG 89 50 4E 47 AE 42 60 82
GIF 47 49 46 38 00 3B
BMP 42 4D
TIFF 49 49 2A 00
ZIP 50 4B 03 04 50 4B
MS Word/Excel (xls.or.doc) D0 CF 11 E0
PDF 25 50 44 46 2D 31 2E
RAR 52 61 72 21

这是将文件和图片合并成一个新图片的命令,用于在图片中加入后面和恶意代码:

copy imgName.jpg/b + yjh.php/a newImgName.jpg

你可能感兴趣的:(网络安全,安全,网络,文件上传漏洞)