目录
漏洞原理
文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严或webserver相关解析漏洞未修复而造成的,如果文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,攻击者可通过 Web 访问的目录上传任意文件,包括网站后门文件(webshell),进而远程控制网站服务器。 攻击者可通过此漏洞上传恶意脚本文件,对服务器的正常运行造成安全威胁!
Low
渗透思路
直接上传
用最无脑的方式也能成功,看图说话:
Medium
渗透思路
Content-Type 修改绕过
文件上传绕过的方式有很多,比如 Content-Type 修改绕过
源码对比
Low & Medium 源码
对比小结
Medium 源码只是对文件类型 Content-Type 和文件大小做了校验,还有很多其他方式可以绕过
High
渗透思路
- 上传图片马,结合文件包含漏洞获得 webshell
- 上传图片马,结合命令注入漏洞获得 webshell
上传图片马
文件包含图片马获得 webshell
利用已知的文件包含漏洞获得 webshell
第一次路径推测错误,但报错信息暴露了绝对路径
根据获得到的绝对路径拼接图片马
命令注入获得 webshell
上传图片马后,通过命令执行漏洞修改文件名后缀
|cp ../../hackable/uploads/pic_shell.jpeg ../../hackable/uploads/pic_shell.php
源码对比
Medium 源码
High 源码
对比小结
High 比 Medium 级别多了如下措施:
- 添加了文件后缀名白名单
- 限制文件大小和图片大小
Impossible
源码对比
High 源码
Impossible 源码
对比小结
相比 High 等级, Impossible 增加了如下措施:
- 校验 CSRF Token
- 上传文件名用 md5 哈希值重命名,难预测
- 校验文件类型 Content-Type
- 对上传的文件进行了二次渲染
绕过
- 修改/删除/禁用JS
- 修改MIME
- 等价扩展名绕过
- 大小写
- .htaccess
- 双写
- 空格
- 点
- ::$DATA
- %00截断或0x00截断
- 图片马
- 条件竞争
防御
- 后缀名限制白名单,黑名单(不可靠
- MIME Type
- 文件内容头校验(GIF89a)
- 二次渲染(resize 压缩)
- 用随机数改写文件名和文件路径
- 专用安全设备过滤内容
- 限制文件大小
- 文件上传目录取消执行权限,使上传的脚本不能执行
- 杜绝文件包含漏洞