代码编织梦想

1 MIME概述

1.1 概述

  1. 定义:MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型,是描述消息内容类型的因特尔标准。MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
  2. 意义:MIME设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。

1.2 文件格式

每个MIME类型由两部分组成,前面是数据的大类别,video、image、application、text、audio、multipart、message等,后面定义具体的种类。常见的MIME类型(通用型)如下表,更多类型请百度。

文件类型后缀名MIME
超文本标记语言文本.htmltext/html
xml文档.xmltext/xml
普通文本.txttext/plain
PDF文档.pdfapplication/pdf
Microsoft Word文件.wordapplication/msword
PNG图像.pngimage/png
GIF图形.gifimage/gif
JPEG图形.jpeg,.jpgimage/jpeg
au声音文件.auaudio/basic
MIDI音乐文件.mid, .midiaudio/midi, audio/x-midi
RealAudio音乐文件.ra, .ramaudio/x-pn-realaudio
MPEG文件.mpg,.mpegvideo/mpeg
AVI文件.avivideo/x-msvideo
GZIP文件.gzapplication/x-gzip
TAR文件.tarapplication/x-tar

1.3 检测与绕过

如果服务端代码是通过Content-Type的值来判断文件的类型,那么就存在被绕过的可能,因为Content-Type的值是通过客户端传递的,是可以任意修改的 。

2 实验简介

2.1 实验目的

掌握绕过MIME检测的方法,验证文件上传漏洞的存在。

2.2 实验环境

  1. 靶场:基于WAMP环境的upload-labs靶场,搭建过程可参考文章《基于WAMP环境的upload-labs漏洞测试平台搭建过程》。
  2. 攻击机:安装BurpSuite软件。

2.3 实验前准备

  1. 准备好一个文件,该文件可能是木马,也可能是其他任意文件,本实验以php探针作为测试文件,来验证是否存在文件上传漏洞以及绕过漏洞检测的方法。
  2. 文件名为:info.php,文件内容:<?php phpinfo();?>

3 实验过程

  1. 打开BurpSuite,在代理模块打开其自带浏览器。
    在这里插入图片描述
  2. 浏览器访问靶机,并打开第二关。点击选择文件,选择准备好的info.php,点击上传出现以下错误提示。
    在这里插入图片描述
  3. 查看源代码,判断是否存在JS检测。在52~56行,可以看到表单中有事件检测,但是没有找打对应的函数,应该是没有JS检测的。

<html>
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
	<link rel="icon" type="image/x-icon" href="/upload-labs/img/favicon.png" />  
	<title>upload-labs</title>
