任意文件上传漏洞

先来几个一句话木马看看

<%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. C# .net 环境下使用rabbitmq消息队列

    消息队列的地位越来越重要,几乎是面试的必问问题了,不会使用几种消息队列都显得尴尬,正好本文使用C#来带你认识rabbitmq消息队列 首先,我们要安装rabbitmq,当然,如果有现成的,也可以使用, ...

  2. js tab栏切换

    <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...

  3. 初识python:time 模版

    语法及示例代码如下: import time # time 时间戳,1970年到当前时间的秒数 print('time:',time.time()) # sleep 延时.睡眠(s) print('s ...

  4. 华为云 Kubernetes 管理员实训 三 课后作业

    Exercise 1 通过Deployment方式,使用redis镜像创建一个pod.通过kubectl获得redis启动日志. Deployment的名称为<hwcka-003-1-你的华为云 ...

  5. vuex获取数据

    cmd窗口vue add vuex后出现store文件夹,在里面的index.js里面设置state属性,可以在视图页面home.vue文件中获取. 方法1: //在项目当中引入router以后 就多 ...

  6. 学习笔记--我的第一个Java程序

    我的第一个Java程序 // pubilc 表示公开的 // class 表示定义一个类 // HelloWorld 表示一个类名 public class HelloWorld { // 表示定义一 ...

  7. eclipse中配置Webdriver

    安装JDK,配置好Java环境 下载Eclipse,并完成安装 下载Webdriver的JAR文件(访问Selenium官网,下载Java版的zip文件,并且解压到本地磁盘,解压后文件夹内容如下图:) ...

  8. 【C】C语言大作业——学生学籍管理系统

    文章目录 学生管理系统 界面 主界面 登陆界面 注册界面 管理界面 学生界面 退出界面 链接 注意 学生管理系统 学C语言时写的一个大作业,弄了一个带图形界面的,使用的是VS配合EasyX图形库进行实 ...

  9. Kotlin 协程一 —— 全面了解 Kotlin 协程

    一.协程的一些前置知识 1.1 进程和线程 1.1.1基本定义 1.1.2为什么要有线程 1.1.3 进程与线程的区别 1.2 协作式与抢占式 1.2.1 协作式 1.2.2 抢占式 1.3 协程 二 ...

  10. IO_FILE——FSOP、house of orange

    FSOP 是 File Stream Oriented  Programming 的缩写.所有的 _IO_FILE 结构会由 _chain 字段连接形成一个链表,由 _IO_list_all 来维护. ...