任意文件上传漏洞

先来几个一句话木马看看

<%execute(request("value"))%>   #asp木马
<?php eval($_POST["value"]);?> #php木马
<%@ Page Language="Jscript"%> <%eval(Request.Item["value"])%> #aspx木马
<?php echo file_get_contents('/path/to/target/file'); ?> #读取服务器中的敏感文件
<?php echo system($_GET['command']); ?> #利用command参数执行系统命令

漏洞原理

  web应用程序没有对可上传的文件类型,文件内容等作严格过滤,或者web服务器的解析漏洞没有及时修复,导致攻击者可上传恶意的脚本文件,获得执行服务端命令的能力。

漏洞利用

  1.如果没有对上传的文件名进行严格验证,或者对上传的文件进行重命名,攻击者就可以上传同名文件,对原有文件进行覆盖。

  2.未验证上传文件的大小,攻击者可以上传巨大的文件,占用可利用磁盘空间。

  3.上传一句话木马,利用蚁箭等工具进行远程连接,从而控制服务器。

检测机制

  客户端js验证:这种不可靠,可以用来提示用户可上传的文件类型,攻击者可以直接通过抓包工具进行绕过。

  MIME类型检测:通过检测MIME类型,判断用户上传的文件是否合法,但是攻击者可以抓包修改Content-Type:字段来绕过。

  文件后缀检测:检测文件的后缀名,如果不是合法的后缀,禁止上传,最好用白名单进行过滤可上传的文件后缀。如果是黑名单检测,就有很多绕过方式:00截断;大小写绕过 ;双写绕过,如果后端验证时,直接将检测到的不合法后缀去掉,我们就可以双写来绕过;.htaccess文件上传,首先上传一个.htaccess文件,让服务器可以解析我们上传的指定文件名,之后将我们的木马文件名设置为.htaccess中指定的文件名,上传以后,就可以在服务端执行。

  文件内容检测:服务端检测文件的内容,通常会检查文件头,可以构造图片码绕过。

绕过方式

黑名单绕过

  1. 00截断:

  抓包我们上传的文件,将请求包中的文件名修改为test.php%00.jpg,在许多语言的函数中,字符串处理函数中会将0x00识别为终止符,会将00后的.jpg去掉,导致攻击者上传成功木马文件。

  如果文件名是get方式传输的,直接在文件名中加%00,如果是post方式提交数据的,需要在16进制中加00 ,因为post中直接加%00不会被自动url解码。

  2. 黑名单过滤不全:

  上传.php3、.php5、index.html、等文件,这种情况发生在,如果黑名单对可执行的文件过滤不全的情况下,可以上传。

  3. 特殊文件名绕过:

  在文件的后缀名后加点或者空格,Windows系统会自动将最后面的点或者空格去掉,导致上传成功,但是Linux系统这种方法不行。

  4. 大小写、双写绕过、url编码绕过:

  将文件名中的点、斜杠、反斜杠url编码或者二次url编码,如果验证文件扩展名时没有进行url解码,但是在服务器端进行url解码了,我们就可以绕过限制。例如上传 test%2Ephp

  5. .htaccess文件攻击:

  只在apache服务中,存在该文件。这种方法可以绕过白名单检测。

<FilesMatch "aa">
SetHandler application/x-httpd-php
</FilesMatch>

  我们首先上传一个.htaccess文件,文件中指定任意的文件名当做代码文件来解析,之后上传指定文件名的文件,就可以执行文件中的代码。

白名单绕过

  1.htaccess文件攻击

  2. 00截断

  3. 寻找其他测试的上传文件接口:

  如果可上传的文件是白名单验证的,我们就可以找一些其他的上传接口,通常一些测试接口是没有做限制的,可上传任意文件。

MIME类型检测绕过

  通过指定MIME类型,让浏览器遇到该扩展名的文件时,知道使用指定的应用程序来打开该文件。

如果上传时提示文件类型不正确,我们可以抓包修改Content-Type字段值,修改为对应的值,就可以上传木马文件。

