文件上传漏洞-理论

概念

攻击者利用web应用对上传文件过滤不严的漏洞,将应用程序不该允许的文件类型上传到web服务器上,并成功解析。

文件上传攻击的前提

  1. 网站具有上传功能
  2. 上传的文件能够被web服务器解析并执行
  3. 知道上传后的文件路径和文件名称
  4. 目标文件可以呗用户访问

文件上传漏洞的攻与防

攻击

  1. 判断是否为js防护或者MIME防护
1
使用burp suite抓取流量,进行伪造后重放攻击
  1. 针对黑名单过滤
1
2
3
4
5
6
1. 多次测试过滤文件名。例如php,php4,php5
2. 判断大小写绕过。Php,PHP
3. 特殊文件名构造:php.shell. , php.shell_
4. %00 截断。 phpshell.php%00.jpg
5. 考虑web中间件版本漏洞。如httpd,tomcat,nginx,struts2等
6. 如果web服务器是检测文件内容的,那么就可以使用修改文件头进行上传webshell

防御

  1. 前端进行js防御 [可绕过]
  2. 后端进行MIME防御 [可绕过]
  3. 后端进行白名单防御

只允许相应格式的文件进行上传,其余格式的文件丢弃

  1. 后端黑名单过滤 [可绕过]

不允许相应格式的文件进行上传

  1. 文件重命名防御

将用户上传的文件进行重命名,防止截断和绕过

  1. 文件名不该含有特殊符号,防止xss之类的攻击
  2. 文件内容检测。[可绕过]

有些图像文件,如果以网页脚本形式进行展示的话,那么就可能执行木马。针对文件内容进行检测,必要时候可以使用图像二次渲染之类的技术进行防护。

  1. 文件名长度需要做限制
  2. 需要有三个文件夹,一个存放临时文件,一个存放正式文件,一个存放病毒文件,并且其上传的文件都不应该具有x权限
  3. 用户上传文件后应该经过杀毒软件的扫描,如果是病毒文件,应该放置到隔离的文件中,做为审计资料,如果不是,应该由临时文件夹移动到正式文件夹