可能很多人不知道什么是MIME?
不过没关系,那你一定听说过文件内容类型或者说通过抓包你一定听说过 Content-Type: text/html 这种类似的,其实,这就是MIME。下面再给大家简单说说吧!
MIME((Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式每个MIME类型由两部分组成,前面是数据的大类别,例如声音 audio、图象 Image等,后面定义具体的种类。
常见的MME类型,例如:
超文本标记语言文本 .html,html text/htm
普通文本 .txt text/plain
RTF文本. rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 . jpg image/jpeg
一、MIME验证 示例代码
mime.php
//文件上传漏洞演示脚本之MIME验证
$uploaddir = 'uploads/';
if (isset($_POST['submit'])) {
if (file_exists($uploaddir)) {
if (($_FILES['upfile']['type'] == 'image/gif') || ($_FILES['upfile']['type'] == 'image/jpeg') ||
($_FILES['upfile']['type'] == 'image/png') || ($_FILES['upfile']['type'] == 'image/bmp')
) {
if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploaddir . '/' . $_FILES['upfile']['name'])) {
echo '文件上传成功,保存于:' . $uploaddir . $_FILES['upfile']['name'] . "\n";
}
} else {
echo '文件类型不正确,请重新上传!' . "\n";
}
} else {
exit($uploaddir . '文件夹不存在,请手工创建!');
}
//print_r($_FILES);
}
?>
/p>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
文件上传漏洞演示脚本--MIME验证实例文件上传漏洞演示脚本--MIME验证实例
请选择要上传的文件:
二、文件上传漏洞“MIME验证”绕过方法
我们还是直接用上面的示例代码来本地测试一下,这里照样会用到抓包工具,我还是以 BurpSuite抓包工具来给大家演示一下;
关于如何判断服务端是MIME验证?这个我们可以多上传几次来测试即可!
1、MIME验证绕过方法也很简单,只需要直接更改上传数据包中的 Content-type 即可!
注意:MIME类型(Content-Type)和文件后缀这是两码事,千万不要搞混合了。