阅读 132

文件上传漏洞

目录

文件上传漏洞简介

文件上传漏洞就是利用某些代码缺陷来上传恶意木马等恶意文件到服务器进行资源获取或者控制

攻击者主要对文件上传漏洞的主要方式是:

  • 前端JS过滤绕过
  • 文件名过滤绕过
  • Content-Type恶意绕过

等等

上传漏洞类型

前端JS绕过

前端JS代码漏洞绕过的原理是:应用程序是在前端通过JS代码进行验证的,而并不是在后端进行验证,绕过前端的JS验证可以有效利用文件上传漏洞,进行木马的上传

构建环境

文件上传HTML界面:





    
    
    
    JS 文件绕过



    

请选择你要上传的文件:

文件上传PHP代码:

";
$uploaddir=‘uploads/‘;
if(isset($_POST[‘submit‘])){
    if(file_exists($uploaddir)){
        if(move_uploaded_file($_FILES[‘upfile‘][‘tmp_name‘],$uploaddir.‘/‘.$_FILES[‘upfile‘][‘name‘])){
            echo "文件保存成功。\n保存于:".$uploaddir.$_FILES[‘upfile‘][‘name‘];
        }else{
            exit("文件保存失败,请重新上传文件再试");
            echo "回到上传页面";
        }
    }
}
?>

文件上传js代码:

function checkfile() {
    var file = document.getElementsByName(‘upfile‘)[0].value;
    if (file == null || file == "") {
        alert("您选择的是空文件,请重新上传");
        return false;
    }
    var allowed_ext = ".jpg|.png|.gif|.bmp";
    var ext_name = file.substring(file.lastIndexOf("."));
    if (allowed_ext.indexOf(ext_name + "|") == -1) {
        var msg = "该文件类型不允许上传";
        alert(msg);
        return false;
    }
}

$_FILES()函数说明

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是表单的 input name,第二个下标可以是 "name"、"type"、"size"、"tmp_name" 或 "error"。如下所示:

  • $_FILES["file"]["name"] - 上传文件的名称
  • $_FILES["file"]["type"] - 上传文件的类型
  • $_FILES["file"]["size"] - 上传文件的大小,以字节计
  • $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
  • $_FILES["file"]["error"] - 由文件上传导致的错误代码

这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关允许哪些用户上传文件的限制。

漏洞分析

由于JS判定只发生在前端,有两个方法可以实现:

禁用浏览器的JS执行

在浏览器的设置里面可以禁用JS:


禁用之后,我们选择一个特殊格式的文件:

上传成功:

使用抓包软件修改拓展名传参

我们在传参的时候将文件的参数设置成允许上传的文件后缀
具体做法如下:

  • 将木马1.php文件的后缀名改成.jpg
  • 上传文件
  • 抓包
  • 将文件名改回成1.php


这样,我们的PHP代码就可以在服务器端执行了

修改前端JS代码绕过

我们修改前端js代码,即可上传PHP文件了(使用firebug等软件即可):

原文:https://www.cnblogs.com/Zeker62/p/15236656.html

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