漏洞介绍
在我们浏览网页时,文件上传是非常常见的,比如我们会上传头像、附件、视频等文件,文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的,如果文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,比如上传头像的时候,按道理用户只能上传图片类型的文件,但是如果代码没有限制文件类型,攻击者可通过 Web 访问的目录上传任意文件,包括网站后门文件(webshell),进而远程控制网站服务器。
漏洞演示
下面我们在DVWA环境下进行演示,如下图红框中要求我们选择一张图片去上传,正常用户会选择后缀为“.jpg”、“png”等类型的图片上传,但如果后台代码没有对文件类型进行限制,我们选择了一个后缀为“”.php的“webshell.php”文件,它是一个包含了恶意代码文件,点击“upload”,提示“succesfully uploaded!”,上传成功!攻击者会通过访问此文件,进而控制我们的网站服务器。
当然,现在没有限制的上传页面几乎不存在了,我们大部分遇到的情况会是如下图所示:
它会提示“Your image was not uploaded. We can only accept JPEG or PNG images.”上传失败,并要求你只能上传JPEG或PNG格式的文件,我们打开后台代码,发现它只允许image/jpeg和image/png类型文件上传,如下图:
这时候我们需要抓取上传文件时的数据请求包,如下图所示,将加深部分的信息(Content-Type: application/octet-stream)修改为:Content-Type: image/jpeg,点击forward
系统就会提示上传成功,因为我们修改了文件类型为系统所允许的类型,所以上传成功,如下图:
此时此刻,系统虽然进行了文件类型的限制,但是攻击者还是会通过各种各样的手段将自己想要上传的文件类型,上传到系统服务器,文件上传漏洞依然存在,需要更严格的限制,这里我们就不再演示,因为魔高一尺道高一丈,我们只需要了解文件上传漏洞的原因及危害即可,防护的问题交给专业的技术人员来完成,下面介绍三个主要防御措施。
漏洞防御
1、设置文件上传类型白名单;
2、指定文件上传的路径,并禁止路径下文件的执行权限;
3、隐藏上传路径。
没有网络安全,就没有国家安全!