文件上传漏洞(原理+审计+绕过+防御)
文章详细分析了文件上传漏洞的原理及其常见实现方式(如Spring MultipartFile和Apache Commons FileUpload),指出了未验证文件类型、路径遍历、文件覆盖等风险,并提出了生成随机名、验证文件类型和大小、设置安全权限等修复建议。 2025-6-12 02:27:53 Author: www.freebuf.com(查看原文) 阅读量:81 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

一、原理

文件上传漏洞(Unrestricted File Upload / File Upload Vulnerability)本质上是应用程序对用户上传的文件缺乏充分、有效的安全验证和限制,导致攻击者能够上传恶意文件(如WebShell、恶意脚本、木马程序等)到服务器上,并可能执行这些文件,从而完全或部分控制服务器、窃取数据、破坏系统或发起进一步攻击。

二、审计

文件上传的常见实现方式

1. 使用Spring MultipartFile 实现

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
    String fileName = file.getOriginalFilename();
    File dest = new File("/upload/dir/" + fileName);
    file.transferTo(dest);
    return "上传成功";
}

问题点分析

漏洞出现的点位

存在的风险

fileName

用户可控,如果fileName包含路径遍历序列(如”../“),就可以读取该路径下的内容造成路径遍历漏洞

未验证文件类型(扩展名/内容)

没有校验,用户可以上传任意类型的文件包括一些可执行脚本(.php、.jsp等)

文件覆盖

如果服务器上已存在同名文件,这段代码会直接覆盖它,没有检查文件是否存在。

未设置安全权限

上传后的文件权限继承系统默认设置,没有显式设置文件权限(如移除执行权限)

未限制文件大小

可以恶意上传大文件、Zip炸弹等使磁盘空间耗尽

2. 使用Apache Commons FileUpload(ServletFileUpload)实现

DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);

for (FileItem item : items) {
    if (!item.isFormField()) {
        String fileName = item.getName();
        File file = new File("/upload/" + fileName);
        item.write(file);
    }
}

问题点分析

漏洞出现的点位

存在的风险

fileName

用户可控,如果fileName包含路径遍历序列(如”../“),就可以读取该路径下的内容造成路径遍历漏洞

未验证文件类型(扩展名/内容)

没有校验,用户可以上传任意类型的文件包括一些可执行脚本(.php、.jsp等)

文件覆盖

没有检查文件是否存在直接覆盖,可以通过覆盖/etc/passwd的方式直接添加root账户

未设置安全权限

上传后的文件权限继承系统默认设置,没有显式设置文件权限(如移除执行权限)

未限制文件大小

可以恶意上传大文件、Zip炸弹等使磁盘空间耗尽

针对漏洞点修复

1.文件名可控/目录遍历

可以通过生成随机名存入服务器这个方法去解决这个问题

路径遍

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/vuls/434543.html
如有侵权请联系:admin#unsafe.sh