目录

Web安全之文件上传漏洞


1. 文件上传漏洞介绍

文件上传漏洞,顾名思义,就是文件上传时的漏洞。当应用存在文件上传功能时,且对上传的文件未做格式校验或校验机制不完全,那么攻击者即可上传相对应的恶意文件拿下服务器权限。上传漏洞除了由代码问题产生,还会由Web容器产生、第三方组件产生等等。


2. 漏洞利用条件

  • 可以上传文件:必要条件

  • 上传文件的后缀可控:这里可以通过各种绕过来进行突破

  • 知道上传后的文件路径,并且可访问

  • 上传后的文件有执行权限,需要被当成脚本执行


3. 漏洞利用方式


4. 上传绕过

  • 客户端绕过:如果只是在客户端用JavaScript来检测文件是否合法,那么可以通过删除JavaScript代码或直接发送上传请求来绕过

  • 服务端绕过

    • 上传其他可解析的文件名

      • iis + asp:.asp.asa.cer.cdx
      • php:php3php4php5phtphtml,这个得分情况,像Apache + php模块就可用这种方式
    • 大小写绕过,如Php等

    • 在windows下,可上传php.php (注意这里php后有一个空格)后缀的文件,这样的文件上传之后windows会自动将点(.)、空格去掉

    • 修改请求包中的Content-Type字段

    • 将图片和脚本代码合并为一个文件,可绕过检测图片头部、检测图片宽高信息等的检测方式

    • %00截断上传:php版本需小于5.3.4,php的magic_quotes_gpc选项为Off状态

    • 上传目录可控,可利用其他漏洞结合使用,如iis6.0的解析漏洞

    • 利用竞态条件:某些网站是先允许把文件传上去,然后检查是否包含恶意代码,如果包含就删除文件。这时可以上传一个生成webshell的脚本文件,然后在上传文件的同时马上访问此文件,就有可能在服务端删除此文件之前生成一个webshell文件

    • 结合文件包含漏洞容器解析漏洞一起使用


5. 防御

  • 黑名单或白名单方式,拒绝上传某类型的文件或只允许上传某类型的文件。建议使用白名单

  • 上传目录不允许用户可控

  • 上传目录设置权限,遵循可写不可执行、可执行不可写原则

  • 上传的文件需重命名

  • 对于解析漏洞,及时升级并进行安全配置