【文件上传绕过】——后端检测_MIME-TYPE检测漏洞

一、实验目的:

1、通过本次实验掌握MIME检测的原理。
2、通过upload-labs-master闯关游戏,掌握MIME检测绕过技术。

二、工具:

BurpSuite
火狐/谷歌浏览器

三、实验环境:

靶 机: windows10虚拟机
      upload-labs-master闯关游戏
      DVWA(Medium级别)闯关游戏
      Pikachu-MIMETYPE闯关游戏
      phpstudy2018搭建网站

攻击机: 物理机

四、漏洞说明:

1. 什么是MIME:

  MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。

绕过上传限制-服务端绕过MIME检测:

2. 常见的MIME类型:

text/plain (纯文本)
text/html (HTML文档)
text/javascript (js代码)
application/xhtml+xml (XHTML文档)
image/gif (GIF图像)
image/jpeg (JPEG图像)
image/png (PNG图像)
video/mpeg (MPEG动画)
application/octet-stream (二进制数据)
application/pdf (PDF文档)

3. 检测方式:

  在文件上传过程中,服务端会针对我们的上传的文件生成一个数组,这个数组其中有一项就是这个文件的类型file_type;服务端对文件进行检测时,就是通过检测脚本中的黑白名单和这个数组中的file_type进行对比,如果符合要求就允许上传这个文件。

在这里插入图片描述

4. MIME绕过的原理:

  部分Web应用系统判定文件类型是通过content-type字段,黑客可以通过抓包,将content-type字段改为常见的图片类型,如image/gif,从而绕过校验。

五、实验过程:

1. upload-labs闯关游戏(Pass-02):

页面源码:

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {  // 这里通过文件上传时数组中的file_type值来进行MIME类型判断,如果MIME类型存在的话,执行一步操作;
            $temp_file = $_FILES['upload_file']['tmp_name']; //如果MIME类型存在的话,获取临时文件的位置;
            $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'] //构造文件转存路径及文件名;      
            if (move_uploaded_file($temp_file, $img_path)) {  //对这个临时文件进行转存; 
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '文件类型不正确,请重新上传!';
        }
    } else {
        $msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
    }
}

检测过程:判断文件是否存在-->存在的话就对文件的MIME-TYPE进行检测-->MIME-TYPE检测通过后,对文件进行转存。

通过上面的源码我们可以看到,源码对我们上传的MIME-TYPE类型进行检测,我们可以通过burpsuite抓包修改为符合上面验证的MIME-TYPE类型进行绕过。

1、创建一个1.php的文件:
内容:

<?php phpinfo();?>

在这里插入图片描述

2、上传1.php文件,发现文件上传失败:



3、浏览器开启代理,通过burpsuite抓包,我们发现,浏览器对我们上传的文件MIME-TYPE类型进行了标记,上传到服务器和检测脚本源码中的白名单进行对比,没有找到符合条件的所以会上传失败:

4、下面我们在burpsuite里面,对content-type字段进行修改,修改为符合的条件,发包并关闭数据拦截功能:


5、回到浏览器,关闭浏览器的代理,右击复制图片链接:
在这里插入图片描述

6、访问复制的链接,发现可以进行解析:
在这里插入图片描述

2. DVWA(medium级别)

1、安全级别设置为Medium级别

2、打开burpsuite流量拦截功能:

3、选择1.php文件,开启浏览器代理功能,并上传文件:

4、修改文件的MIME类型,发包, 关闭流量拦截功能:

5、关闭浏览器的代理,并复制URL进行访问:

6、访问页面,可以解析为脚本文件:

3. Pikachu-MIMETYPE

1、进入Pikachu-MIMETYPE

2、打开burpsuite流量拦截功能:

3、选择1.php文件,开启浏览器代理功能,并上传文件:

4、修改文件的MIME类型,发包, 关闭流量拦截功能:

5、关闭浏览器的代理,并复制URL进行访问:

6、访问页面,可以解析为脚本文件:

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值