# 什么是文件上传漏洞

文件上传漏洞(File Upload Vulnerability)是指网站或应用程序在处理用户上传的文件时,未进行充分的安全检查,导致攻击者可以上传恶意文件(如 Web Shell、病毒、木马等),从而获取服务器控制权或执行其他恶意操作。

# 文件上传漏洞的危害

  1. 远程代码执行(RCE)
    • 上传 Web Shell(如 PHP、JSP、ASP 等脚本),直接控制服务器。
    • 示例:上传 shell.php ,访问后可执行任意命令。
  2. 网站篡改
    • 上传恶意 HTML/JS 文件,进行钓鱼攻击或 XSS 攻击。
  3. 服务器入侵
    • 上传后门程序,获取服务器权限,进一步渗透内网。
  4. 拒绝服务(DoS)
    • 上传超大文件耗尽服务器存储空间或带宽。
  5. 数据泄露
    • 上传包含敏感信息的文件,如数据库备份、配置文件等。

# 常见的文件上传绕过技术

攻击者会尝试绕过文件上传限制,常见方法包括:

# 1. 修改文件扩展名(黑名单绕过)

  • 如果服务器仅禁止 .php ,攻击者可尝试:
    • .php5 , .phtml , .phar (PHP 可解析的扩展名)
    • .jpg.php (某些服务器可能只检查最后的后缀)

# 2. 修改 Content-Type

  • 服务器可能仅检查 Content-Type: image/jpeg ,攻击者可伪造:

    http

  • `POST /upload.php HTTP/1.1Content-Type: image/jpeg

`

# 3. 利用双扩展名或特殊字符

  • shell.php.jpg (某些解析漏洞可能仍执行 PHP 代码)
  • shell.php%00.jpg (空字节截断,旧版 PHP 可能忽略 .jpg

# 4. 利用解析漏洞

  • Apache/Nginx 解析漏洞
    • shell.php.xxx (某些配置可能仍解析为 PHP)
  • IIS 解析漏洞
    • shell.asp;.jpg (IIS 可能忽略分号后的内容)

# 5. 利用.htaccess 或 web.config 文件

  • 上传恶意 .htaccess (Apache)或 web.config (IIS)覆盖服务器配置,使图片文件被解析为 PHP。

    htaccess

  • AddType application/x-httpd-php .jpg


# 如何防御文件上传漏洞?

# 1. 白名单限制文件扩展名

  • 仅允许特定扩展名(如 .jpg , .png , .pdf ),拒绝可执行文件( .php , .jsp , .asp )。

# 2. 检查文件内容(MIME 类型、魔术字节)

  • 不仅检查扩展名,还要检查文件头(如 JPEG 文件应以 FF D8 FF 开头)。
  • 使用 file 命令或 PHP 的 finfo_file() 检测真实文件类型。

# 3. 重命名上传的文件

  • 使用随机文件名(如 a1b2c3d4.jpg ),避免攻击者直接访问恶意文件。

# 4. 限制文件大小

  • 防止攻击者上传超大文件导致 DoS 攻击。

# 5. 存储上传文件在非 Web 目录

  • 上传的文件应存储在无法直接访问的目录,并通过脚本读取(如 /uploads/ 禁止执行 PHP)。

# 6. 禁用危险函数(PHP 环境)

  • php.ini 中禁用危险函数:

    ini

  • disable_functions = exec, system, shell_exec, passthru

# 7. 使用 WAF(Web 应用防火墙)

  • 配置规则拦截恶意文件上传请求。
更新于

请我喝[茶]~( ̄▽ ̄)~*

麻糖 微信支付

微信支付

麻糖 支付宝

支付宝

麻糖 贝贝

贝贝