web安全之文件上传漏洞攻击与防范方法

2019独角兽企业重金招聘Python工程师标准>>> hot3.png


一、 文件上传漏洞与WebShell的关系

文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,部分文件上传漏洞的利用技术门槛非常的低,对于攻击者来说很容易实施。

文件上传漏洞本身就是一个危害巨大的漏洞,WebShell更是将这种漏洞的利用无限扩大。大多数的上传漏洞被利用后攻击者都会留下WebShell以方便后续进入系统。攻击者在受影响系统放置或者插入WebShell后,可通过该WebShell更轻松,更隐蔽的在服务中为所欲为。

这里需要特别说明的是上传漏洞的利用经常会使用WebShell,而WebShell的植入远不止文件上传这一种方式。

1 Webshell简介

WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门。攻击者在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的(可以上传下载或者修改文件,操作数据库,执行任意命令等)。

WebShell后门隐蔽较性高,可以轻松穿越防火墙,访问WebShell时不会留下系统日志,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员不容易发现入侵痕迹。攻击者可以将WebShell隐藏在正常文件中并修改文件时间增强隐蔽性,也可以采用一些函数对WebShell进行编码或者拼接以规避检测。除此之外,通过一句话木马的小马来提交功能更强大的大马可以更容易通过应用本身的检测。<?php eval($_POST[a]); ?>就是一个最常见最原始的小马,以此为基础也涌现了很多变种,如<script language="php">eval($_POST[a]);</script>等。

2 文件上传漏洞原理

大部分的网站和应用系统都有上传功能,一些文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过Web访问的目录上传任意PHP文件,并能够将这些文件传递给PHP解释器,就可以在远程服务器上执行任意PHP脚本。

当系统存在文件上传漏洞时攻击者可以将病毒,木马,WebShell,其他恶意脚本或者是包含了脚本的图片上传到服务器,这些文件将对攻击者后续攻击提供便利。根据具体漏洞的差异,此处上传的脚本可以是正常后缀的PHP,ASP以及JSP脚本,也可以是篡改后缀后的这几类脚本。

上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接自动运行;

上传文件是WebShell时,攻击者可通过这些网页后门执行命令并控制服务器;

上传文件是其他恶意脚本时,攻击者可直接执行脚本进行攻击;

上传文件是恶意图片时,图片中可能包含了脚本,加载或者点击这些图片时脚本会悄无声息的执行;

上传文件是伪装成正常后缀的恶意脚本时,攻击者可借助本地文件包含漏洞(Local File Include)执行该文件。如将bad.php文件改名为bad.doc上传到服务器,再通过PHP的include,include_once,require,require_once等函数包含执行。

此处造成恶意文件上传的原因主要有三种:

文件上传时检查不严。没有进行文件格式检查。一些应用仅仅在客户端进行了检查,而在专业的攻击者眼里几乎所有的客户端检查都等于没有检查,攻击者可以通过NC,Fiddler等断点上传工具轻松绕过客户端的检查。一些应用虽然在服务器端进行了黑名单检查,但是却可能忽略了大小写,如将.php改为.Php即可绕过检查;一些应用虽然在服务器端进行了白名单检查却忽略了%00截断符,如应用本来只允许上传jpg图片,那么可以构造文件名为xxx.php%00.jpg,其中%00为十六进制的0x00字符,.jpg骗过了应用的上传文件类型检测,但对于服务器来说,因为%00字符截断的关系,最终上传的文件变成了xxx.php。

文件上传后修改文件名时处理不当。一些应用在服务器端进行了完整的黑名单和白名单过滤,在修改已上传文件文件名时却百密一疏,允许用户修改文件后缀。如应用只能上传.doc文件时攻击者可以先将.php文件后缀修改为.doc,成功上传后在修改文件名时将后缀改回.php。

使用第三方插件时引入。好多应用都引用了带有文件上传功能的第三方插件,这些插件的文件上传功能实现上可能有漏洞,攻击者可通过这些漏洞进行文件上传攻击。如著名的博客平台WordPress就有丰富的插件,而这些插件中每年都会被挖掘出大量的文件上传漏洞。

3 文件上传攻击实例

