web安全之⽂件上传漏洞攻击与防范⽅法
⼀、⽂件上传漏洞与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
图4 成功访问WebShell后门
4 ⽂件上传漏洞防御
⾸先,上传的⽂件能够被Web容器解释执⾏。所以⽂件上传后所在的⽬录要是Web容器所覆盖到的路径。
其次,⽤户能够从Web上访问这个⽂件。如果⽂件上传了,但⽤户⽆法通过Web访问,或者⽆法得到Web容器解释这个脚本,那么也不能称之为漏洞。
最后,⽤户上传的⽂件若被安全检查、格式化、图⽚压缩等功能改变了内容,则也可能导致攻击不成功。
防范⽂件上传漏洞常见的⼏种⽅法。
1、⽂件上传的⽬录设置为不可执⾏
只要web容器⽆法解析该⽬录下⾯的⽂件,即使攻击者上传了脚本⽂件,服务器本⾝也不会受到影响,因此这⼀点⾄关重要。
2、判断⽂件类型
在判断⽂件类型时,可以结合使⽤MIME Type、后缀检查等⽅式。在⽂件类型检查中,强烈推荐⽩名单⽅式,⿊名单的⽅式已经⽆数次被证明是不可靠的。此外,对于图⽚的处理,可以使⽤压缩函数或者resize函数,在处理图⽚的同时破坏图⽚中可能包含的HTML代码。
3、使⽤随机数改写⽂件名和⽂件路径
⽂件上传如果要执⾏代码,则需要⽤户能够访问到这个⽂件。在某些环境中,⽤户能上传,但不能访问。如果应⽤了随机数改写了⽂件名和路径,将极⼤地增加攻击的成本。再来就是像shell.php.rar.rar和l这种⽂件,都将因为重命名⽽⽆法攻击。
4、单独设置⽂件服务器的域名
由于浏览器同源策略的关系,⼀系列客户端攻击将失效,⽐如上传l、上传包含script的XSS利⽤等问题将得到解决。
l 系统开发阶段的防御
系统开发⼈员应有较强的安全意识,尤其是采⽤PHP语⾔开发系统。在系统开发阶段应充分考虑系统的安全性。对⽂件上传漏洞来说,最好能在客户端和服务器端对⽤户上传的⽂件名和⽂件路径等项⽬分别进⾏严格的检查。客户端的检查虽然对技术较好的攻击者来说可以借助⼯具绕过,但是这也可以
阻挡⼀些基本的试探。服务器端的检查最好使⽤⽩名单过滤的⽅法,这样能防⽌⼤⼩写等⽅式的绕过,同时还需
对%00截断符进⾏检测,对HTTP包头的content-type也和上传⽂件的⼤⼩也需要进⾏检查。
l 系统运⾏阶段的防御
系统上线后运维⼈员应有较强的安全意思,积极使⽤多个安全检测⼯具对系统进⾏安全扫描,及时发现潜在漏洞并修复。定时查看系统⽇志,web服务器⽇志以发现⼊侵痕迹。定时关注系统所使⽤到的第三⽅插件的更新情况,如有新版本发布建议及时更新,如果第三⽅插件被爆有安全漏洞更应⽴即进⾏修补。对于整个⽹站都是使⽤的开源代码或者使⽤⽹上的框架搭建的⽹站来说,尤其要注意漏洞的⾃查和软件版本及补丁的更新,上传功能⾮必选可以直接删除。除对系统⾃⽣的维护外,服务器应进⾏合理配置,⾮必选⼀般的⽬录都应去掉执⾏权限,上传⽬录可配置为只读。
l 安全设备的防御
asp网页文件的格式⽂件上传攻击的本质就是将恶意⽂件或者脚本上传到服务器,专业的安全设备防御此类漏洞主要是通过对漏洞的上传利⽤⾏为和恶意⽂件的上传过程进⾏检测。恶意⽂件千变万化,隐藏⼿法也不断推陈出新,对普通的系统管理员来说可以通过部署安全设备来帮助防御。⽬前华三通信公司发布的SecPat
h IPS系列产品经过长期的积累,不但可以基于⾏为对⽹络中⼤量⽂件上传漏洞的利⽤进⾏检测,同时还能基于内容对恶意⽂件进⾏识别。
⼆、结束语
对攻击者来说,⽂件上传漏洞⼀直都是获取服务器shell的重要途径。对系统维护⼈员来说,⽂件上传漏洞的巨⼤危害也⽆须赘述,积极学习,深⼊了解漏洞的相关知识可以更从容的⾯对这类攻击

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。