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

文章目录

    • 一、实验目的:
    • 二、工具:
    • 三、实验环境:
    • 四、漏洞说明:
      • 1. 什么是MIME:
      • 2. 常见的MIME类型:
      • 3. 检测方式:
      • 4. MIME绕过的原理:
    • 五、实验过程:
      • 1. upload-labs闯关游戏(Pass-02):
      • 2. `DVWA(medium级别)`:
      • 3. `Pikachu-MIMETYPE`:

一、实验目的:

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的文件:
内容:

 phpinfo();?>

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第1张图片

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

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第2张图片
【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第3张图片
3、浏览器开启代理,通过burpsuite抓包,我们发现,浏览器对我们上传的文件MIME-TYPE类型进行了标记,上传到服务器和检测脚本源码中的白名单进行对比,没有找到符合条件的所以会上传失败:
【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第4张图片
4、下面我们在burpsuite里面,对content-type字段进行修改,修改为符合的条件,发包并关闭数据拦截功能:

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第5张图片
5、回到浏览器,关闭浏览器的代理,右击复制图片链接:
【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第6张图片【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第7张图片

6、访问复制的链接,发现可以进行解析:
【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第8张图片

2. DVWA(medium级别)

1、安全级别设置为Medium级别
【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第9张图片

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

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第10张图片

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

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第11张图片

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

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第12张图片

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

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第13张图片

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第14张图片

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

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第15张图片

3. Pikachu-MIMETYPE

1、进入Pikachu-MIMETYPE

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第16张图片

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

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第17张图片

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

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第18张图片

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

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第19张图片

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

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第20张图片

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第21张图片

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

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞_第22张图片

你可能感兴趣的:(渗透测试,web,service,网络安全,渗透测试,php)