MIME验证与绕过
【实训目的】
1.熟悉MIME验证的方法;
2.掌握绕过MIME验证的方法。
【实训原理】
HTTP协议规定了上传资源的时候在HTTPHeader中加上一项文件的MIME
TYPE,来识别文件类型,这个动作是由浏览器完成的,服务端可以检查此类型。
不过这也不能保证上传文件的安全,因为HTTPHeader可以被中间人修改。
通过使用BurpSuite之类工具就可以篡改HTTPHeader中的Content-Type值,
使之成为后端程序允许的类型。
【实训步骤】
步骤1、登录DVWA系统
在DVWASecurity当中选择medium选项,并提交。然后选择upload菜单。
步骤2、查看服务器端源代码。
点击右下角的ViewSource按钮,可以看到服务器端源代码,如下所示:
?php
if(isset($_POST[Upload])){
$target_path=DVWA_WEB_PAGE_TO_ROOT.hackable/uploads/;
$target_path=$target_path.basename($_FILES[uploaded][name]);
$uploaded_name=$_FILES[uploaded][name];
$uploaded_type=$_FILES[uploaded][type];//获取MIME值
$uploaded_size=$_FILES[uploaded][size];
if(($uploaded_typeimage/jpeg)($uploaded_size100000)){
if(!move_uploaded_file($_FILES[uploaded][tmp_name],target_path))
{
echopre;echoYourimagewasnotuploaded.;echo/pre;
}else{
echopre;echo$target_path.succesfullyuploaded!;echo/pre;
}
}else{
echopreYourimagewasnotuploaded./pre;
}
}
?
通过源代码分析,应用程序采用的是MIME验证,仅接收jpeg格式的文件,
且文件小于100000字节。
步骤3、通过修改Content-Type值绕过MIME验证
(1)启动BurpSuite,启动代理功能,并在浏览器设置代理。具体步骤详见
“实训使用BurpSuite工具抓取HTTP数据包并解析”。
(2)访问DVWA系统,其请求将传递到BurpSuite代理,因此需要再
BurpSuite中多次点击Forward按钮,才会出现文件上传界面。在文件上传的界
面中,选择一个非jpeg文件,为jpeg,然后上传。试验中选择文件为test.php,
点击提交按钮,在BurpSuite会收到请求包,如下图所示:
图5-11BurpSuite截获的信息报文
在BurpSuite录中将Conent-Type值修改为image/jpeg,然后点击forward就
可绕过MIME验证。
【实训总结】
由于攻击者可以修改HTTPHeader中的Conten