文件上传漏洞
用户上传了一个恶意的可执行脚本文件到服务器端执行,并非有文件上传就有文件上传漏洞,凡是存在文件上传的入口都可以测试是否有文件上传漏洞;
危害
可能上传网站后门,获得网站权限;
进而获得数据库账号密码得到一些重要信息;
如何查找及判断
黑盒查找,通过扫描工具尝试;
在应用中寻找上传点;
后台权限!=网站权限
白盒查找,分析源代码,查找文件上传入口;
注意事项
类型区分;
解析漏洞
某些中间件中可能存在解析漏洞,因此通过在某些格式的文件中添加php脚本,来执行,实习文件上传漏洞。
前端过滤:html、js代码写在页面中,对文件类型进行过滤;可更改文件代码进行绕过;由浏览器运行
后端过滤:在服务器执行后结果给用户;服务器运行
文件上传常见验证
-
后缀名、类型、文件头等
直接验证-后缀名:黑名单(明确不允许上传的格式)、白名单(明确允许上传的格式,白名单相对黑名单安全一点);
间接验证-文件类型:MIME信息-content-type,检测文件类型,可以通过修改数据包来绕过;
间接验证-文件头:内容头信息,例如:GIF的前缀是GIF89a,png是*ng,通过更改前缀来进行伪装; -
htaccess解析
上传htaccess文件后,再配合上传相关脚本文件,实现上传漏洞 -
::$ DATA
必须是windows,必须是php,必须是那个源文件
php在windows的时候如果文件名+“::$DATA”会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持:: $DATA之前的文件名 -
%00截断
../upload/1.php%000321303.jpg
通过截断,上传的是1.php文件
get请求可以自动将url中的%00解码;post请求得到的数据包,服务器不会自动将其解码,要手工解码;