上传文件漏洞(上传绕过)

0x00 漏洞概述

任意文件上传漏洞主要是由于程序员在开发文件上传功能时,没有考虑对文件格式后缀的合法性进行校验或只考虑在应用前端(Web 浏览器端)通过 javascript 进行后缀校验,攻击者可上传一个包含恶意代码的动态脚本(如 jsp、asp、php、aspx 文件后缀)到服务器上,攻击者访问该脚本时服务器将对包含恶意代码的动态脚本解析,最终执行相应的恶意代码。该漏洞最终将可能直接影响应用系统的服务器安全,攻击者可通过所上传的脚本完全控制服务器。

 

0x01测试方法

对文件上传页面进行测试,有多种上传测试方式判断是否存在任意文件上传漏洞。

  

方式一:直接上传

 在上传过程中,直接选择动态脚本后缀的文件,如 asp、php、jsp、aspx 等文件格式,观察是否上传成功。

方式二:绕过JS上传

 当上传页面在前端采用 javascript 进行文件后缀限制时,可通过 HTTP 抓包工具进行改包上传,如上传  jpg  后缀,通过HTTP 抓包工具捕捉到以下请求数据包,将数据包的  filename  参数值从  oneword_pass.jpg  修改为  oneword_pass.php  并重新进行上传提交即可绕过javascript 验证。

 

 

 

方式三:截断后缀上传

 部分上传功能在对后缀名进行验证时存在缺陷,导致在文件写入过程中产生错误,导致可通过十六进制截断符(%00)对后缀进行截断。如下图,上传处理时将对检测到%00 并对.jpg 字符串进行截断删除,最终文件名为 oneword_pass.php 导致可成功上传动态脚本到服务器上。

 方式四:绕过 Content-Type 检查上传

部分上传页面只对文件类型进行验证,导致可通过改包的方式上传动态脚本到服务器上。如下图,通过修改 Content-Type 的参数值为 image/jpg,程序将认为本次提交的为图片格式类型,并不进行后缀验证,最终成功绕过 Content-Type 检查上传动态脚本到服务器上。

 

0x02防护思路

1、前端,加强文件检查过滤,相关强度可以参考DVWA等级源码。

2、过程中,针对上传文件进一步做处理,如图片的价水印、缩略图,无异常后才保存到后台;针对文件命名做限制,须由系统生成,不允许用户自定义。

3、后台,限制上传文件目录无法直接访问,设置该目录不解析jsp等脚本语言。

 

posted @ 2018-09-21 01:21  i11USi0n  阅读(2630)  评论(0编辑  收藏  举报