上传漏洞科普[3]-MIME验证

来源:互联网 发布:移除数组中的重复元素 编辑:程序博客网 时间:2024/06/09 16:47

昨天本站发表了文件上传漏洞之JS验证的演示代码,今天我们讨论MIME验证。

关于MIME

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

更详细的介绍请访问这里:

MIME类型-服务端验证上传文件的类型

目录验证实例代码

<?php   /**    * Created by 独自等待   * Date: 14-1-22    * Time: 下午8:35   * Name: upload2.php    * 独自等待博客:http://www.waitalone.cn/    */  //文件上传漏洞演示脚本之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);   }   ?>   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <html xmlns="http://www.w3.org/1999/xhtml">   <head>       <meta http-equiv="Content-Type" content="text/html;charset=gbk"/>       <meta http-equiv="content-language" content="zh-CN"/>       <title>文件上传漏洞演示脚本--MIME验证实例</title>   <body>   <h3>文件上传漏洞演示脚本--MIME验证实例</h3>       <form action="" method="post" enctype="multipart/form-data" name="upload">       请选择要上传的文件:<input type="file" name="upfile"/>       <input type="submit" name="submit" value="上传"/>  </form>   </body>  </html> 

 

此代码严格意义上不算是目录验证问题,只是由于上传代码方面的问题,上传文件保存路径是客户端提交上去的,这样我们就很好绕过了。

MIME验证绕过方法:

关于如何判断服务端是MIME验证,这个我们可以多上传几次来测试即可,那么如何绕过呢? 直接更改上传数据包中的Content-type即可。

文件上传漏洞演示脚本
【via@独自等待】

0 0
原创粉丝点击