文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,可能导致文件上传漏洞
则攻击着可能会上传一些恶意的文件,执行恶意命令,拿shell,提权,接管服务器
1.后端验证文件类型、内容、后缀名、大小;
2.验证文件的上传方式;
3.对文件进行一定复杂的重命名;
4.不要暴露文件上传后的路径;
前端代码限制只能上传jpg/png/gif文件
Clientcheck.php
后端代码显示
- 未对上传文件类型、内容等校验过滤
- 上传成功返回相对路径表单
漏洞利用
1.直接上传个图片码,上传抓包,修改后缀
2.访问测试
Servercheck.php
1.获取submit传参,调用upload_sick函数
2.只通过MIME类型验证了一下图片类型,其他的无验证,即对content-type字段内容校验
MIME多用途互联网邮件扩展类型,是设定某种扩展名的文件用一种应用程序打开的方式类型,当该扩展名被访问的时候,浏览器会自动使用指定应用程序来打开,常见的MIME类型:
普通文本 .txt text/panin
GIF图形 .gif image/gif
JPEG图形 .jpg image/jpeg
漏洞利用
1.上传文件,修改content-type: image/jpeg内容即可绕过
2.访问测试
后端代码限制文件类型、mime设置content-type类型,文件存储新建时间属性的文件夹,调用upload函数
Upload函数将测定任何 文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。
漏洞测试
限制文件大小、类型、内容检查,可制作图片码测试
1.环境异常处理,上传正常文件报错
配置data.timezone值即可
2.上传图片码
3.漏洞测试
正常访问
结合环境文件包含漏洞