Pikachu靶场通关之Unsafe Fileupload
字数 1075 2025-08-15 21:33:32

不安全的文件上传漏洞(Unsafe Fileupload)全面解析

一、漏洞概述

不安全的文件上传漏洞(Unsafe Fileupload)是Web应用系统中常见的高危漏洞,当系统对用户上传的文件缺乏足够的安全验证时,攻击者可能上传恶意文件(如webshell)从而获取服务器控制权。

二、漏洞原理

文件上传功能常见于各种Web应用(如头像上传、附件上传等)。正常情况下,后台应对上传文件进行严格验证:

  • 文件类型、后缀名、大小验证
  • 文件上传方式验证
  • 文件重命名处理
  • 隐藏上传后的文件路径

漏洞产生原因:当系统对上传文件缺乏验证或验证不严谨时,攻击者可上传恶意文件。

三、漏洞利用方式

1. 前端验证绕过(Client Check)

示例代码

function checkFileExt(filename) {
    var flag = false;
    var arr = ["jpg","png","gif"];
    var index = filename.lastIndexOf(".");
    var ext = filename.substr(index+1);
    for(var i=0;i<arr.length;i++) {
        if(ext == arr[i]) {
            flag = true;
            break;
        }
    }
    if(!flag) {
        alert("上传的文件不符合要求,请重新选择!");
        location.reload(true);
    }
}

绕过方法

  • 禁用浏览器JavaScript功能
  • 使用Burp Suite等工具拦截修改请求

2. MIME类型验证绕过

常见MIME类型

  • HTML: text/html
  • 纯文本: text/plain
  • GIF: image/gif
  • JPEG: image/jpeg

绕过方法

  1. 上传php文件并抓包
  2. 修改Content-Type为合法图片类型(如image/jpeg)
  3. 放行请求

3. getimagesize验证绕过

服务器通过检查文件头判断是否为真实图片。

绕过方法一:添加图片文件头

  1. 在php文件开头添加GIF89a等图片标识
  2. 上传修改后的文件

绕过方法二:图片马制作

copy 1.png/b + phpinfo.php/a 2.png

利用方法:结合文件包含漏洞执行图片马

http://x.x.x.x/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2020/10/20/5936185f8e5245666f2586884965.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

四、漏洞危害

  • 上传Web脚本语言导致代码执行
  • 上传crossdomain.xml控制Flash行为
  • 上传病毒木马文件诱骗用户执行
  • 上传恶意图片用于钓鱼攻击
  • 直接上传webshell完全控制系统

五、防御措施

  1. 文件上传路径检查

    • 避免0x00截断
    • 防止IIS6.0文件夹解析漏洞
    • 防止目录遍历
  2. 文件扩展名检测

    • 白名单方式验证合法后缀
    • 防止服务器以非预期格式解析文件
  3. MIME类型验证

    • 严格检查Content-Type头
    • 与实际文件内容比对
  4. 文件内容检测

    • 检查文件头是否符合类型
    • 扫描文件中是否包含恶意代码
  5. 图片二次渲染

    • 对上传图片进行重新渲染
    • 消除嵌入的恶意代码
  6. 文件重命名

    • 使用随机字符串或时间戳重命名
    • 防止攻击者直接访问上传文件

六、最佳实践

  1. 使用白名单而非黑名单验证
  2. 结合多种验证方式(后缀+MIME+内容)
  3. 文件存储在Web根目录外
  4. 设置上传目录无执行权限
  5. 对上传文件进行病毒扫描
  6. 记录上传日志便于审计

通过以上措施可有效防范不安全的文件上传漏洞,保护Web应用安全。

不安全的文件上传漏洞(Unsafe Fileupload)全面解析 一、漏洞概述 不安全的文件上传漏洞(Unsafe Fileupload)是Web应用系统中常见的高危漏洞,当系统对用户上传的文件缺乏足够的安全验证时,攻击者可能上传恶意文件(如webshell)从而获取服务器控制权。 二、漏洞原理 文件上传功能常见于各种Web应用(如头像上传、附件上传等)。正常情况下,后台应对上传文件进行严格验证: 文件类型、后缀名、大小验证 文件上传方式验证 文件重命名处理 隐藏上传后的文件路径 漏洞产生原因 :当系统对上传文件缺乏验证或验证不严谨时,攻击者可上传恶意文件。 三、漏洞利用方式 1. 前端验证绕过(Client Check) 示例代码 : 绕过方法 : 禁用浏览器JavaScript功能 使用Burp Suite等工具拦截修改请求 2. MIME类型验证绕过 常见MIME类型 : HTML: text/html 纯文本: text/plain GIF: image/gif JPEG: image/jpeg 绕过方法 : 上传php文件并抓包 修改Content-Type为合法图片类型(如image/jpeg) 放行请求 3. getimagesize验证绕过 服务器通过检查文件头判断是否为真实图片。 绕过方法一 :添加图片文件头 在php文件开头添加GIF89a等图片标识 上传修改后的文件 绕过方法二 :图片马制作 利用方法 :结合文件包含漏洞执行图片马 四、漏洞危害 上传Web脚本语言导致代码执行 上传crossdomain.xml控制Flash行为 上传病毒木马文件诱骗用户执行 上传恶意图片用于钓鱼攻击 直接上传webshell完全控制系统 五、防御措施 文件上传路径检查 避免0x00截断 防止IIS6.0文件夹解析漏洞 防止目录遍历 文件扩展名检测 白名单方式验证合法后缀 防止服务器以非预期格式解析文件 MIME类型验证 严格检查Content-Type头 与实际文件内容比对 文件内容检测 检查文件头是否符合类型 扫描文件中是否包含恶意代码 图片二次渲染 对上传图片进行重新渲染 消除嵌入的恶意代码 文件重命名 使用随机字符串或时间戳重命名 防止攻击者直接访问上传文件 六、最佳实践 使用白名单而非黑名单验证 结合多种验证方式(后缀+MIME+内容) 文件存储在Web根目录外 设置上传目录无执行权限 对上传文件进行病毒扫描 记录上传日志便于审计 通过以上措施可有效防范不安全的文件上传漏洞,保护Web应用安全。