目录
文件上传漏洞原理
文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。
“文件上传”本身的功能是互联网应用当中最常见的功能。如用户头像上传,留言板图片上传,附件文档上传等。一些文件上传功能的实现时,代码没有进行严格限制用户上传的文件后缀以、文件类型或文件内容,导致允许攻击者向某个可通过Web访问的目录上传任意脚本文件,并能够将这些文件传递给WEB容器解释器,就可以在远程服务器上执行任意WebShell脚本。
当系统存在文件上传漏洞时攻击者可以将病毒,木马,WebShell等其他恶意脚本或者是包含了脚本的图片上传到服务器,这些文件将对攻击者后续攻击提供便利。根据具体漏洞及脚本的差异,此处上传的脚本可以是正常后缀的PHP,ASP以及JSP脚本,也可以是篡改后缀后的这几类脚本。
产生文件上传漏洞的原因
1)对于上传文件的后缀名(扩展名)没有做较为严格的限制
2)对于上传文件的MIMETYPE(用于描述文件的类型的一种表述方法) 没有做检查
3)权限上没有对于上传的文件目录设置不可执行权限,(尤其是对于shebang类型的文件)
4)对于web server对于上传文件或者指定目录的行为没有做限制
文件上传漏洞可被利用的必要条件
1)上传的文件能够被WEB容器解释且执行,所以文件上传后的所在目录必须是WEB容器能够覆盖到的路径。
2)用户能够通过WEB访问上传的文件,如果说脚本文件上传了,但是无法通过WEB进行访问或者说无法通过WEB容器解释该上传文件,这种情况不能说存在“文件上传漏洞”,因为无法被利用。
3)用户上传的脚本文件被安全规则过滤、格式化、图片压缩等功能改变了其内容,导致WebShell失效,同样会让“文件上传漏洞”攻击不成功。
简单来说
1)webshell上传成功
2)能获取webshell的路径
3)上传的webshell能正常运行
常见的防御方式
1)检查文件上传路径 ( 避免 0x00 截断、 IIS6.0 文件夹解析漏洞、目录遍历 )
2)文件扩展名检测 ( 避免服务器以非图片的文件格式解析文件 ),验证文件扩展名 通常有两种方式 : 黑名单和白名单 .
3)文件 MIME验证 ( 比如 GIF 图片 MIME为 image/gif,CSS 文件的 MIME为 text/css 等 )
4)图片二次渲染 ( 最变态的上传漏洞防御方式 , 基本上完全避免了文件上传漏洞 )
5)文件重命名 ( 如随机字符串或时间戳等方式 , 防止攻击者得到 webshell 的路径 )
6)隐藏上传路径
7)文件内容检测 ( 避免图片中插入 webshell)
绕过方式
1)客户端Javascript检测
在浏览器中禁用Javascript权限即可
upload-labs中pass-01可使用此绕过方式
2)服务器MIME类型检测
本例来源upload-labs中pass-02
1.使用Burp Suite代理工具进行抓包修改MIME类型(即Content-Type)