</head>
<link rel="stylesheet" type="text/css" href="/upload-labs/css/index.css">
<link rel="stylesheet" type="text/css" href="/upload-labs/css/prism.css">
<body>
	<div id="head">
		<a href="/upload-labs/"><img src="/upload-labs/img/logo.png"/></a>
		<div id="head_menu">
			<a id="handle_code" href="javascript:show_code()">显示源码</a>
			<a href="javascript:get_prompt()">查看提示</a>
			<a href="javascript:clean_upload_file()">清空上传文件</a>
		</div>
	</div>
	<div id="main"><div id="menu">     
	<ul id="menulist">         
		<li><a id="Pass-01" href="/upload-labs/Pass-01/index.php">Pass-01</a></li> 
		<li><a id="Pass-02" href="/upload-labs/Pass-02/index.php">Pass-02</a></li> 
		<li><a id="Pass-03" href="/upload-labs/Pass-03/index.php">Pass-03</a></li> 
		<li><a id="Pass-04" href="/upload-labs/Pass-04/index.php">Pass-04</a></li> 
		<li><a id="Pass-05" href="/upload-labs/Pass-05/index.php">Pass-05</a></li> 
		<li><a id="Pass-06" href="/upload-labs/Pass-06/index.php">Pass-06</a></li> 
		<li><a id="Pass-07" href="/upload-labs/Pass-07/index.php">Pass-07</a></li> 
		<li><a id="Pass-08" href="/upload-labs/Pass-08/index.php">Pass-08</a></li> 
		<li><a id="Pass-09" href="/upload-labs/Pass-09/index.php">Pass-09</a></li> 
		<li><a id="Pass-10" href="/upload-labs/Pass-10/index.php">Pass-10</a></li> 
		<li><a id="Pass-11" href="/upload-labs/Pass-11/index.php">Pass-11</a></li> 
		<li><a id="Pass-12" href="/upload-labs/Pass-12/index.php">Pass-12</a></li> 
		<li><a id="Pass-13" href="/upload-labs/Pass-13/index.php">Pass-13</a></li> 
		<li><a id="Pass-14" href="/upload-labs/Pass-14/index.php">Pass-14</a></li> 
		<li><a id="Pass-15" href="/upload-labs/Pass-15/index.php">Pass-15</a></li> 
		<li><a id="Pass-16" href="/upload-labs/Pass-16/index.php">Pass-16</a></li> 
		<li><a id="Pass-17" href="/upload-labs/Pass-17/index.php">Pass-17</a></li> 
		<li><a id="Pass-18" href="/upload-labs/Pass-18/index.php">Pass-18</a></li> 
		<li><a id="Pass-19" href="/upload-labs/Pass-19/index.php">Pass-19</a></li>
		<li><a id="Pass-20" href="/upload-labs/Pass-20/index.php">Pass-20</a></li>
        <li><a id="Pass-21" href="/upload-labs/Pass-21/index.php">Pass-21</a></li>
	</ul> 
</div>

<div id="upload_panel">
    <ol>
        <li>
            <h3>任务</h3>
            <p>上传一个<code>webshell</code>到服务器。</p>
        </li>
        <li>
            <h3>上传区</h3>
            <form enctype="multipart/form-data" method="post" onsubmit="return checkFile()">
                <p>请选择要上传的图片:<p>
                <input class="input_file" type="file" name="upload_file"/>
                <input class="button" type="submit" name="submit" value="上传"/>
            </form>
            <div id="msg">
                提示:文件类型不正确,请重新上传!            </div>
            <div id="img">
                            </div>
        </li>
            </ol>
</div>

</div>
		<div id="footer">
			<center>Copyright&nbsp;@&nbsp;<span id="copyright_time"></span>&nbsp;by&nbsp;<a href="http://gv7.me" target="_bank">c0ny1</a></center>
		</div>
		<div class="mask"></div>
		<div class="dialog">
		    <div class="dialog-title">&nbsp;<a href="javascript:void(0)" class="close" title="关闭">关闭</a></div>
		    <div class="dialog-content"></div>
		</div>		
</body>
<script type="text/javascript" src="/upload-labs/js/jquery.min.js"></script>
<script type="text/javascript" src="/upload-labs/js/prism.js"></script>
<script type="text/javascript" src="/upload-labs/js/prism-line-numbers.min.js"></script>
<script type="text/javascript" src="/upload-labs/js/prism-php.min.js"></script>
<script type="text/javascript" src="/upload-labs/js/index.js"></script>
</html>
  1. BurpSuite开启代理拦截功能,网页选择info.php文件,点击上传,可以看到BurpSuite成功拦截到请求,这意味着网页上JS并没有检测文件后缀名。在拦截的请求中,将Content-Type修改为image/png,点击forward,后续请求无需修改直接点击forward。
    在这里插入图片描述
  2. 可以看到请求发送成功,并收到后端的响应显示如下,由于该文件不是真的图片,因此显示失败。
    在这里插入图片描述
  3. 鼠标右键上图中红框位置(本该是显示图片的位置),点击“新建标签页打开”,可以看到在新的页面成功执行该文件,并返回探针信息内容。如果是其他页面语句,也将成功执行。
    在这里插入图片描述

4 总结

  1. 测试思路:前端JS→服务器端MIME类型。
  2. 掌握MIME绕过方法。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Fighting_hawk/article/details/123201551

