zoukankan      html  css  js  c++  java
  • 常见的文件上传绕过和文件解析漏洞

    常见的文件上传绕过漏洞有
        1、前段绕过
        2、服务端绕过
        3、配合解析漏洞突破上传
        4、编辑器漏洞
        
    一、前端绕过
          . 客户端javascript检测(通常为检测文件拓展名)
    这是文件上传突破的第一步,也是最容易绕过的一个 ,只要把需要上传的文件的后缀名改为前端允许通过的就可以;
    如 xxx.php -->xxx.jpg;
    这时利用抓包软件如:burpswite之类的代理工具抓取通过上传的以图片格式结尾的文件,然后更改其后缀名为对应服务器
    可以解析的后缀名。

    前端绕过比较简单,一般的网站不会只在前端对文件后缀名进行验证,所以不多加解释。

    二、(1)服务端的MIME检测绕过
    服务端MIME类型检测也就是检测Content-Type的内容。下面是一段测试模拟代码:
    <?php
    if ($filetype =='image/jpg'|| $filetype=='image/gif' || $filename == 'image/jpeg' || $filetype == 'image/png'){
        $path = 'uploads';
        if (!file_exists($path)){
            mkdir($path);

        }
        if (move_uploaded_file($filetmp, $path.'/'.$filename)){
            echo "文件上传成功".$path.'/'.$filename;
        }else{
            echo "文件上传失败";
        }
    }else{
        echo "文件后缀不合法";
    }
    ?>
    绕过的办法:
    更改为Content-Type:image/gif


    (2)服务端目录路径检测
     一般是检测保存路径是否合法,但一般都没有防御。检测跟path参数相关的内容。

    绕过办法:00截断

    通过抓包截断将 xxx.php.jpg 换成 xxx.php_jpg(下划线为0x00)。在上
    传文件时系统文件遇到0x00。会认为文件已经结束。从而将xxx.php.jpg的内
    容写入到xxx.php

    还可以使用抓包软件的 HEX 功能把php后面的 . 对应的2E 手动更改为00



    (3)服务端文件名拓展检测
        基于黑名单检测:
        黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多。一般有个专门的blacklist,里面包含常见的危险脚本文件。

    绕过办法:
    1、文件名大小写绕过(AsP, pHp等等)
    2、黑白名单列表绕过(php、php2、php3、php5、phtml、asp、aspx、ascx、
    ashx、cer、asa、jsp、jspx)cdx,
    3、特殊文件名绕过
    修改数据包里的文件名改为 test.php. 或者 test.asp_ (下划线是空格)由于
    这种命名格式在windows系统里是不允许的。所以在绕过上传之后windows系统
    会自动去掉 点和空格。Unix/Linux系统没有这个特性。
    4、0x00截断绕过
    5、.htaccess文件攻击(结合黑名单攻击)

    主要介绍第五种绕过办法:
    .htaccess文件攻击
    .htaccess文件攻击即结合黑名单攻击服务器的 .htaccess文件 。
    通过move_uploaded_file函数把自己写的 .htaccess文件覆盖掉服务
    器上的这样就可以解析定义名单了。
    .htaccess文件用处:
    通过.htaccess文件调用php解释器去解析一个文件名中只要包含
    “haha”这个字符串的任意文件,无论你文件名是什么样子,只要包
    含”haha”这个字符串,都可以被以php的方式来解析。
    .htaccess文件内容:
    <FilesMatch “haha”>
    SetHandler application/x-httpd-php
    </FilesMatch>

    (4)服务端文件内容拓展检测
        如果服务器对上传的文件进行了文件内容检测就只能上传图片了,但是可以利用图片和脚本文件制作一个图片马
    如 1.gif 和2.txt 前面的图片尽量要简单,不然容易干扰制作后的文件内容解析,后面的文档是需要执行的脚本文件
    利用命令窗口:copy /b 1.gif + 2.txt = new.php
    这样就制作出来了一个图片马,再利用上面的方法绕过文件扩展名检测

    三、Apache解析漏洞
    test.php.aaa.bbb.ccc任意不属于黑名单且不属于Apache解析白名单
    之内的后缀名。(当apache和php以module方式结合的时候)

    一个文件名为test.php.aaa.bbb.ccc的文件,Apache会从ccc的位置往
    php的位置开始尝试解析 ,如果ccc不属于Apache能解析的后缀名,那么
    Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的
    拓展名为止

    所以可以对要上传的文件添加无用扩展名如xxx.php -->xxx.php.gashgas

    IIS 解析漏洞
    • dir.asp/任意文件名
    • test.asp;任意文件名
    • 任意文件名/任意文件名.php muma.jpg/111.php

    IIS6.0 在解析 asp 格式的时候有两个解析漏洞.
    一个是如果目录名以"
    .asp 、.asa、.cer、.cdx
    "字符串结尾,那么这个
    目录下所有的文件都会按照 asp 去解析。eg: “test.asp/1.jpg”
    另一个是只要文件名中含有"
    .asp;、.asa;、.cer;、.cdx;会优先按 asp
    来解析 eg:
    “1.asp;.jpg”

    IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞, 对任意文件
    名只要在URL后面追加上字符串"/任意文件名.php
    "
    ,就会按照 php 的方式
    去解析
    eg:”http://www.target.com/upload/1.jpg/1adf.php”


    总结
    路径/拓展名检绕过
    • 黑名单绕过
    • 文件名大小写绕过
    • 名单列表绕过
    • 特殊文件名绕过
    • 0x00截断绕过

    .htaccess文件攻击
    • Apache解析漏洞
    • IIS解析漏洞
    • Nginx解析漏洞
    • 白名单绕过
    • 文件名后缀0x00截断绕过
    • PHP文件包含漏洞
    • IIS解析漏洞
    • Nginx解析漏洞

  • 相关阅读:
    JSON
    FBV & CBV
    django Tips
    Django2.2
    cookie & session
    ajax请求
    视图函数
    模板语法
    模板继承、组件
    python之路-----多线程与多进程
  • 原文地址:https://www.cnblogs.com/luolaobiao/p/9917878.html
Copyright © 2011-2022 走看看