zoukankan      html  css  js  c++  java
  • 文件上传漏洞专题

    文件上传漏洞专题

    一、文件上传漏洞基础

    ​ web应用程序在处理用户上传的文件操作时,如果用户上传的文件的路径、文件名、扩展名成为用户可控数据,就会导致直接上传脚本木马到web服务器,直接控制web服务器

    ​ 文件上传:文件上传功能本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做得不够安全,则会导致严重的后果。

    文件上传的php代码

    <?php
       header( "Content -type: text/html; charset=utf-8");
       $upload_ dir = ' ./upload/'.$_ FILES[ 'upfile']['name'];
       if (move_ uploaded_ file($_ FILES['upfile' ]['tmp_ name'], $upload_ dir ))
       {
    		echo”上传成功"."<br />";
    		print ($upload_ _dir);
       }            
    ?>
    

    造成恶意文件上传的原因

    1、文件上传时检查不严

    应用在文件上传时根本没有进行文件格式检查,导致攻击者可以直接上传恶意文件。或应用仅仅在客户端进行了检查,而在专业的攻击者眼里几乎所有的客户端检查都等于没有检查,攻击者可以通过NC,Fiddler等断点上传工具绕过客户端的检查

    2、文件上传后修改文件名时的处理不当

    一些应用在服务器端进行了完整的黑名单和白名单过滤,在修改已上传文件文件名时却百密一疏,允许用户修改文件后缀。如应用只能上传.doc文件时,攻击者可以先将.php文件后缀修改为.doc,成功上传后修改文件文件名时将后缀改回.php。

    3、使用第三方插件引用时

    好多应用都引用了带有文件。上传功能的第三方插件,这些插件的文件上传功能实现上可能有漏洞,攻击者可通过这些漏洞进行文件上传攻击。
    如著名的博客平台WordPress就有丰高的插件,而这些插件中每年都会被挖掘出大量的文件上传漏洞。

    文件上传常见问题

    (1)上传文件是Web脚本语言,服务器的Web容器解释并执行了胪上传的脚本,导致代码执行。
    (2)上传文件 是Flash的策略文件crossdomain.xml,客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似);
    (3)上传文件是病毒、 构文件,客用以诱骗用户或者管理员下载执行。
    (4)上传文件是钓图片或为包含了脚本的图片,在煤些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。
    (5)上传文件是WebShelI时,击可通过这些网页后]执行命令并控制服务器。

    文件上传点

    (任何可以上传文件的地方,都可能存在文件上传漏洞

    常见存在文件上传功能的地方

    头像、网站logo、友情连接处、编辑器、后台中的文件管理、模板管理、主题管理、插件管理、水印图片处、可以上传图片、添加商品、上传简历、jQuery-File-Upload等

    文件上传漏洞常见的地方

    ●服务器配置不当
    ●开源编辑器的上传漏洞
    ●本地文件.上传限制被绕过
    ●过滤不严或被绕过
    ●文件解析漏洞 导致文件执行
    ●文件路径截断

    二、文件漏洞之常用工具

    BurpSuite

    BurpSuite需要配置java环境

    中国蚁剑

    Burp Proxy原理及基本使用

    BurpSui te的核心功能,拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截,修改,重放在两个方向上的原始数据流。

    三、WebShell介绍

    webshell

    Webshell就是以asp、php、 jsp或者cgi等网页文件形式存在的一 种命令执行环境,也可以将其称
    做为一种网页后门。拆分开来看,”"web"的含义显然是服务器开放的web服务,"hell"的含 义是取得对服务器某种程度上操作权限。由于webshell期多是以动态脚本的形式出现,也有人称之为网站的后门工具。

    webshell的作用

    一方面,webhell被站长常常用于网站管理、服务器管理等等,根据FSO权限的不同,作用有在线编辑网页脚本、上传 下载文件、查看数据库执行任意程序命令等。另一面,被入侵者利用,从而达到控制网站服务器的目的。这些网页脚本常称为WEB脚本木马,比较流行的asp或php马,也有基于.NET的脚本杩与JSP脚本木马。

    webshell的特性

    (1) WebShell后门具有隐蔽性,一般有隐藏在正常文件中并修改文件时间达到隐蔽的,还有利用服务器漏洞进行隐藏,如"..录就可以达到,站长从FTP中找到的是含有"."的文件夹,且没有权限删除,还有一些隐藏的WEBSHELL,可以隐藏于正常文件带参数运行脚本后门。
    (2) webshell可以穿越服务器防火墙,于与被控制的服务器或远程过80端口传递的,因此不会被防火墙拦截。并组使用webshell- 般不会在系统日志中留下记录,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员是很难看出入侵痕迹的。

    四、文件上传漏洞常见的绕过方式

    没有过滤:没有对上传的文件做任何的过滤又叫做任意文件上传

    前端过滤:前端过滤等于没有过滤

    黑名单过滤

    1、根据文件类型过滤

    文件类型校验就是指HTTP头中的Content-Type,在服务器端进行校验。
    Content-Type:也叫互联网媒体类型(Intemet Media Type)或者MIME 型,在HTP协议消息头中,它用来表示具体请求中的媒体类型信息。

    例如:
    text/html代表HTML格式
    image/gif代表GIF片
    lmage/png代表GIF明
    application/octet-stream二进制流, 不知道文件类型(PHP)
    application/json代表JSON型

    2、根据文件名进行过滤

    根据文件后缀名判断文件是否允许上传,程序会把不允许上传的文件列到一个小本本里,一旦发现上传的文件在小本本中就马上制止。

    3、绕过方法

    畸形后缀名

    4、windows特性

    1)上传shell.php

    2)NTFS ADS特性

    ​ 上传shell.php::$DATA
    ​ 上传test.jpg..
    ​ 上传1.php<>之类的后缀名
    ​ 上传1.php:.jpg
    ​ 1.php:jpg这类文件在上传后,在Windows中会被保存为-个空的1.php文件,然可以再上传一个1.php<>或者1.php<<或者其他Windows不允许的后缀,就会覆盖前边那个空的1.php

    5、其他方式

    大小写、双写、结合Apache解析漏洞、.htaccess、.user.ini等

    白名单过滤

    1、白名单过滤

    ​ 使用白名单限制上传文件类型,通过检测文件内容判断文件类型,限制上传文件只能为一些无危害的文件,包括但不限于: jipg、 png、 bmp、txt、 zip、 rar、 mp3等例如:比如:在用户头像的地方,我们只允许上传图片类型的文件。那么就可以通过以下的方式来检测:
    1、前端判断
    2、文件类型判断
    3、后缀名判断
    4、文件内容

    2、绕过方式

    针对白名单,使用的绕过手法:

    1)00截断
    2)解析漏洞
    3)文件包含
    4)条件竞争上传
    Web服务器处理多用户请求时,是并发进行的,如果并发处理不当或者是相关的逻辑操作设计的不合理时,就可能导致条件竞争漏洞。

    Apache解析漏洞

    1、Apache解析漏洞成因

    由于Apache识别文件的规则是根据后缀名从右往左进行识别,遇到不在识别范围内就会自动忽略,往左进行识别,如果左边是在解析范围内的就会正常解析,而-般程序进行判断文件是否允许上传是根据最后的后缀名进行判断的。

    2、漏洞利用条件

    存在于老版本中:Apache2.0 Apache2.2存在解析漏洞

    3、.htaccess

    (1) .htaccess (超文本访问)许多Web服务器根据目录应用设置的有脑件,允许在运行时覆盖Apache服务器的默认配置。
    (2) .htaccess是一 个完整的文件名, 不仅仅文件的扩名。
    如果.htaccss的代码如下:
    <FilesMatch "1.jpg">
    SetHandler application/x-httpd-php
    </FilesMatch>

    Nginx解析漏洞

    1、配置错误导致的解析漏洞

    对于任意文件名,在后面加上/任意文件名php后该文件就会以php格式进行解析,用户配置不当造成的

    2、00截断

    Nginx版本: 0.5,0.6,0.7 <=0.7.65,0.8 <= 0.8.37
    需要很老的版本才可以,00截断也和php版本有关系。

    3、CVE-2013-4547

    Nginx版本: 0.8.41~1.4.3, 1.5<=1.5.7
    使用方法:
    (1) . 上传文件名如: 1.jpg空格
    (2)问例如: 1.jp..php .
    (3)访问的时候抓包,修改后缀为1.jpg[0x20][0x00][0x2e]php (使用burp修改, 调整hex即呵)
    (4)修改后进行访问就会发现ipg劉会被当做php解析

    4、使用.user.ini绕过黑名单

    使用条件:
    (1)服务器脚本语言为PHP服务器使用CGI / FastCGI模式
    (2)上传目录下要有可执行的php文件 例如: PHP study中使用nginx中间件的时候就可以进行实验。

    使用方式:
    (1)上传一张图片
    (2)上传 .user.ini文件。内容为:auto_prepend_file=2.png (这一句即可)
    (3)访问: htp://P/pload/2.png/xx.php (目录中存在的一个php文件)

    IIS解析漏洞

    1、 IIS 5.x-6.x

    (1)目录解析 www.xxx.com/xx.asp/xx.jpg
    (2)文件解析 www.xxx.com/xx.asp;jpg

    2、 IIS 7.0-7.5

    Upload/1.jpg/* .php
    我们把下面的代码,插入到-张图片中。
    <?php fputs(fopen('shell.php','w"),'<?php @eval(S_ POST[x])?>')?>
    那么,访问x.x.x/upload/1.jpg/.php,就会在当前目录生成一个木马

  • 相关阅读:
    Linux 显示当前时间
    Jenkins 更改工作目录;
    Jenkins 编译 .net 项目
    Jenkins 通过 maven 构建编译 JAVA 项目环境
    Jenkins
    Zatree
    Zabbix 邮件报警示例
    Zabbix 短信报警示例
    Linux 检测出口IP地址
    数据结构与算法面试题80道(4)
  • 原文地址:https://www.cnblogs.com/thresh/p/13351774.html
Copyright © 2011-2022 走看看