首页 > 代码库 > Web应用安全之文件上传漏洞详解

Web应用安全之文件上传漏洞详解

  什么是文件上传漏洞

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

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

  上传的文件是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应用安全之文件上传漏洞详解