一、背景现代的互联网的Web应用程序中,文件上传是一种常见的要求,因为它有助于提高业务效率。在Facebook和Twitter等社交网络的Web应用程序中都允许文件上传功能。在博客,论坛,电子银行网络,YouTube和企业支持门户,会给用户和企业员工有效的共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。er等社交网络的Web应用程序中都允许文件上传功能。在博客,论坛,电子银行网络,YouTube和企业支持门户,会给用户和企业员工有效的共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。
二、为什么会有文件上传在网站运营过程中,不可避免地要对网站的某些页面或者内容进行更新,这个时候需要使用到网站的文件上传功能。如果不对被上传的文件进行限制或者限制被绕过,该功能便有可能会被利用上传可执行文件、脚本到服务器上,进而进一步导致服务器沦陷。
三、什么是文件上传漏洞
上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器。
四、文件上传漏洞的危害
1.网站被控制2.服务器沦陷3.同服务器的其他网站沦陷
五、哪里存在文件上传漏洞
有上传文件的位置,且上传到的目录,能够解析脚本语言, 就有可能存在文件上传漏洞。导致文件上传漏洞的原因较多,主要包括以下类:服务器配置不当(put可以直接向服务器上传资源,不过默认是关闭的)本地文件上传限制被绕过服务端过滤不严格被绕过文件路径截断文件解析漏洞导致文件执行编辑器上传漏洞1.服务器配置不当不需要上传页面即可上传成功。(PUT协议)2.本地文件上传限制被绕过只在客户端浏览器上了限制而没有在服务器上限制,只要修改数据包就可以轻松绕过。(前端绕过)3.过滤不严格或被绕过有一些网站用了黑名单过滤掉了一些关的可执行脚本文件后 缀。但黑名单不全或者被绕过,比如服务端过滤掉了后缀为 .php的 文件,但是没有过滤掉.php3等其可执行的脚本文件后缀,攻击者就可以上传其它可执行的脚本文件后缀到服务器上。常用的一些可执行的文件脚本后缀:
.php , .php2 , .php3 , .php5 ,.phtml.asp , .aspx , .ascx , .ashx.cer.jsp , .jspx
某些情况下的服务器配置会导致.html、.xml等页面后缀的文件也可被执行。多文件上传时,有时服务器只对一个上传的文件进行了检,这时通过上传多个文件并将恶意文件杂进其中也可绕过服务器的过滤。4.文件路径截断在上传的文件中用一些特殊的符使得文件被上传到服务器中时路径被截断从而控制文件路径。 常用的进行文件路径截断的字符如下:
/0?(?后面的格式什么的变成参数)%00 (00截断)
5.文件解析漏洞当服务器存在解析漏洞时,合法的文件名便可导致有恶意代码的文件被执行。Apache解析漏洞test.php.aaa.bbb.ccc任意不属于黑名单且不属于Apache解析白名单之内的后缀名。一个文件名为test.php.aaa.bbb.ccc的文件,Apache会从ccc的位置往php的位置开始尝试解析,如果ccc不属于Apache能解析的后缀名,那么Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的拓展名为止。存在版本WampServer2.0All Version (WampServer2.0i / Apache 2.2.11)[Success]WampServer2.1All Version (WampServer2.1e-x32 / Apache 2.2.17)[Success]Wamp5 All Version (Wamp5_1.7.4 /Apache 2.2.6) [Success]AppServ 2.4All Version (AppServ - 2.4.9 /Apache 2.0.59)[Success]AppServ 2.5All Version (AppServ - 2.5.10 /Apache 2.2.8)[Success]AppServ 2.6All Version (AppServ - 2.6.0 /Apache 2.2. [Success]IIS 解析漏洞test.asp/任意文件名 |test.asp;任意文件名 | 任意文件名/任意文件名.phpIIS6.0 在解析 asp 格式的时候有两个解析漏洞.一个是如果目录名包含
.asp、.asa、.cer
字符串,那么这个目录下所有的文件都会按照 asp 去解析。eg: “test.asp/1.jpg”另一个是只要文件名中含有”.asp;、.asa;、.cer;”会优先按 asp 来解析。eg:“1.asp;.jpg”IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL后面追加上字符串”/任意文件名.php”就会按照php的方式去解析。eg:”http://www.target.com/upload/1.jpg/1.php”存在版本IIS6.0 (Win2003 SP2 + IIS6.0) [Success]IIS7.0 (Win2008 R1 + IIS7.0) [Success]IIS7.5 (Win2008 R2 + IIS7.5) [Success]Nginx 解析漏洞任意文件名/任意文件名.php | 任意文件名%00.php目前 Nginx 主要有这两种漏洞:一个是对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是 test.jpg,可以添加为 test.jpg/x.php 进行解析攻击。eg: “http://www.target.com/upload/1.jpg/1.php”另一个是对低版本的 Nginx 可以在任意文件名后面添加%00.php 进行解析攻击。存在版本Nginx 0.5.*Nginx 0.6.*Nginx 0.7 <= 0.7.65Nginx 0.8 <= 0.8.37以上Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件1.jpg,然后以1.jpg%00.php进行请求。Nginx 0.8.41 – 1.5.6以上Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件1.jpg,然后以1.jpg%20%00.php进行请求。
六、文件上传漏洞的利用利用1.找到上传点,尝试上传脚本文件2.上传成功,访问上传的脚本文件3.上传失败,采取过滤绕过方法漏洞挖掘1.上传点,图片,文件,头像等等2.目录、文件存在类似upload.php等文件3.目录、文件存在编辑器目录如ewebEditor、fckeditor、kingeditor。
七、文件上传漏的防御文件上传漏洞的防御主要还是围绕三部分,一是文件上传路径,二是文件访问权限,三是文件执行权限。对于图片文件的防御方法,主要是采用白名单以及图片渲染。另外的一种方法是将用户上传的文件都放到指定的目录中,同时在服务器配置中设定该目录下的所有文件不可执行,但是该方法存在的风险即是在路径可知的情况下配合文件包含漏洞即可突破。因此,个人觉得针对文件上传的最好防御方法即是让上传路径不可知,将用户上传文件的路径保存到数据库中,并且在需要的时候再去读取加载。
关注我们:请关注一下我们的微信公众号: NiudunX
版权声明:本文为原创文章,版权归 牛盾网络 所有,欢迎分享本文,转载请保留出处!