0x00 导言
在本文中,笔者将会简单介绍网站上传漏洞,并最终介绍下防护方法。
0x01 背景
2015年9月15日,某知名网站突然只能访问网站首页,其他页面均不能访问,找到安全狗技术帮忙处理。远程上服务器后发现,网站所有文件都被拷贝到了别的盘符。只留下了首页文件。经过确认,该服务器管理员只有一人,且并未进行过此项操作,因此怀疑是被黑了。
0x02 日志分析
从安全狗日志中能发先大量的入侵尝试,网站扫描,如图:
从安全狗软件日志中分析,安全狗有一定的防护作用,拦截大量攻击、入侵,但网站程序存在漏洞和网马,无法全部拦截,分析入侵者可能通过大量扫描或者通过已知网马绕过,进入服务器获得服务器权限。
从服务器服云告警分析:
iisuser 账号于2015-09-17 03:49:25时间远程登录服务器,IP113.xx.xxx.xx,来源:中国-xx省-xx市。
网马扫描:
通过系统日志分析,如下结果:
1)系统登入日志分析:Thu Sep 17 03:49 分IP113.xx.xxx.35异常异地远程登录服务器。
2)Message日志分析:受到过syn flooding攻击,以及nginx crash记录。
3)Secure日志分析:
4)root用户命令执行路径分析:
入侵者在通过webshell或其他方式获取到root权限(rootkit用户),停止iptables,关闭服务器安全狗所有检测,重新调试、部署resin,关闭nginx,绕过网站安全狗防护。
5)网站程序扫描结果:存在大量webshell、网马。
6)web日志路径分析:
综上所述:IP113.xx.xxx.xx通过已知网马进入服务器获取权限,IP183.xx.xxx.xx通过注册新用户上传图片无过滤,存在上传漏洞,服务器存在多个入侵者,通过网站存在的上传漏洞进行攻击,获取shell,并关闭、躲避安全狗防护,并在网站程序中安插webshell及网马。
0x03 网站上传漏洞入侵概念
网站“上传漏洞”入侵是目前对网站最广泛的入侵方法。
根据调查显示大多数具有上传功能的网站,都存在上传漏洞。 文件上传本身是互联网中最为常见的一种功能需求。例如:QQ头像、微信头像、论坛附件都会进行文件上传的操作需求。一般情况下文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
文件上传漏洞产生的原因:
原因之一:
网站在提供文件上传功能时,未对用户上传的文件进行检测。
例如未限制上传的文件类型,导致该漏洞的产生。
原因之二:
文件上传检查不严谨。
比如只针对文件类型进行限定,攻击者可以使用手动修改POST包然后添加%00字节用于截断某些函数对文件名的判断。如xxx.php[\0].JPG,对于一个只允许上传JPG格式的服务器,此文件就可以绕过文件上传检查。
原因之三:
WEB服务器配置不当。
PUT是在WebDav中定义的一个方法。WebDav大大扩展了HTTP协议中GET、POST、HEAD等功能,它所包含的PUT方法,允许用户上传文件到指定的路径下,容易被攻击者利用。
在许多Web Server中,默认都禁用了此方法,或者对能够上传的文件类型做了严格的限制。但在IIS中,如果目录支持写权限,同时开启了WebDav,则会支持PUT方法,再结合MOVE方法,就能够将原本只允许上传文本文件改写成允许上传脚本文件,从而执行webshell。MOVE能否执行成功,取决于IIS容器是否勾选了“脚本支援访问”复选框,如果勾选了支持,就很容易被攻击者利用。
一般要实施此类攻击,攻击者应先通过OPTIONS方法探测服务器支持的HTTP方法类型,如果支持PUT,则使用PUT上传一个指定的文本文件,最后通过MOVE改写为脚本文件,继而达到攻击目的。
原因之四:
利用文件头部空白段写马。
文件上传漏洞的危害:
1. 攻击者可以直接访问正常上传的文件,利用服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行;
2. 攻击者利用WEB容器解析漏洞,访问非法上传的畸形文件,使用WEB容器解释并执行其中的代码;
3. 攻击者可以上传文件钓鱼图片或为包含了脚本的图片,某些浏览器会作为脚本执行,实施钓鱼或欺诈;
4.遇到只限制上传文件大小的情况,攻击者可以通过文件名称绕过的方式上传一句话木马,再利用IIS解析漏洞,使用中国菜刀之类的工具,与网站服务器上的一句话木马建立连接,不但可以对当前站点的文件进行管理(文件的增加、删除操作均可以执行),而且还可以通过这个方式上传大马,继而直接访问大马文件进行其他操作,最终控制整个服务器。
0x04 网站上传漏洞验证
注册一个普通账号
进入上传照片
直接上传一个网马,上传超过50k,换另外一个小jsp网马(不超过50k)
获取上传的文件地址,直接访问,通过小jsp网马,上传jsp大马
访问上传的jsp大马
访问jsp网马,可以看到服务器相关信息,用的resin
运行resin权限很高
权限很高可以直接添加系统账号
有权限,但添加账号不成功,可能是/etc/passwd设置了隐藏权限
查看下/etc/passwd和/etc/shadow隐藏权限,果然是设置了隐藏权限
去掉/etc/passwd和/etc/shadow隐藏权限
继续添加系统账号
添加一脚本,设置账号密码
重新加个账号
为脚本添加执行权限
运行这个脚本
修改/etc/passwd文件,改为root权限账户
测试SSH远程连接
成功SSH远程
成功SSH上之后,剩下的操作大家都懂得。。。
0x05 发现入侵后,我们做了哪些
1. 扫描服务器网站程序网马文件,备份文件后,清除网马文件。
2. 对服务器账号和日志检查,备份相关日志文件。
3. 清除风险账号,修复网站目录权限。
4. 重新检查linux服务器狗设置,并加入安全狗服云。
5. 修复服务器上resin和oracle数据库,修改resin端口。
6. 之前nginx加固已经安装nginx网站狗,修复还原nginx,将nginx请求转发到resin。
7. 对服务器端口进行严格限制,只留80端口对外,其他端口全部做IP限制。
8. 由于厂商目前准备更换网站程序,因此并未对程序进行修复。因此,已将上传功能禁用。
0x06 小结
文件上传漏洞的特点和必须具备的三个条件是:
1. 攻击者上传的文件具备可执行性或能够影响服务器行为,因此上传的文件上传后的所在的目录必须在WEB容器覆盖的路径之内;
2. 攻击者可以从WEB上访问到上传的文件,从而使得WEB容器解释执行该文件;
3. 攻击者上传的文件必须能经过网站安全检查,并且不会被格式化或者压缩等处理而导致改变上传的文件内容。
文件上传漏洞的防护:
因为文件上传漏洞被利用必须具备上述三个条件,因此我们只要能阻断任何一个条件就可以达到组织文件上传攻击的目的:
1. 最有效的,将文件上传目录直接设置为不可执行:对于Linux而言,撤销其目录的’x’权限,实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能;
2. 对文件类型检查:强烈推荐白名单方式,结合MIME Type、后缀检查等方式;此外对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏其包含的HTML代码,以此来改变攻击者上传的文件格式,让其上传的文件无法被执行,从而阻断其攻击;
3. 使用随机数改写文件名和文件路径,使得攻击者不能轻易访问自己上传的文件,也能达到阻断其攻击的目的。
0x07 服务器安全运维建议
1. 对于服务器除了要进行必要地安全加固设置外,安装服务器安全防护软件也是十分必要。我们可以看到,在这个过程中,安全狗是有起到防护效果的。但是由于网站程序漏洞,导致服务器权限被提取,进而安全狗软件防护被停用,导致了失去防护效果,最终被黑。
2. 对服务器上的日志进行备份,以便后期需要分析日志的时候可以查询到日志。我们可以看到,在这个事件中,由于系统日志部分被清除,因此无法获取到完整的日志,给入侵分析带来了很多不便。服务器加入服云后,安全狗软件同步到服云上的防护日志,给我们的分析起到了不小的帮助。
3. 服务器上安装了防护软件后并不是就一劳永逸的,也需要人为的巡视检查。在这个事件中,我们可以看到,攻击者有一部分攻击是被安全狗所拦截的,如果服务器管理者有及时巡视服务器防护日志及系统运行日志,可以及时调整防护规则进行防护。如果能够及时进行相关的排查,这次的被黑事件是可以避免的。
4. 另外,对于服务器上的数据,建议要做到定期备份,以便数据丢失的时候可以进行还原。本次被黑事件,数据没有被删除是幸运的。但是,如果被删除了,那就得考虑恢复,这时候如果有备份就会好很多。因此养成定期备份数据的习惯是十分重要的。