51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

假设一个Web应用存在文件上传漏洞,允许上传任意文件,但服务器通过检查文件扩展名(如.jpg)来限制,同时检查MIME类型(如image/jpeg)。请详细说明如何构造一个文件,使其既满足扩展名检查,又欺骗MIME类型检查,从而实现任意文件上传并执行(比如上传一个WebShell)。

360助理安全研究实习生(漏洞挖掘与利用)难度:中等

答案

1) 【一句话结论】:通过构造文件内容开头为合法的MIME类型声明(文件头),使服务器在检查文件扩展名后,读取文件头判断MIME类型时匹配白名单,从而绕过MIME检查,实现任意文件上传并执行。

2) 【原理/概念讲解】:老师口吻解释关键概念。
文件上传时,服务器对文件的处理逻辑通常包含“文件扩展名检查”和“MIME类型检查”。文件扩展名(如.jpg)是文件名的后缀,用于快速分类;MIME类型(如image/jpeg)是文件内容开头的声明(即文件头),用于精确识别文件类型。
漏洞核心在于服务器对两者的检查顺序或验证逻辑存在缺陷:

  • 服务器先检查文件扩展名是否在白名单(如.jpg),再读取文件内容前若干字节(如20字节)作为MIME类型。
  • 若文件头被恶意构造为合法的MIME类型(如Content-Type: image/jpeg),即使文件内容是WebShell,也能通过MIME检查。
    类比:就像身份证上的“职业”字段和实际工作内容,系统先看职业是否为“教师”,再检查工作内容是否为教学,但如果工作内容开头写“教师”的MIME头,就能骗过检查。

3) 【对比与适用场景】:

检查顺序检查位置验证逻辑使用场景
扩展名优先文件名后缀检查是否在白名单(如.jpg)传统Web服务器,快速过滤
MIME优先文件内容前N字节读取文件头判断MIME类型更严格的验证,但易被文件头欺骗
混合验证先扩展名,再MIME两者都匹配才允许中间状态,易被文件头欺骗

4) 【示例】:
构造文件内容(伪代码):

Content-Type: image/jpeg
<?php eval($_GET['cmd']); ?>

文件名:test.jpg
上传请求示例(POST,form-data):

  • name: file, filename: test.jpg, content: [文件内容]
    服务器处理时,读取文件头前20字节为Content-Type: image/jpeg,匹配,允许上传并执行WebShell。

5) 【面试口播版答案】:
面试官您好,针对文件上传漏洞,核心思路是通过构造文件头(MIME类型头)来欺骗MIME检查。具体来说,服务器通常先检查文件扩展名是否在白名单(如.jpg),然后读取文件内容前若干字节作为MIME类型。如果文件头被设置为合法的MIME类型(比如image/jpeg),即使文件内容是WebShell,也能通过检查。比如构造一个文件,开头是Content-Type: image/jpeg,后面跟着PHP WebShell代码,文件名是test.jpg,上传后服务器会认为MIME匹配,从而执行WebShell。

6) 【追问清单】:

  • 问:服务器检查文件头时,具体读取多少字节?
    答:通常默认读取前20-30字节,构造文件头时需确保长度足够。
  • 问:如果服务器同时检查文件头和扩展名,如何处理?
    答:需同时满足两者,比如文件头为image/jpeg,扩展名为.jpg,这样两者都匹配。
  • 问:如何绕过更严格的MIME类型验证(如服务器校验文件头完整内容)?
    答:构造完整的MIME头(如Content-Type: image/jpeg; charset=utf-8),确保服务器解析正确。
  • 问:文件内容中的WebShell是否会被服务器解析?
    答:只要文件头正确,服务器会按MIME类型处理,比如PHP文件会被PHP解析器执行。
  • 问:文件扩展名检查是否在MIME检查之前?
    答:通常先检查扩展名,再检查MIME,所以扩展名必须符合白名单。

7) 【常见坑/雷区】:

  • 文件头长度不足:服务器只读取前10字节,构造的MIME头不够长,导致解析失败。
  • 文件头格式错误:比如缺少冒号或空格,导致服务器解析为无效MIME类型。
  • 扩展名与MIME不匹配:比如文件头是image/jpeg,但扩展名是.php,服务器可能先检查扩展名,发现不匹配,导致失败。
  • 文件内容编码问题:比如BOM(字节顺序标记)导致文件头被截断,服务器无法正确读取MIME类型。
  • 服务器对文件头的白名单校验:部分服务器会校验文件头是否在白名单,此时需构造不在白名单但符合验证逻辑的文件头。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1