前文已经提到造成文件上传漏洞的原因有多种,下面以其中的第二种为例,选取 LibrettoCMS文件上传漏洞(漏洞exploit-db编号为60560)详解整个漏洞的利用过程。

Libretto是一款使用PHP语言和MySQL语言开发的内容管理系统。LibrettoCMS 2.2.2版本允许未验证的用户上传文件,并且可以对已上传的文件进行后缀名修改。虽然系统限制用户只能上传doc和pdf格式的文件,但修改文件名时处理错误,导致用户可修改文件后缀名。攻击者可以将恶意文件后缀改为doc或者pdf,上传成功后再将后缀修改为php即可执行。

l 上传doc后缀的WebShell

访问该系统的文件管理页面/plugins/pgrfilemanager/PGRFileManager.php,上传一个正常的doc文件,发现可以上传成功。编写一个PHP语言的WebShell后门,也可以从网上下载已有的WebShell,并将WebShell文件的后缀修改为doc,此处将myshell.php后门修改为myshell.doc。

准备好WebShell以后访问PGRFileManager.php文件管理页面将myshell.doc上传到服务器,如图1所示,doc后缀的myshell已经成功上传。此时通过浏览器访问该doc格式的myshell是无法正常执行的。

 

图1 mybshell.doc成功上传

l 将WebShell后缀改为php

在文件管理页面右键点击mybshell.doc并选择rename进入修改文件名称页面,将mybshell.doc改为mybshell.php并点击Ok按钮提交修改结果(如图2所示)。此时myshell文件的后缀已被成功修改了php,受该应用编码实现影响文件管理页面已经无法读取myshell.php文件,但我们在系统服务器的文件上传目录里可以看见修改后的文件(如图3所示)。

 

图2 将mybshell.doc修改为mybshell.php

 

图3 服务器里myshell后缀已改为php

l 执行Webshell

此时服务器上传目录里的WebShell已经是php后缀,服务器环境已可以正常解析,通过浏览器直接访问该文件:http://192.168.20.174/vlun/Mylibretto/userfiles/myshell.php,输入WebShell中我们设置的密码即可登录到该WebShell页面(如图4所示)。从图中我们可以看到,仅通过该WebShell文件攻击者就可以在服务器上进行文件管理,数据库管理,执行系统命令,执行任意PHP代码。借助该WebShell,攻击者可以将其他WebShell文件放置到更深层的目录中,或者将PHP后门代码直接添加到系统中已有的很少用的php文件中以防止被系统管理员发现。

 

图4 成功访问WebShell后门

4 文件上传漏洞防御

首先,上传的文件能够被Web容器解释执行。所以文件上传后所在的目录要是Web容器所覆盖到的路径。
其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器解释这个脚本,那么也不能称之为漏洞。
最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。

防范文件上传漏洞常见的几种方法。

1、文件上传的目录设置为不可执行

只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

2、判断文件类型

在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

3、使用随机数改写文件名和文件路径

文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

4、单独设置文件服务器的域名

由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

 

l 系统开发阶段的防御

系统开发人员应有较强的安全意识,尤其是采用PHP语言开发系统。在系统开发阶段应充分考虑系统的安全性。对文件上传漏洞来说,最好能在客户端和服务器端对用户上传的文件名和文件路径等项目分别进行严格的检查。客户端的检查虽然对技术较好的攻击者来说可以借助工具绕过,但是这也可以阻挡一些基本的试探。服务器端的检查最好使用白名单过滤的方法,这样能防止大小写等方式的绕过,同时还需对%00截断符进行检测,对HTTP包头的content-type也和上传文件的大小也需要进行检查。

l 系统运行阶段的防御

系统上线后运维人员应有较强的安全意思,积极使用多个安全检测工具对系统进行安全扫描,及时发现潜在漏洞并修复。定时查看系统日志,web服务器日志以发现入侵痕迹。定时关注系统所使用到的第三方插件的更新情况,如有新版本发布建议及时更新,如果第三方插件被爆有安全漏洞更应立即进行修补。对于整个网站都是使用的开源代码或者使用网上的框架搭建的网站来说,尤其要注意漏洞的自查和软件版本及补丁的更新,上传功能非必选可以直接删除。除对系统自生的维护外,服务器应进行合理配置,非必选一般的目录都应去掉执行权限,上传目录可配置为只读。

