什么是文件上传漏洞
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是文件上传漏洞相关的知识,希望对你有一定的参考价值。
文件上传漏洞是指:由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。如常见的头像上传,图片上传,oa办公文件上传,媒体上传,允许用户上传文件的地方如果过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中,可以获取服务器的权限,或进一步危害服务器。
非法用户可以上传的恶意文件控制整个网站,甚至是控制服务器,这个恶意脚本文件,又被称为webshell,上传webshell后门之后可查看服务器信息、目录、执行系统命令等。
文件上传的类型:
1、前端js绕过
在文件上传时,用户选择文件时,或者提交时,有些网站会对前端文件名进行验证,一般检测后缀名,是否为上传的格式。如果上传的格式不对,则弹出提示文字。此时数据包并没有提交到服务器,只是在客户端通过js文件进行校验,验证不通过则不会提交到服务器进行处理。
2、修改content-type绕过
有些上传模块,会对http类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败,因为服务端是通过content-type判断类型,content-type在客户端可被修改。
3、绕黑名单
上传模块,有时候会写成黑名单限制,在上传文件的时获取后缀名,再把后缀名与程序中黑名单进行检测,如果后缀名在黑名单的列表内,文件将禁止文件上传。
4、htaccess重写解析绕过
上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess文件的作用是:可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。
在htaccess里写入SetHandlerapplication/x-httpd-php则可以文件重写成php文件。要htaccess的规则生效,则需要在apache开启rewrite重写模块,因为apache是多数都开启这个模块,所以规则一般都生效。
5、大小写绕过
有的上传模块 后缀名采用黑名单判断,但是没有对后缀名的大小写进行严格判断,导致可以更改后缀大小写可以被绕过,如PHP、Php、phP、pHp。
参考技术A 文件上传漏洞:允许用户上传任意文件可能会让攻击者注入危险内容或恶意代码,并在服务器上运行。
任意文件上传漏洞原理:
由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向 某个可通过 Web 访问的目录上传任意PHP 文件,并能够将这些文件传递给 PHP 解释器,就 可以在远程服务器上执行任意PHP 脚本。
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/
以上是关于什么是文件上传漏洞的主要内容,如果未能解决你的问题,请参考以下文章