• 从零开始学安全(四十)●上传文件MIME类型绕过漏洞防御


    MIME检测原理

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

    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.
    ";
    echo "File path is ".$uploadfile;
    } 
    
    else
    {
    echo "File uploading failed.
    ";
    }

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

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

    • 根据攻击原理,有以下几点应该注意:

    • 1:文件上传的目录设置为不可执行 只要web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此此点至关重要。实际中,很多大型网站的上传应用,文件上传后会放到独立的储存上,做静态处理。但对一些小应用,如果存在上传功能,则仍需要多加关注

    • 2:判断文件类型: 判断文件类型时,应结合MIME Type、后缀检查等方式。推荐使用白名单,黑名单的方式已经无数次被证明不可靠。此外,针对图片处理,可以使用亚索函数或者resize函数,在处理图片的同事破坏掉图片中可能包含的HTML代码

    • 3:使用随机数改写文件名和文件路径 文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用使用随机函数改写了文件名和路径,将极大增加攻击成本。与此同时,像1.php.rar.rar、或者1.xml这种文件,都因为文件名被改写而无法成功实施攻击

  • 相关阅读:
    matlab实现插值法sin函数
    matlab实现共轭梯度法、多元牛顿法、broyden方法
    matlab实现雅可比、高斯塞德尔、后项误差计算
    matlab实现高斯消去法、LU分解
    matlab实现不动点迭代、牛顿法、割线法
    matlab实现的嵌套乘法、高精度、二分法
    knn手写识别
    python笔记
    动态语言
    Spyder 快捷键
  • 原文地址:https://www.cnblogs.com/feizianquan/p/10632959.html
Copyright © 2020-2023  润新知