什么是文件上传漏洞

  文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这样的攻击。文件上传为什么会是漏洞呢?文件上传本身是没有问题的,问题是文件上传后看服务器怎么来处理,怎么来解析这个文件。如果说服务器处理的模式不够安全,那么就会导致严重的后果,也就是上传了恶意的可执行文件以后,服务器端对此文件进行执行。

  文件上传后导致的安全问题

  上传的文件是web脚本语言,服务器的web容器解释并执行了文件上传的web脚本,导致了代码的执行。另外,上传文件是flash的策略文件,黑客可以通过控制flash在该域下的行为,来进行其他攻击。上传文件是病毒,木马文件,那攻击者可以诱使文件中其他的人员下载执行。文件上传也有可能是钓鱼图片,或者包含了脚本文件的图片,在某些版本的浏览器中,这些脚本文件会被执行,可以用来做钓鱼攻击。除此以外,还有一些不常见的利用方法,比如将一个文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块,或者上传一个合法的文件,其内容包含了php的代码,再通过文件包含,来执行这个脚本。

  完成攻击的条件

  在大多数情况下,文件上传漏洞一般是指上传web脚本能够被服务器解析的问题,也就是通常说的web shell的问题,要完成这个攻击,需要满足以下几个条件:

  首先上传的文件能够被web容器解释执行,所以文件上传后的目录要是web容器所覆盖的路径。其次,web服务器能够访问这个文件,如果文件上传了,但用户无法通过web访问,那攻击者即使上传了这个文件也是访问不到这个文件的,这样的话,上传也就不能被利用。最后用户上传的文件被安全监测格式化,图片压缩等改变了内容,就有可能导致这个文件解析失败。

  文件上传的场景

  对网站熟悉的人都了解,比如我们要发布一个内容,而且是图文信息,那我可能会上传一些图片、附件。

  如何利用上传

  同样dvwa的环境

  先构造一个文件 保存为脚本文件1.php输入内容如下:

  <?php

  phpinfo();

  ?>

  先使用低安全级别,也就是没有防御看如何上传

  Upload后可以看到1.php被成功上传,访问上传的目录位置

  可以看到上传的脚本被执行,没有对文件后缀名做任何判断就直接接收了此文件,并且执行。

  如果说上传的脚本是一个web shell后门,那我们就可以直接获取到服务器的控制权限,

  低安全级别的实现,获取到文件以后,直接将这个文件移动到目录下,没有做任何判断。

  中安全级别,这里做了一个简单的判断,只允许文件类型为jpeg上传,这样的过滤或处理虽然能达到一定的效果,比如,刚才的脚本就不能被上传。

  再次上传1.php,我们可以看到没有反馈,文件上传失败。实际上这种防御方式是非常容易被绕过的,我么可以利用之前介绍的工具burpsuite,这个工具是一个代理抓包的工具,也就是我可以设置浏览器代理。浏览器在访问的时候,所有的数据请求都会通过这个工具,这个工具通过截断处理后再提交给web服务器,进而做出相应,这个时候,如果我在上传的时候还是1.php,但实际上,会先通过这个工具抓包截断,把我的文件头信息改成图片头信息,再进行提交。这个时候,我们就可以很轻易的绕过这个防御机制,进而达到上传的效果

文章来源:麦子学院

原文链接:http://www.maiziedu.com/wiki/websafety/fileupload/

Web应用安全之文件上传漏洞详解的更多相关文章

  1. Struts2+Uploadify文件上传使用详解

    Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例是php版本的,本文将详细介绍Uploadify在java中的使用,您也可以点击下面的链接进行演示或下 ...

  2. WEB服务端安全---文件上传漏洞

    1.简述 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力.这种攻击方式是最直接和有效的,而且互联网中我们经常会用到文件上传功能,它本身是没有问题的,正常的业 ...

  3. [web安全原理分析]-文件上传漏洞基础

    简介 前端JS过滤绕过 待更新... 文件名过滤绕过 待更新 Content-type过滤绕过 Content-Type用于定义网络文件的类型和网页编码,用来告诉文件接收方以什么形式.什么编码读取这个 ...

  4. php文件上传原理详解(含源码)

    1.文件上传原理 将客户端的文件上传到服务器,再将服务器的临时文件上传到指定目录 2.客户端配置 提交表单 表单的发送方式为post 添加enctype="multipart/form-da ...

  5. jquery组件WebUploader文件上传用法详解

    这篇文章主要为大家详细介绍了jquery组件WebUploader文件上传用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

  6. FastDFS的配置、部署与API使用解读(8)FastDFS多种文件上传接口详解(转)

    1.StorageClient与StorageClient1的区别 相信使用happy_fish的FastDFS的童鞋们,一定都熟悉StorageClient了,或者你熟悉的是StorageClien ...

  7. ASP.Net大文件上传组件详解

    首先右键单击网站根目录,在弹出的快捷菜单中,选择"添加引用"菜单项,弹出"添加引用",切换到"浏览"找到组件的Dll文件"Best ...

  8. WEB安全:文件上传漏洞

    文件上传漏洞过程 用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力. 一般的情况有: 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行: ...

  9. web服务端安全之文件上传漏洞

    一.文件上传漏洞的原理 由于程序代码未对用户提交的文件进行严格的分析和检查,导致攻击者可以上传可执行的代码文件,从而获取web应用的控制权限. 常见于上传功能,富文本编辑器. 二.文件上传漏洞的防御 ...

随机推荐

  1. Java猜拳小游戏(剪刀、石头、布)

    1.第一种实现方法,调用Random数据包,直接根据“1.2.3”输出“剪刀.石头.布”.主要用了9条输出判断语句. import java.util.Random; import java.util ...

  2. IB交换机配置命令总结

    串口通过远程CRT登录,波特率9600用户名和密码都是adminDo you want to use the wizard for initial configuration?选择no打开ip rou ...

  3. Mysql 插入部分字段问题

    1. 字段如果不设置auto_increment和default的值,是不允许插入表的. 2. insert into student(id, name) values("1", ...

  4. lua里面求int数组的union,diff,inter,distinct 方法实现

    --利用lua中的table是哈希表这一点进行计算 function lua_distinct_union (union_t1,union_t2) if(union_t2==nil) then uni ...

  5. js获取倒计时

    <html> <head> <title>出错啦~~~</title> <link href="css/login1.css" ...

  6. [转]Maven 划分模块

    所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块,multi-module)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...

  7. Eclipse 包排版问题

    问题描述: 在Eclipse中,项目结构如下所示: 这样的显示方式,查找内容太不方便.使用不习惯. 解决方法: Eclipse中默认包的显示方式为flat,使其改为Hierarchical. 操作步骤 ...

  8. 定时自动关闭messagebox

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. html5实战2

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <meta http-e ...

  10. shell 知识

    解压 tar.bz2文件 bunzip2 linux-2.6.13.tar.bz2 | tar xvf -