导致文件上传漏洞的原因较多,主要包括以下几类:
未过滤或Web前端过滤被绕过
*文件内容检测被绕过
*中间件解析
不完善的黑名单扩展名
*文件路径截断
HTTP不安全方法(PUT协议)
加星号是比较重要的
文件名后缀就一个%00字节,可以截断某些函数对文件名的判断。在许多语言函数中,处理字符串的函数中0x00被认为是终止符。
例如:
网站上传函数处理xxx.php%00.jpg时,首先后缀名是合法的jpg格式,可以上传,在保存文件时,遇到%00字符丢弃后面的jpg,文件后缀最终保存的后缀名为xxx.php
*在你写的小马前面加一个GIF89a 假装是图片-.-
条件:
寻找一个上传点,查看上传点是否可用。
利用:
首先判断是程序员自己写的上传点,还是编辑器的上传功能
如果是编辑器上传功能,goole当前编辑器的漏洞
如果是程序员写的上传点
上传一个正常的jpg图片 查看上传点是否可用
上传一个正常的jpg图片,burp拦截,修改后缀为php (可以检测前端验证 MIME检测 文件内容检测 后缀检测)
上传一个正常的jpg图片,burp拦截, 00截断 1.php%00.jpg
判断服务器是什么类型,web服务器程序,是什么类型,版本号多少
利用解析漏洞
防御:::
上传文件的存储目录禁用执行权限
文件后缀白名单,注意0x00截断攻击(PHP更新到最新版本)
不能有本地文件包含漏洞
及时修复Web上传代码(重要)
升级Web Server