l 安全设备的防御

文件上传攻击的本质就是将恶意文件或者脚本上传到服务器,专业的安全设备防御此类漏洞主要是通过对漏洞的上传利用行为和恶意文件的上传过程进行检测。恶意文件千变万化,隐藏手法也不断推陈出新,对普通的系统管理员来说可以通过部署安全设备来帮助防御。目前华三通信公司发布的SecPath IPS系列产品经过长期的积累,不但可以基于行为对网络中大量文件上传漏洞的利用进行检测,同时还能基于内容对恶意文件进行识别。

二、 结束语

对攻击者来说,文件上传漏洞一直都是获取服务器shell的重要途径。对系统维护人员来说,文件上传漏洞的巨大危害也无须赘述,积极学习,深入了解漏洞的相关知识可以更从容的面对这类攻击

 

转载自:http://www.h3c.com.cn/About_H3C/Company_Publication/IP_Lh/2014/05/Home/Catalog/201408/839582_30008_0.htm

 

 

转载于:https://my.oschina.net/u/3477605/blog/3057669

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536423.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rabbit and Grass【博弈】

Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4728 Accepted Submission(s): 3592 Problem Description 大学时光是浪漫的&#xff0c;女生是浪漫的&#xff0c;圣诞更是浪漫的&#xff…

苹果可弯曲屏幕新专利获准,折叠iPhone最快2020年现身?

当三星Galaxy Fold、华为Mate X等折叠手机陆续问世时&#xff0c;所有果粉都想问一个问题折叠iPhone在哪里&#xff1f;就在最近有报导指出&#xff0c;苹果获得一项关于折叠屏幕的新专利。新专利出炉&#xff0c;但折叠iPhone还要再等等。本周二&#xff0c;美国专利与商标局授…

Google File System 学习笔记

GFS翻译&#xff1a;https://www.cnblogs.com/cxxjohnson/p/4984309.html 一、GFS架构&#xff1a; 二、保存文件的方式 1、保存小文件&#xff1a;磁盘中分块&#xff0c;每个block大小为1024Byte,每个文件的索引由块号偏置组成 2、保存大文件&#xff1a;把block换成chunk,每…

探讨奇技淫巧

2019独角兽企业重金招聘Python工程师标准>>> 探讨奇技淫巧 起源 在工程实践中&#xff0c;我们常常会遇到一些奇技淫巧。所谓奇技淫巧&#xff0c;就是官方在设计或者实践中并未想象出的代码风格或者使用场景。其实也就是类似于 react 的 hoc,本来源自于社区&#x…

Web框架之Django_01初识(三大主流web框架、Django安装、Django项目创建方式及其相关配置、Django基础三件套:HttpResponse、render、redirect)...

摘要&#xff1a; Web框架概述 Django简介 Django项目创建 Django基础必备三件套(HttpResponse、render、redirect) 一、Web框架概述&#xff1a; Python三大主流Web框架&#xff1a; Django&#xff1a;大而全&#xff0c;自带了很多功能模块&#xff0c;类似于航空母舰&am…

Bone Collector【01背包】

F - Bone Collector HDU - 2602 Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave … The bone collector had a big bag wit…

Gamma阶段第八次scrum meeting

每日任务内容 队员昨日完成任务明日要完成的任务张圆宁#91 用户体验与优化https://github.com/rRetr0Git/rateMyCourse/issues/91&#xff08;持续完成&#xff09;#91 用户体验与优化https://github.com/rRetr0Git/rateMyCourse/issues/91牛宇航#86 重置密码的后端逻辑https:/…

索引失效

转载于:https://blog.51cto.com/11009785/2406488

WordPress忘记密码的5种解决方法

为什么80%的码农都做不了架构师&#xff1f;>>> 无意中忘记wordpress的密码了&#xff0c;恰巧在后台又没来得及设置邮件&#xff0c;只好四处苦寻解决办法&#xff0c;还好总算找到了…… 1. WordPress内置的找加密码方法 如果你的admin帐户的电子邮件地址是正确的…

