文件上传漏洞-原理篇

目录

第1章 文件上传漏洞基础

1.1 漏洞概述

1.2 漏洞成因

1.3 漏洞危害

1.4 漏洞利用姿势

第2章 文件上传漏洞检测与绕过

2.1 前端检测和绕过

2.2 服务器端检测和绕过

第3章 文件上传漏洞防御


第1章 文件上传漏洞基础

1.1 漏洞概述

文件上传是很多站点常用的功能,比如上传图片、视频、文档等,常在评论功能区、头像修改、提交文档等场景下出现。

文件上传漏洞是指用户利用站点文件上传功能,上传了一个可执行的脚本文件(asp、aspx、php、jsp等),并通过执行此脚本文件获得了执行服务器端命令的能力。恶意脚本文件又称webshell(网页后门),具有强大的功能,如查看服务器目录/文件、执行系统命令等。

1.2 漏洞成因

  1. 站点开放了文件上传功能,但却对上传的文件没有进行足够的限制
  2. 程序开发部署时,没有考虑到系统特性、过滤不严格
  3. 站点服务器存在解析漏洞,被黑客利用后导致可以上传任意文件

1.3 漏洞危害

  1. 文件上传漏洞最直接的威胁就是上传任意文件,包括恶意脚本、可执行程序等
  2. 如果站点服务器用于保存上传文件的目录具有执行权限,恶意文件被执行后黑客可获取服务器命令执行能力,导致站点沦陷
  3. 如果攻击者通过其他漏洞进行提权操作,拿到系统管理员权限,那么直接导致服务器沦陷
  4. 同服务器下的其他网站无一幸免,均会被攻击者控制(旁站攻击)

1.4 漏洞利用姿势

  1. 直接上传可执行文件,如PHP、JSP、ASP等,然后利用webshell工具连接可执行文件,从而获取服务器命令执行权限,常见webshell工具有菜刀、蚁剑等。
  2. 配合文件包含漏洞写shell

第2章 文件上传漏洞检测与绕过

文件上传漏洞的检测,一般有两个思路,一是在web前端借助JavaScript来实现,二是在后台服务器进行检测,本章节将对这两种检测方式进行介绍,并讲解如何绕过这些检测来达到恶意文件上传的目的。

2.1 前端检测和绕过

1、检测原理

使用javascript脚本语言,先将上传的文件名转换成小写(toLowerCase()函数),然后通过substr()函数获取文件名的后缀,最后匹配预定义的白名单,如果后缀名在白名单之内,则允许上传,否则不允许上传。 

一、上传表单

<form class="upload" method="post" enctype="multipart/form-data"  action="">
     <input class="uploadfile" type="file"  name="uploadfile" onchange="checkFileExt(this.value)"/><br />
     <input class="sub" type="submit" name="submit" value="开始上传" />
</form>

二、Javascript检测文件
<script>
    function checkFileExt(filename)
    {
        var flag = false; 
        var arr = ["jpg","png","gif","jpeg"]; 
        var index = filename.lastIndexOf(".");
        var ext = filename.substr(index+1);     //取出上传文件的扩展名
        for(var i=0;i<arr.length;i++)     //比较
        {
            if(ext == arr[i])
            {
                flag = true;     //一旦找到合适的,立即退出循环
                break;
            }
        }
        if(!flag)     //条件判断
        {
            alert("上传的文件不符合要求,请重新选择!");
            location.reload(true);
        }
    }
</script>

2、绕过手段 

由于服务器端没有对文件做任何检测,所以只要绕过前端JavaScript的校验就可以上传WebShell 

  1. 禁用浏览器Javascript解析器:以FireFox为例,地址栏输about:config-->找到javascript.enabled并将其关闭(默认开启)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值