文件上传的危害是上传木马文件可以获得服务器权限
    绕过方式:
    1.如果服务器是前端js检验文件后缀名
    可以直接在前端删掉js代码
    或者抓包修改文件后缀名绕过
    2.如果服务器是通过后端代码MIME判断
    抓包修改content-type 请求头
    3.基于文件后缀名黑名单 白名单原则
    如果是黑名单原则 上传除黑名单以外的文件类型
    那么就尝试不同的文件后缀名比如php网站 可以尝试 php1 php2 php大小写
    4.基于操作系统的绕过
    windows
    windows不区分大小写 大小写混杂绕过
    文件名双写绕过 (有的过滤机制是利用正则表达式去掉后缀)
    加文件末尾.绕过 传到windows会去掉.后面的东西
    文件末尾加空格绕过 windows会去掉空格
    末尾添加 ::$DATA 绕过

    %00截断PHP 版本<5.3.4 php的magic_quotes_gpc为OFF状态

    条件竞争绕过
    (服务器端在处理不同的请求时是并发进行的,因此如果并发处理不当或相关操作顺序设计的不合理时,可能导致漏洞。
    服务器如果认为这个文件符合要求就会留下了重新命名 如果不符合就删掉 如果一边上传一边访问该文件

    1. <?php
    2. $f=fopen("shell.php","w");
    3. fputs($f,'<?php phpinfo(); ?>');
    4. ?>

    图片木马配合文件解析漏洞
    .access 文件
    linux

    https://www.bilibili.com/read/cv6978946/
    https://www.jianshu.com/p/8babf113d59e

    web中间件解析漏洞:
    1、Apache
    从后往前解析文件名,直至遇到一个Apache认识的文件类型。
    比如.rar是合理的文件上传,上传xxx.php.rar.rar.rar,由于Apache不认识.rar这个文件类型,因此会一直遍历后缀到.php,然后认为是一个php文件,从而导致脚本攻击。

    IIS
    (1)存在“;”截断,也就是说文件名为abc.asp;xx.jpg,会被解析为abc.asp
    (2)处理文件夹扩展名出错,导致/*.asp/目录下的所有文件都作为asp进行解析
    (3)支持PUT功能(WebDav中定义的一个方法),允许用户上传文件到指定路径。
    首先使用PUT上传一个指定的文本文件,最后通过MOVE改写为脚本文件

    3、Nginx
    Nginx配置fastcgi使用PHP时,或存在文件类型解析问题
    访问http://www.xxx.com/path/test.jpg/noexist.php时,test.jpg会被当做php解析。noexist.php是不存在的文件。

    编辑器解析漏洞

    实战困惑:文件上传单独利用就是要上传对应的可以执行的文件比如php服务器.php文件。文件上传配合文件包含利用就是当不能上传.php文件时,可以上传图片木马(因为文件包含漏洞 会把所有文件内容先按php文件解析)
    文件上传本质:就是上传一个可以被web服务器执行解析的文件 同时可以访问到