在linux上执行.net Console apps

为什么80%的码农都做不了架构师&#xff1f;>>> 有个程序&#xff0c;在.net下写了半天&#xff0c;总算跑起来了&#xff0c;发现有个问题&#xff0c;在windows上不好弄&#xff0c;而同事前一段时间已经有Linux下的解决方法了&#xff0c;于是想直接将.net程序放…

Android4.0设置界面修改总结

为什么80%的码农都做不了架构师&#xff1f;>>> 笔者前段时间完成设置的圆角item风格的修改&#xff0c;但最近&#xff0c;客户新增需求&#xff0c;想把设置做成Tab风格的&#xff0c;没办法&#xff0c;顾客就是上帝&#xff0c;咱得改啊。今天算是初步改完了&a…

Android之仿网易V3.5新特性

为什么80%的码农都做不了架构师&#xff1f;>>> 最近&#xff0c;网易新闻更新到V3.5了&#xff0c;给我印象最深的是第一次进应用时显示新特性的ViewPager变成垂直滑动了。于是&#xff0c;小小的模仿了一下&#xff0c;我们来看看效果&#xff1a; 本文源码下载地…

Android_内存泄露

2019独角兽企业重金招聘Python工程师标准>>> 1.资源对象没关闭造成的内存泄漏 描述&#xff1a; 资源性对象比如&#xff08;Cursor&#xff0c;File文件等&#xff09;往往都用了一些缓冲&#xff0c;我们在不使用的时候&#xff0c;应该及时关闭它们&#xff0c;以…

CYQ.Data 轻量数据层之路 使用篇三曲 MAction 取值赋值(十四)

2019独角兽企业重金招聘Python工程师标准>>> 上一篇&#xff1a;CYQ.Data 轻量数据层之路 使用篇二曲 MAction 数据查询(十三&#xff09; 内容概要 本篇继续上一篇内容&#xff0c;本节介绍所有取值与赋值的相关操作。1&#xff1a;原生&#xff1a;像操作Row一样…

CYQ.Data 数据框架 发放V1.5版本源码

2019独角兽企业重金招聘Python工程师标准>>> 本篇的内容很简单&#xff0c;就发放V1.5版本源码&#xff0c;同时补充了所有发布版本的API文档。 具体相关下载地址见&#xff1a; 秋色园下载中心&#xff1a;http://www.cyqdata.com/download/article-detail-426 如何…

爱说说技术原理:与TXT交互及MDataTable对Json的功能扩展(二)

2019独角兽企业重金招聘Python工程师标准>>> 关于爱说说在技术选型的文章见&#xff1a;"爱说说"技术原理方案的定选思考过程 本篇将讲述“爱说说”比较重大的技术问题点及解决手段&#xff1a; 爱说说&#xff1a;http://speak.cyqdata.com/ 杂说几句&am…

如何制作VSPackage的安装程序

2019独角兽企业重金招聘Python工程师标准>>> 第一步&#xff0c;生成一个REG文件&#xff1a; 收钱进入目录: C:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Tools\Bin 这是SDK的目录&#xff0c;使用regpkg.exe 命令 命令格式为: …

MyBatis学习总结(1)——MyBatis快速入门

2019独角兽企业重金招聘Python工程师标准>>> 一、Mybatis介绍 MyBatis是一个支持普通SQL查询&#xff0c;存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和…

MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建

2019独角兽企业重金招聘Python工程师标准>>> 这次换了台电脑&#xff0c;所以需要重新配置一次项目开发环境&#xff0c;过程中的种种&#xff0c;记录下来&#xff0c;便于以后再次安装&#xff0c;同时给大家一个参考。 1.JDK的安装 首先下载JDK&#xff0c;这个从…

Java基础学习总结(10)——static关键字

2019独角兽企业重金招聘Python工程师标准>>> 一、static关键字 原来一个类里面的成员变量&#xff0c;每new一个对象&#xff0c;这个对象就有一份自己的成员变量&#xff0c;因为这些成员变量都不是静态成员变量。对于static成员变量来说&#xff0c;这个成员变量只…