服务器解析漏洞

  1. Apache解析漏洞:apache 2.0-2.2版本可能存在该漏洞。

  Apache解析文件的顺序是从右往左进行的,如果后面不存在能够解析的后缀,默认会向前解析,直至遇到能够解析的后缀。

文件名设置为 test.php.abo.ddd.eee,当我们成功上传这个文件后,访问它,服务器就会把它当做php文件来执行。

  只有php5.3以下和apache联动才会有module模式,会出现这种漏洞
  ​1)如果在Apache的conf里有这样一行配置AddHandler php5-script.php,这时只要文件名里包含.php,即使文件名是test2.php.jpg也会以PHP来执行。
  2)如果在Apache的conf里有这样一行配置AddType application/x-httpd-php.jpg,即使扩展名是jpg,一样能以PHP方式执行。

  2.IIS 6.0解析漏洞

  (1). 目录解析:

   创建一个.asp的文件夹,IIS 5.x-6.x版本的服务器,会将该文件夹下的所有文件(不管文件后缀是什么)都会当做asp文件来解析。
  (2). 文件解析:
  服务器默认不解析分号;后面的内容,我们将需要上传的木马文件名修改为 test.asp;.jpg ,上传以后,就会保存为test.asp文件,从而进行解析,拿到webshell 。
  (3). IIS 6.0 默认的可执行文件后缀除了 .asp ,还有 .asa   .cer   .cdx

  3. nginx解析漏洞

  当url中有不存在的文件时,php默认向前解析,并且是以不存在的文件后缀去解析前一个文件的。

  我们访问www.213.com/test.jpg/1.php ,当不存在1.php时,会向前解析,解析test.php。

文件内容检测绕过

  把代码文件和图片合成二进制文件,保存为新的图片,但是上传时,还要上传为.php的后缀,才能够被解析。

  Windows系统中,打开cmd命令框,输入:

copy /b 1.png+test.php = 2.png  

  或者利用ExifTool工具来制做图片码

exiftool -Comment="<?php echo 'START ' . file_get_contents('/home/carlos/secret') . ' END'; ?>" <YOUR-INPUT-IMAGE>.jpg -o polyglot.php

PUT方法写入文件

  某些web服务器配置支持PUT方法来提交数据。如果没有防御措施,那么攻击者就可以利用PUT方法来向服务器写入恶意文件。

PUT /images/exploit.php HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-httpd-php
Content-Length: 49 <?php echo file_get_contents('/path/to/file'); ?>

防御方法

  1.上传文件的存储目录,不给执行权限。(但是也要防止将源代码回显到前端页面,这样会造成信息泄露)也要防止攻击者通过目录遍历../ 将恶意文件上传到上一级目录,有可能上一级目录有执行权限。

  2. 上传的文件进行重命名。

  3. 对可上传的文件类型进行白名单校验,只允许上传可靠的文件类型。

  4.及时更新web应用软件,防止解析漏洞的发生。

  5.不能存在本地文件包含漏洞:如果存在本地文件包含漏洞,攻击者就可以上传任意的文件,再结合本地文件包含漏洞,去执行上传的文件。

 
 
 
 
 
 
 

