File Upload¶
0x01 漏洞描述¶
应用系统在文件上传功能处对用户上传文件类型、格式、内容等做合法性校验,导致攻击者可以上传Webshell(.php、.jsp、asp等)恶意脚本文件或者非期望格式的文件比如:HTML文件、SHTML文件等,同时可利用目录跳转等字符或者控制上传目录,直接上传文件到Web目录或任意目录下,从而可能导致在远程服务器上执行任意恶意脚本文件,从而直接获取应用系统权限。
0x02 常见应用场景¶
文件上传漏洞通常发生在业务系统需要进行上传文件等功能处,比如上传图片、视频、文档;发表文章、评论;意见反馈;个人信息中的头像,照片,附件等。
0x03 漏洞危害¶
- 上传恶意脚本文件到服务器中,通过访问该恶意文件从而执行文件中的恶意代码;
- 攻击者可利用目录跳转上传php、config等文件,覆盖原有的系统文件,到达篡改系统文件、甚至获取系统权限的目的;
- 攻击者可上传html、shtm等文件,并写入非法博彩、赌博等恶意SEO页面或者写入恶意js文件进行钓鱼来非法获取用户信息等;
0x04 修复建议¶
4.1 代码层面¶
- 服务端采用白名单方式校验文件后缀,不建议采用黑名单方式校验后缀,黑名单方式校验可能导致攻击者利用文件特性、系统特性、黑名单不全等方式进行绕过攻击;
- 服务端对上传文件进行重命名,防止利用目录跳转等方式控制上传目录;
- 服务端使用系统函数来判断文件类型及文件内容是否合法,比如PHP中的getimagesize;
- 对上传的文件回显相对路径或者不显示路径;
4.2 其他层面¶
- 建议使用OSS静态存储服务器来存储用户上传的文件;
- 设置目录权限限制,禁止上传目录的执行权限;
- 保证使用的Nginx、Apache、IIS等容器版本不存在解析漏洞;
- 保证使用的第三方处理软件的版本比如FFmpeg、ImageMagick等不存在已知漏洞