Skip to content

Latest commit

 

History

History
49 lines (39 loc) · 2.74 KB

web_vul_upload.md

File metadata and controls

49 lines (39 loc) · 2.74 KB

简介

文件上传功能导致的漏洞.

漏洞危害

序号 存储文件夹下的web脚本可被执行 文件路径用户可控 文件名称用户可控 文件后缀用户可控(没用白名单) 文件存储位置 利用效果
1 1 0 0 1 同域 [高危] 上传.php等 得到webshell
2 0 0 0 1 同域 [高危] 上传.html .svg等 实现XSS
3 0 1 1 1 同域 [高危] 目录穿越 如果进程权限足够高 则可覆盖任意文件
4 0 0 1 1 同域 覆盖同文件夹下的任意文件
5 0 0 1 0 同域 覆盖同文件夹下的某个后缀的文件
6 0 0 0 0 不同域 [低危] 无法直接利用 考虑漏洞联合

上传功能本身无漏洞(即只有文件内容用户可控)的情况下,可以考虑多个漏洞联合利用: 利用web应用、web中间件等漏洞.

序号 已知存在的漏洞 正常上传文件 联合利用效果
1 web中间件 解析漏洞 filename.* webshell
2 web应用 本地文件包含漏洞 filename.* webshell
3 web应用 XSS漏洞(但因严格的CSP无法触发) filename.* XSS(bypass CSP)
4 web应用 web逻辑越权 filename.* 遍历已上传的文件
5 web应用 未限制上传策略(上传的次数、每次的大小) filename.* 存储可能被占满 资源消耗型DOS

常规测试

SDL - 防御与修复方案

  • 0.基础 - 使用较新版本的web中间件(避免解析漏洞) 并禁止文件存储路径的web脚本解析(上传的文件只能作为数据).
  • 0.上传策略 - (不强制要求)web应用未限制上传策略(上传次数、大小) 可导致存储可能被占满 存储资源耗尽导致DOS.
  • 1.文件后缀 - 白名单(图片jpg jpeg png).
  • 2.文件名称 - 随机hash重命名(避免遍历文件).
  • 3.保存路径 - 保存到固定文件夹(web应用不要使用"用户输入的路径" 避免目录穿越).
  • 4.文件位置 - 资源存储 与 web应用 建议不同域.
  • 5.文件复检 - (不强制要求)例如 对图片文件进行拉伸等处理,如果处理失败则为非正常图片(构造的畸形图片).
  • 6.对应记录 - 建立对应关系 每个文件都能够对应到实际上传者 便于追溯 鉴权.
  • 7.访问鉴权 - 有任意用户来访问上传的文件 都可以根据其权限(身份) 判断是否有权限访问 避免越权.
  • 综上 如在 www.XXcompany.com 上传的文件都保存到"对象存储"(OSS,Object Storage Service) https://file.XXcs.com/media/upload/picture/20191015162116-c21be4fc-ef24-1.png