文件上传漏洞就是利用对用户上传的文件类型判断不完善,导致攻击者上传非法类型的文件,从而对网站进行攻击。
比如可上传一个网页木马,如果存放文件的目录刚好有执行脚本的权限,那么攻击者就可以得到一个webshell
攻击者要想成功实施文件上传攻击,必须要满足以下三个条件:
可以上传任意脚本文件,且上传的文件能够被Web服务器解析执行,具体来说就是存放上传文件的目录要有执行脚本的权限
用户能够通过Web访问这个文件。如果文件上传后,不能通过Web访问,那么也不能成功实施攻击
要知道文件上传到服务器后的存放路径和文件名称,因为许多Web应用都会修改上传文件的文件名称,那么这时就需要结合其他漏洞去获取到这些信息。如果不知道上传文件的存放路径和文件名称,即使你上传了也无法访问
主流的文件上传检测方式有以下五种:
1, 客户端java script检测
客户端检测通常在上传页面里含有专门检测文件上传的java script代码,在文件被上传之前进行检测,最常见的就是检测上传文件的文件类型和大小是否合法
2, 服务端MIME类型检测
这类检测方法通过检查http包的Content-Type字段中的值来判断上传文件是否合法
3.服务端文件扩展名检测
这类检测方法通过在服务端检测上传文件的扩展名来判断文件是否合法
4.服务端目录路径检测
这类检测一般通过检测路径是否合法来判断
5.服务端文件内容检测
那么如何设计出一个安全的文件上传功能呢?
1, 设置保存上传文件的目录为不可执行
只要Web服务器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,此点至关重要。
2, 判断文件类型
在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈建议采用白名单的方式。此外,对于图片的处理可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的恶意代码。
3.使用随机数改写文件名和文件路径
文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果采用随机数改写了文件名和路径,将极大地增加攻击成本。与此同时,像webshell.asp;1.jpg这种文件,将因为文件名被改写而无法成功实施攻击。
---------------------
作者:rugu_xxx
来源:CSDN
原文:https://blog.csdn.net/sinat_36629696/article/details/80748665
版权声明:本文为博主原创文章,转载请附上博文链接!