zoukankan      html  css  js  c++  java
  • 4、文件上传

    4 文件上传

    4.1 概念

          上传文件时,服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器。

    4.2 危害

    • 网站被控制,对文件增删改查,执行命令,链接数据库

    • 如果服务器长久未更新,可以利用exp提权,导致服务器沦陷

    • 同服务器的其他网站沦陷

    4.3 导致漏洞原因

          ·服务器配置不当(iis6.0 put 直接写文件)

          ·本地文件上传限制被绕过(js验证)

          ·服务端过滤不严格被绕过(禁止php等,未禁php3、asa、cer、cdx等)

          ·文件路径截断(0x00、、?等字符,超长文件路径)

          ·文件解析漏洞到导致文件执行(iss,apache,nginx)

          ·开源编辑器上传文件漏洞(fckeditor自定义文件名、文件夹结合IIS6.0解析漏洞,ewebeditor可登陆后台配置上传文件类型)

    4.4 利用条件

          1、有文件上传功能   2、上传文件能够执行   3、上传文件路径可知

    4.5 利用方法

    • 找到上传点,尝试上传脚本文件

    • 上传成功,访问上传的脚本文件

    • 上传失败,采取过滤绕过方法

    4.6 利用步骤

    思路:

    ·什么语言?什么容器?什么系统?都是什么版本?

    ·都可以上传什么格式的文件?

    ·上传大的文件会不会重命名或者二次渲染?

    4.6.1 客户端校验

    js校验

          浏览器审查元素,删除onsubmit="return checkFile()"校验;

          或 将上传马的类型改为指定类型,burp抓包后改回脚本类型上传

    4.6.2 服务器检测

    4.6.2.1 MIME检测(Content-type内容)

          Burp suite 抓包,修改content-type为image/jpeg、image/gif、image/png或image/bmp

       

      

    4.6.2.2 目录路径检测(path 参数相关内容)

    条件:PHP版本小于5.3.4,Magic_quote_gpc选项为off

    00截断:

    Currentfolder=xxx.php%00.gif

    (原因:低层调用类似C语言,遇到0x00会自动截断)

    4.6.2.3 文件扩展名检测(extension 相关内容)

    黑名单机制

    a)     大小写绕过

    b)     名单列表绕过

    asa、cer等后缀名可能黑名单没有列出

    c)     特殊文件名

    (windows中)burp抓包修改为test.asp.或test.asp_(下划线为空格),绕过验证,被windows系统自动去掉点和空格。

    d)     0x00截断绕过

    gettype(name)函数处理方式从后往前扫描扩展名,将test.asp .jsp(asp后面为0x00)识别为jpg

    e)     .htaccess文件攻击

    上传.htaccess文件,内容如下

          <FilesMatch "haha">

          SetHandler application/x-httpd-php

          </FilesMatch>

    上传文件名为haha的任意名的PHP木马,菜刀链接即可

    (通过一个.htaccess 文件调用php 的解析器去解析一个文件名中只要包含"haha"这个字符串的任意文件,所以无论文件名是什么样子,只要包含"haha"这个字符串,都可以被以php 的方式来解)

    f)      解析调用

    接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用/漏洞

    g)     构造包含脚本的图片

    方法1:桌面cmd命令下,执行copy 0000.png/b + hack.php/a hack.jpg

    方法2:文件所在目录cmd命令下,执行 copy /b 0000.png + hack.php=hack.jpg

    白名单机制

    0x00 截断绕过

    常见asp 的程序。用像test.asp%00.jpg 的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑漏洞进行攻击。

    Iiis6.0中将木马名改为test.asp;1.jpg上传绕过。

    4.6.2.4 文件内容检测(检测内容是否合法或含有恶意代码)

    代码层检验最后一关

    4.6.2.5 文件幻数检测

    jpg文件开头写上JFIF FF D8 FF E0 00 10 4A 46 49 46   后加一句话木马

    gif文件开头写上GIF 89a 47 49 46 38 39 61   后加一句话木马

    png文件开头写上PNG 89 50 4E 47   后加一句话木马

    4.6.2.6 文件相关信息检测

    图像文件相关信息检测常用getimagesize()函数。需要把文件头部分伪造好,即在幻数的基础上还加了一些文件信息

    类似如下结构

    GIF89a

    (...some binary data for image...)

    <?php phpinfo(); ?>

    (... skipping the rest of binary data ...)

    4.6.2.7 文件加载检测

    一般是调用API 或函数去进行文件加载测试

    常见的是图像渲染测试,更严格的是进行二次渲染      

    4.6.3 web应用程序解析漏洞攻击

    4.6.3.1 Apache解析漏洞

    Apache解析文件名从后往前。

    一个文件名为x1.x2.x3 的文件,Apache 会从x3 往x1 开始尝试解析如果x3 不属于Apache 能解析的扩展名,会尝试去解析x2 ,一直往前尝试,直到遇到一个能解析的扩展名为止。

    可能影响的版本:

      

    4.6.3.2 IIS解析漏洞

    IIS6.0

    目录名包含".asp"字符串,目录下所有文件都按照asp解析

    只要文件名包含".asp",会有限按照asp解析

    常见名称格式:

    test.asp/任意文件名、test.asp;任意文件名、任意名/任意名.php

    IIS7.0/7.5

    对任意文件名只要在URL后追加字符串"/任意文件名.php"就会按照php方式解析。

    4.6.3.3 Nginx解析漏洞

    任意文件名,后面/加任意文件名.php解析攻击

    低版本nginx,在任意文件名后面加%00.php解析攻击

    已测试的影响范围:

    Nginx 0.5.*、nginx 0.6.*、nginx 0.7<=0.7.65、nginx 0.8 <=0.8.37

    4.6.4 小结

     

    4.7 防御方法

    • 上传文件的存储目录不给执行权限

    • 文件后缀白名单,注意0x00截断攻击(PHP更新到最新版本)

    • 不能有本地文件包含漏洞(include dama.jpg)

    • 及时更新web应用软件避免解析漏洞攻击

  • 相关阅读:
    Amoeba+Mysql实现数据库读写分离
    分布式mysql中间件(mycat)
    mysql打不开表问题解决方案
    redis下载安装以及添加服务
    linux mysql重启命令
    Centos打开、关闭、结束tomcat,及查看tomcat运行日志
    mybaties中,模糊查询的几种写法
    如何给mysql用户分配权限+增、删、改、查mysql用户
    反人类的MyEclipse之-Javascript双引号自动补全
    反人类的MyEclipse之-调整JavaScript代码-花括号换行显示
  • 原文地址:https://www.cnblogs.com/guike/p/11188456.html
Copyright © 2011-2022 走看看