i春秋:警惕您站上的mime类型绕过漏洞-爱代码爱编程

实验环境 实验环境 操作机:Windows XP 目标机:Windows 2003 目标网址:www.test.com实验工具:中国菜刀 burp 实验目的 MIME的作用:使客户端软件,Web服务器使用MIME来说明发送数据的种类, Web客户端使用MIME来说明希望接收到的数

文件上传 02 服务端检测绕过(mime类型检测)_网络安全打工人的博客-爱代码爱编程

本文记录文件上传学习过程,教程为 《Upload Attack Framework V1.0》 文件上传检测 客户端javascript 检测(通常为检测文件扩展名)服务端MIME 类型检测(检测Content

mime类型-服务端验证上传文件的类型的讨论_elf8848的博客-爱代码爱编程

      MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。       web服务器使用MIME来说明发送数据的种类, web客户端使用MIME来说明希望接收到的数据种类。       Tomcat的安装目录\conf\web.xml 中就定义了大

mime类型绕过漏洞_whatiwhere的博客-爱代码爱编程_mime绕过

实验环境 操作机: Windows XP 目标机:Windows 2003目标网址:www.test.com 实验目的 掌握上传绕过服务端MIME的原理掌握上传绕过服务端MIME的方法 实验工具 Bur

python资源大全 | 文件管理和 mime类型检测工具_程序员陈平安的博客-爱代码爱编程

一、imghdr (Python 标准库)检测图片类型。 价值   图像格式 'rgb'   SGI ImgLib文件 'gif'   GIF 87a和89a文件 'pbm'   便携位图文件 'pgm'   便携式灰度图文件 'ppm'   便携式像素映射文件 'tiff'   Tiff文件 'rast'   太阳栅格档案 'xbm'

文件上传漏洞--mime type-爱代码爱编程

不安全的文件上传漏洞概述: 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的

服务端检测绕过 MIME检测绕过-爱代码爱编程

常见的白名单 扩展名MIME TYPEjpgimage/jpegpngimage/pngtxttext/plainzipapplication/zipdocapplication/msword文件上传漏洞演示脚本–MIME验证实例 <?php //文件上传漏洞演示脚本之MIME验证 $uploaddir = 'uploads/';

文件上传(服务端MIME检测绕过)-爱代码爱编程

目录 Content-Type检测 Content-Type检测 HTTP协议规定了上传资源的时候在Header中加上一项文件的MIMETYPE,来识别文件类型,这个动作是由浏览器完成的,服务端可以检查此类型。不过这仍然是不安全的,因为HTTP header可以被发出者或者中间人任意的修改,不过加上一层防护也是可以有一定效果的。

【文件上传绕过】二、文件类型之MIME-TYPE检测-爱代码爱编程

文章目录 一、什么是MIME?二、常见MIME类型三、检测代码四、抓包修改MIME类型进行绕过 一、什么是MIME? MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打

php硬编码,PHP 使用硬编码检测文件 MIME-爱代码爱编程

很多系统重需要使用到文件上传功能,如果有人故意将文件的后缀名改成符合要求的文件,比如.exe改成.jpg文件,这样可以上传文件,但是却有别攻击的风险。我们可以根据文件的硬编码来检测文件的MIME类型,这样文件的类别就不会出错。 主要思路是读取文件头的钱4个字节,参考文件硬编码,进行匹对: namespace App\Services\Tools;

【文件上传绕过】——后端检测_MIME-TYPE检测漏洞-爱代码爱编程

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

文件上传之Apache解析漏洞和Mime检测绕过-爱代码爱编程

文章目录 Apache解析漏洞和Mime检测绕过1、解析漏洞2、Mime检测绕过burpsuite修改上传数据类型为image/jpeg修改文件头为GIF89a(jpg文件头)找到上传目录并访问 Apache解析漏洞和Mime检测绕过 1、解析漏洞 Apache是从右向左识别文件,例如文件名为ma.php.112,从最右位.112识别,若不