任意文件上传
摘要:通过本节介绍,让学生了解文件上传漏洞的原理、危害、绕过手法以及防御手段。
关键词:文件上传
一、文件上传漏洞简介
文件上传漏洞(File Upload Attack)是由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过Web 访问的目录上传任意PHP 文件,并能够将这些文件传递给 PHP 解释器,就可以在远程服务器上执行任意 PHP 脚本,一般只要能上传获取地址,可执行文件被解析就可以获取系统WebShell。
二、文件上传漏洞原理
网站WEB应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型时,就可以上传任意文件甚至是可执行文件后门。
三、文件上传漏洞危害
恶意文件传递给解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。根据网站使用及可解析的程序脚本不同,可以上传的恶意脚本可以是PHP、ASP、JSP、ASPX文件等。
四、上传点和绕过形式
文件上传常见点:
图 1 文件上传常见点
绕过类型:
图 2 文件上传绕过类型
常用绕过方式:
1)前端验证绕过
此种验证形式在很多网站、CMS都有使用,只在前端利用JS来做效验,采用禁用JS上传、抓包上传都可以绕过此处限制。
2).htaccess规则文件绕过
什么是.htaccess规则文件?.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本
入口)。提供了针对目录改变配置的方法,即在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。
概述来说,.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
在一些启用了.htaccess文件的网站上就可以使用此文件类型来绕过限制较全面的黑名单过滤。
先上传一个.htaccess文件,内容为:AddType application/x-httpd-php .aaa。然后再上传文件后缀为.aaa的文件,让其解析为php类型文件。上传成功后访问此上传文件就可以连接后台。
3)文件名后缀大小写混合绕过
在对后缀的判断中,如果只是对字符串进行单独的比较来判断是不是限制文件,可以采用后缀名大小写绕过形式。
4)%00截断绕过
前端大文件上传解决方案以上问题被绕过的根本原因是采用了一些有缺陷的黑名单限制,一般采用白名单的限制
会减少相当多的绕过问题产生,但是并不意味着一定安全,在某些没有处理严格的程序上,仍然可以采用截断绕过的形式。
我们来看这段上传的代码:
可以看出代码采用的白名单校验,只允许上传图片格式,理论上这个上传是不好绕过的。但是后面采用保存文件的时候,是路径拼接的形式,而路径又是从前端获取,所以我们可以采用在路径上截断。如下上传,显示文件路径中有个空格,这并不是真正意义上的空格,而是%00截断后显示成的空格。
图 3 采用%00截断
图 4 %00截断结果
绕过成功
5)文件头检测绕过
一些上传的地方会检测文件内容头判断是不是允许上传的文件类型,不同类型的文件文件头也是不一样的。
绕过方式:最简单的方法就是制作一张图片马,把脚本代码插入到图片文件的后面,这
样文件头依然是原文件的文件头。
6)黑名单校验绕过
很多网站对上传进行拦截的时候采取的是黑名单校验,当我们看到黑名单的时候就可以考虑采取修改后缀、截断等方式尝试绕过。
五、漏洞防御手段
1)代码未判断文件类型或者文件类型限制不完全,一般这种是黑名单或者没有限制,建议添加白名单限制参数数组,固定为图片或文本格式文件。
2)如果是使用WEB中间件存在上传,或者是CMS存在文件上传漏洞,根据官方建议安装补丁升级版本,或者使用官方推荐的临时修改策略来限制问题的产生和利用。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论