玩命加载中 . . .

文件上传


上传文件

1. 客户端校验(本地)——JavaScript校验

  • 原理:本地JavaScript进行校验

  • 绕过方法:

    • 1.抓包解包
    • 2.禁用JavaScript

2.服务器端校验——content-type校验

  • 原理:MIME类型检测
  • 绕过方法:
    • 1.修改数据包
      • gif——image/gif
      • png——image/png
      • jpg——image/jpeg
      • js ——text/javascript
      • htm——text/html
      • html——text/html
    • 2.改文件名后上传抓包后再改回文件名
    • 3.上传正常文件修改文件内容
    • 目的:构造包使content-type 正确

3.服务端校验——后缀名黑名单校验

  • 原理:开发人员禁止了某些后缀名
  • 绕过:
    • 1.大小写绕过,例如:Php、PhP
    • 2.利用黑名单没有的,但是能被中间件解析的后缀名,例如:PHP、php3、php4、php5、pht、php7、phtml、phps
    • Apache的配置文件正则规则 .+\.ph(p[3457]?|t|tml)$
    • 3.上传Apache的.htaccess 文件 ,与php文件在同一目录
      • <FilesMatch "php7.jpg">sethandler application/x-httpd-php</FilesMatch>
    • 4.使用00截断:使用bp的hex修改0x00
      • 基于一个组合逻辑漏洞造成的,通常存在于构造上传文件路径的时候
    • 5.超长文件名截断上传Windows: 258 byte Linux: 4096 byte

4.服务端校验——后缀名白名单校验

  • 原理:猜测是因为Apache服务器识别文件名时是从后向前推

5.服务端校验——内容头校验

  • 原理:文件头 getimagesize()
  • 绕过:gif89a

6.竞争上传

  • 情景:文件上传后,检测是否合法,不合法就删除,所以意味着文件在服务器上存在过,只是存在时间短,理论上是能访问的。
  • 绕过:使用爆破,一直发,访问速度大于他的删除速度。生成小文件。。。
  • 趁代码不注意,赶紧访问!!!

上传文件代码:

<html>  
<body>  
    <form action="upload-file.php" method="post"  
        enctype="multipart/form-data">  
        <label for="file">文件名:</label>  
        <input type="file" name="file" id="file" />  

        <input type="submit" name="submit" value="提交" />  
    </form>  
</body>  
</html>

文章作者: kylin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kylin !
  目录