任意文件上传漏洞syr的更多相关文章

  1. 【原创】JEECMS v6~v7任意文件上传漏洞(1)

    文章作者:rebeyond 受影响版本:v6~v7 漏洞说明: JEECMS是国内Java版开源网站内容管理系统(java cms.jsp cms)的简称.该系统基于java技术开发,继承其强大.稳定 ...

  2. 中国电信某站点JBOSS任意文件上传漏洞

    1.目标站点 http://125.69.112.239/login.jsp 2.简单测试 发现是jboss,HEAD请求头绕过失败,猜测弱口令失败,发现没有删除 http://125.69.112. ...

  3. CKFinder 1.4.3 任意文件上传漏洞

    CKFinder 是国外一款非常流行的所见即所得文字编辑器,其1.4.3 asp.net版本存在任意文件上传漏洞,攻击者可以利用该漏洞上传任意文件. CKFinder在上传文件的时候,强制将文件名(不 ...

  4. WordPress Contact Form 7插件任意文件上传漏洞

    漏洞名称: WordPress Contact Form 7插件任意文件上传漏洞 CNNVD编号: CNNVD-201311-415 发布时间: 2013-11-28 更新时间: 2013-11-28 ...

  5. WordPress Suco Themes ‘themify-ajax.php’任意文件上传漏洞

    漏洞名称: WordPress Suco Themes ‘themify-ajax.php’任意文件上传漏洞 CNNVD编号: CNNVD-201311-403 发布时间: 2013-11-28 更新 ...

  6. WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞

    漏洞名称: WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞 CNNVD编号: CNNVD-201311-127 发布时间: 2013-11-12 ...

  7. WordPress Think Responsive Themes ‘upload_settings_image.php’任意文件上传漏洞

    漏洞名称: WordPress Think Responsive Themes ‘upload_settings_image.php’任意文件上传漏洞 CNNVD编号: CNNVD-201311-06 ...

  8. WordPress Checkout插件跨站脚本漏洞和任意文件上传漏洞

    漏洞名称: WordPress Checkout插件跨站脚本漏洞和任意文件上传漏洞 CNNVD编号: CNNVD-201311-015 发布时间: 2013-11-04 更新时间: 2013-11-0 ...

  9. WordPress Lazy SEO插件lazyseo.php脚本任意文件上传漏洞

    漏洞名称: WordPress Lazy SEO插件lazyseo.php脚本任意文件上传漏洞 CNNVD编号: CNNVD-201309-446 发布时间: 2013-09-26 更新时间: 201 ...

随机推荐

  1. Nginx日志配置及日志分析脚本案例

    https://blog.csdn.net/bbwangj/article/details/82186162 nginx的log日志分为access log 和 error log 其中access ...

  2. [ SQLAlchemy ] 经验总结、QA

    1.filter 和 filter_by [ 共同点 ]:查询后,用于过滤数据 [ 不同点 ]: 1.filter:过滤查询后的数据,用SQL表达式 session.query(MyClass).fi ...

  3. Apache Ant: If 和 Unless

    目录 If And Unless If And Unless 从 Ant 1.9.1 起,可以在所有的任务和嵌套的元素上以特别的命名空间添加 if 和 unless 属性. In order to u ...

  4. Centos7 文件修改详情

    Centos常规修改信息 记录文件在系统中的意义 /etc/locale.conf ---修改字符集文件 /etc/profile ---修改环境变量

  5. Linux上天之路(十七)之Shell编程二

    一.shell常用工具 grep 1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Exp ...

  6. Hive的导入导出和常用过滤语句的学习

    原文: https://www.toutiao.com/i6769166601871688196/?group_id=6769166601871688196 数据的导入 load data [loca ...

  7. iOS二进制方案真实落地经验(30分钟降低到10分钟以内)

    iOS二进制方案真实落地经验(30分钟降低到10分钟以内) 我们做iOS二进制化断断续续尝试了一年多了,来来回回换了三个架构师去尝试落地,今日完全落地,在此做个总结 背景 工程基于cocoapod的组 ...

  8. Qt之图片

    widget.h: #ifndef WIDGET_H #define WIDGET_H #include<QPaintEvent> #include <QWidget> #in ...

  9. Redis持久化----RDB和AOF 的区别

    关于Redis说点什么,目前都是使用Redis作为数据缓存,缓存的目标主要是那些需要经常访问的数据,或计算复杂而耗时的数据.缓存的效果就是减少了数据库读的次数,减少了复杂数据的计算次数,从而提高了服务 ...

  10. IoC容器-Bean管理XML方式(创建对象和set注入属性,有参构造注入属性)

    Ioc操作Bean管理 1,什么是Bean管理 (0)Bean管理指的是两个操作 (1)Spring创建对象 (2)Spring注入属性 2,Bean管理操作有两种方式 (1)基于xml配置文件方式实 ...