一、产生原因
文件上传漏洞的产原因在于程序员对于用户上传的文件内容控制不足或处理存在缺陷,从而导致的用户可以越过其本身权限向服务器上传可执行的脚本文件。
这里上传的文件可以是木马、病毒、webshell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器如何处理和解释文件。如果处理逻辑不够安全,则可能导致严重的后果。
具体原因如下:
- 对于文件上传的后缀名没有做严格校验
- 对于上传文件的content-type进行校验
- 权限上没有对上传的文件目录设置不可执行权限
- web server 对于上传的文件内容或者指定目录的行为做限制。
二、文件上传漏洞的危害
- 上传webshell,控制服务器、远程命令执行
- 上传系统病毒、木马文件进行挖矿、僵尸网络
- 进行提权操作
- 修改web页面,实现钓鱼、挂马等操作。
- 进行内网渗透。
- …
三、文件上传的合法性检测
- 前段JS验证
- MIME类型验证(content-type验证)
- 黑白名单
- 检查文件内容(文件头、关键字)
- 禁止本地文件包含
- 使用安全的web服务(apache、nginx、IIS等都可能存在漏洞)
四、文件上传的绕过方法
- 前段JS绕过
- MIME类型验证绕过
- 后缀名大小写绕过
- 00截断
- 双写文件后缀绕过
- …
五、文件下载与查看漏洞
一些网站由于业务需求,往往需要提供文件下载功能,但是对下载的文件不做限制,恶意用户就能够查看或下载任意敏感文件。
通过下载一些系统服务配置文件、代码脚本等,往往可以进一步进行代码审计,得到跟多的漏洞利用点。
修复方法:
- 过滤“.”防止进行目录穿越,不能返回上级目录
- 通过正则严格判断用户输入的参数的格式
- 使用php.ini配置open_basedir限制文件访问范围。