漏洞描述

本质是在进行文件上传操作时未对文件类型进行检测或检测功能不规范导致被绕过,从而使攻击者上传的可执行脚本(WebShell)被上传至服务器并成功解析
image.png

漏洞危害

获取WebShell,攻击内网,破坏服务器数据等

常见文件上传方式

在Java开发中,文件上传的方式有多种,通常用以下三种:

  1. 通过文件流的方式上传
  2. 通过ServletFileUpload方式上传
  3. 通过MultipartFile方式上传

我用得最多的是springboot的MultipartFile接口

常见的漏洞场景

  • 未对文件做任何过滤
  • 仅在前端通过js检验
  • 只判断了Content-Type
  • 后缀过滤不全
  • 读取后缀方式错误
  • ……

    经典关键字

  1. org.apache.commons.fileupload
  2. java.io.File
  3. MultipartFile
  4. MultipartFileHttpServletRequest
  5. CommonsMultipartResolver
  6. ……

漏洞修复建议

  • 采取白名单策略限制运行上传的类型;
  • 对文件名字进行重命名;
  • 去除文件名中的特殊字符;
  • 上传图片时,通过图片库检测上传文件是否为图片。

实践