安全研究 >> 安全研究详情

文件上传漏洞利用及防御方案

作者: 美创科技安全实验室发布日期: 12月02日

01 漏洞介绍

文件上传(File Upload)是大部分Web应用都具备的功能,例如用户上传附件、修改头像、分享图片/视频等。正常的文件一般是文档、图片、视频等,Web应用收集之后放入后台存储,需要的时候再调用出来返回。

如果恶意文件如PHP、ASP等执行文件绕过Web应用,并顺利执行,则相当于黑客直接拿到了Webshell,则可以拿到Web应用的数据,删除Web文件,本地提权,进一步拿下整个服务器甚至内网。

02 文件上传漏洞原理

03 文件上传漏洞复现

利用DVWA靶场进行文件上传漏洞演练:

1.Low Security Level

查看源码:

这是最开始的页面:

我们尝试上传桌面上的一个图片2.jpg

这时,我们来研究一下这个路径:../../hackable/uploads/2.jpg succesfully uploaded!

这是一个绝对路径,我们直接输入网址http://127.0.0.1/DVWA/hackable/uploads/2.jpg

这时候,我们尝试上传桌面上的1.php文件,写入的内容为<?php phpinfo();?>

如图,1.php文件上传成功,服务器并未做任何过滤限制:

我们再次访问上传的路径:http://127.0.0.1/DVWA/hackable/uploads/1.php

说明存在文件上传漏洞,能够上传并且执行php文件

这个时候如果上传一句话木马:<?php @eval($_GET['joker']);?>

并用中国蚁剑进行连接,就可以得到这个服务器的Webshell

这样我们就可以访问这个服务器的任何文件夹,可见,文件上传漏洞的是非常具有危害性的。

2.Medium Security Level

查看源码:

源码中对上传的文件类型跟大小对进行了判断过滤,也就是说正常情况下,不能够上传不符合文件类型的文件。

我们用burpsuite抓包,将文件的上传类型修改为image/jepg

攻击成功后发现php文件上传成功

3.High Security Level

查看源码:

源代码严格限制了文件的后缀和内容:

php后缀名和php内容 ×

php后缀名和img内容 ×

img后缀名和php内容 ×

这时候,我们就可以把php伪造成jpg绕过,也就是制作一句话图片木马,下图是用cmd制作的一句话图片木马:

用记事本打开可以看见这么一句话:<?php @eval($_POST['joker']);?>

然后我们就可以上传了,上传成功后,用中国蚁剑进行连接,就可以拿到Webshell权限。

04 防御方案

系统运行时的防御

1、文件上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响。

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

3、使用随机数改写文件名和文件路径。文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

4、单独设置文件服务器的域名。由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

5、使用安全设备防御。文件上传攻击的本质就是将恶意文件或者脚本上传到服务器,专业的安全设备防御此类漏洞主要是通过对漏洞的上传利用行为和恶意文件的上传过程进行检测。恶意文件千变万化,隐藏手法也不断推陈出新,对普通的系统管理员来说可以通过部署安全设备来帮助防御。

系统开发阶段的防御

对文件上传漏洞来说,最好能在客户端和服务器端对用户上传的文件名和文件路径等项目分别进行严格的检查。客户端的检查虽然对技术较好的攻击者来说可以借助工具绕过,但是这也可以阻挡一些基本的试探。服务器端的检查最好使用白名单过滤的方法,这样能防止大小写等方式的绕过,同时还需对%00截断符进行检测,对HTTP包头的content-type也和上传文件的大小也需要进行检查。

系统维护阶段的防御

1、系统上线后运维人员应有较强的安全意思,积极使用多个安全检测工具对系统进行安全扫描,及时发现潜在漏洞并修复。

2、定时查看系统日志,web服务器日志以发现入侵痕迹。定时关注系统所使用到的第三方插件的更新情况,如有新版本发布建议及时更新,如果第三方插件被爆有安全漏洞更应立即进行修补。

3、对于整个网站都是使用的开源代码或者使用网上的框架搭建的网站来说,尤其要注意漏洞的自查和软件版本及补丁的更新,上传功能非必选可以直接删除。除对系统自身的维护外,服务器应进行合理配置,非必选一般的目录都应去掉执行权限,上传目录可配置为只读。

关于美创

杭州美创科技有限公司,敏感数据保护和数据安全领域的拓荒者和领导者,由国内多名数据库资深专家携手于2005年成立,产品及服务覆盖数据安全、数据管理、容灾备份、智能运维等四大领域,广泛应用于医疗、教育、金融、政府、人社、电力能源、物流交通、企业等众多行业。多年来,凭借卓越的技术创新与良好的用户口碑,美创多次入围全国网络安全50强,并参与多项国家及行业标准的编写,引领数据安全领域的规范发展。目前,美创科技已全面推动全国市场化发展战略,相继在北京、广州、武汉、南京、成都、上海等地设立分公司,致力于为更多的客户提供专业的安全解决方案。



服务热线:400-711-8011
Copyright ©2005-2018 杭州美创科技有限公司. All Rights Reserved. 浙ICP备12021012号-1