渗透测试|【文件上传绕过】——后端检测_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检测:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

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进行对比,如果符合要求就允许上传这个文件。
渗透测试|【文件上传绕过】——后端检测_MIME-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的文件:
内容:

渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

2、上传1.php文件,发现文件上传失败:
【渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞】渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

3、浏览器开启代理,通过burpsuite抓包,我们发现,浏览器对我们上传的文件MIME-TYPE类型进行了标记,上传到服务器和检测脚本源码中的白名单进行对比,没有找到符合条件的所以会上传失败:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

4、下面我们在burpsuite里面,对content-type字段进行修改,修改为符合的条件,发包并关闭数据拦截功能:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

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

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

2.?DVWA(medium级别)
1、安全级别设置为Medium级别
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

2、打开burpsuite流量拦截功能:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

3、选择1.php文件,开启浏览器代理功能,并上传文件:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

4、修改文件的MIME类型,发包, 关闭流量拦截功能:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

5、关闭浏览器的代理,并复制URL进行访问:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

6、访问页面,可以解析为脚本文件:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

3.?Pikachu-MIMETYPE
1、进入Pikachu-MIMETYPE
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

2、打开burpsuite流量拦截功能:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

3、选择1.php文件,开启浏览器代理功能,并上传文件:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

4、修改文件的MIME类型,发包, 关闭流量拦截功能:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

5、关闭浏览器的代理,并复制URL进行访问:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

6、访问页面,可以解析为脚本文件:
渗透测试|【文件上传绕过】——后端检测_MIME-TYPE检测漏洞
文章图片

    推荐阅读