MIME类型绕过漏洞

实验环境
  • 操作机:

    Windows XP
    
    • 目标机:Windows 2003
    • 目标网址:www.test.com
实验目的
  • 掌握上传绕过服务端MIME的原理
  • 掌握上传绕过服务端MIME的方法
实验工具
  • Burp Suite: 是用于攻击web 应用程序的集成平台。它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。所有的工具都共享一个能处理并显示HTTP 消息,持久性,认证,代理,日志,警报的一个强大的可扩展的框架,本次试验主要用到此软件的Proxy(代理)功能
  • 中国菜刀:是一款专业的网站管理软件,用途广泛,使用方便,小巧实用。只要支持动态脚本的网站,都可以用中国菜刀来进行管理,本次试验主要用到其动态脚本管理功能
实验内容

MIME

MIME:客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。web服务器使用MIME来说明发送数据的种类, web客户端使用MIME来说明希望接收到的数据种类。

MIME检测原理

服务端MIME类型检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法的。

php示例代码:

<?php
if($_FILES['userfile']['type'] != "image/gif") { 
//检测Content-type
//当上传文件的type不为`image/gif`时,程序不执行文件保存操作,直接退出。
//当上传文件的type是`image/gif`时,程序跳出if语句,执行文件保存操作。
echo "Sorry, we only allow uploading GIF images";
exit;
}
$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) 
{
echo "File is valid, and was successfully uploaded.\n";
echo "File path is ".$uploadfile;
} 

else
{
echo "File uploading failed.\n";
}
?>

示例代码的功能是服务端用来处理文件上传的,在第二行中if语句对上传文件的type判断是否为image/gif

在代码中检测的type值,对应http包中的字段Content-Type的值,也就是所我们可以伪装上传文件的type值,来绕过服务端的MIME检测

实验步骤
步骤1:上传正常图片和一句话

快速查找实验工具

  • 打开桌面 Everything 搜索工具,输入实验工具名称,右击选择“打开路径”,跳转实验工具所在位置。
  • 以查找BURP为例为大家演示。

Alt text

上传正常的图片以及上传一句话,查看区别,准备一个普通的图片,使用*.jpg在电脑上进行搜索,可以看到很多图片,复制一张图片放到桌面上,改名为tupian.jpg

Alt text

Alt text

Alt text

打开上传地址,选取准备好的图片,上传图片。

小i提示:

  • 上传地址就是可以上传文件的地方
  • 本次实验用的是一个测试网址http://www.test.com 作为目标网站

Alt text

上传成功后,观察返回的页面信息。

小i提示:

  • 观察红字部分(上传是否成功)
  • 观察蓝字部分(上传后文件的路径)

Alt text

步骤2:修改MIME绕过上传检测

我们继续上传,在这之前开启浏览器代理进行抓包,查看正常图片的MIME值为多少:

使用BurpLoader修改文件的类型来绕过其防御。首先打开BurpLoader,选择 Proxy->Options ,设置BurpLoader代理地址,默认为127.0.0.1、端口:8080

Alt text

设置IE的代理地址,勾选为 LAN 使用代理服务器,修改下面的代理地址以及端口(设置与在BurpLoader设置的代理地址相同:127.0.0.1、端口:8080)。

小i提示:

  • 不同浏览器设置代理的方法不相同, 此处我们以IE浏览器为例,首先点击右上角的工具-internet选项-连接-局域网设置-代理服务器勾选并设置。

Alt text

Alt text

Alt text

Alt text

选择 BurpLoader 的 Proxy->Intercept 将抓包的状态从关闭改为打开。

Alt text

在浏览器上传PHP文件,回到BurpLoader看到MIME信息(Content-type)为text/plain

Alt text

我们将Content-type后的内容修改为image/jpg

这样服务器就会认为这是一个图片文件了,接下来关闭抓包按钮,这样就成功的绕过MIME验证。

步骤3:获取WEBShell权限

上传成功后,我们需要访问文件,这时可直接复制文件路径(File Name后面的内容,即是一句话的路径),将复制的地址粘贴至网站地址后面,从而构造访问地址,并复制构造好的地址。

Alt text

使用中国菜刀软件打开webshell地址

打开中国菜刀软件并填入复制的访问地址,填入你设定的密码,这里设置的密码是1,选择脚本类型为PHP,单击添加按钮,最后我们双击指定条目后的可以看到目标网站的目录,这样我们就成功获取到目标网站的WEBShell权限。

Alttext

Alttext

Alttext

实验结果总结
  • 文件上传功能本身没有错,只是在一些条件下会被攻击者利用,从而成为漏洞,根据攻击原理,有以下几点应该注意:
  • 1:文件上传的目录设置为不可执行 只要web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此此点至关重要。实际中,很多大型网站的上传应用,文件上传后会放到独立的储存上,做静态处理。但对一些小应用,如果存在上传功能,则仍需要多加关注
  • 2:判断文件类型: 判断文件类型时,应结合MIME Type、后缀检查等方式。推荐使用白名单,黑名单的方式已经无数次被证明不可靠。此外,针对图片处理,可以使用亚索函数或者resize函数,在处理图片的同事破坏掉图片中可能包含的HTML代码
  • 3:使用随机数改写文件名和文件路径 文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用使用随机函数改写了文件名和路径,将极大增加攻击成本。与此同时,像1.php.rar.rar、或者1.xml这种文件,都因为文件名被改写而无法成功实施攻击

1、当页面返回“File Type Error”时,则说明你上传的文件类型不正确,网站对文件类型进行了相关验证。

A

第1题:Burpsuite默认端口是?

8081

8000

80

8080

d

第2题:下面的content-type那一个类型不能在本实验中能上传?

image/jpeg

image/png

image/jpg

image/gif

d

flag : key{h4d6j9k3}

第4题:以下哪个不是PHP一句话木马?
<?php phpinfo();?> <?php eval_r($_POST[sb])?> <?php assert($_POST[sb]);?>

a

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值