l 上传doc后缀的WebShell
访问该系统的文件管理页面/plugins/pgrfilemanager/PGRFileManager.php,上传一个正常的doc文件,发现可以上传成功。编写一个PHP语言的WebShell后门,也可以从网上下载已有的WebShell,并将WebShell文件的后缀修改为doc,此处将myshell.php后门修改为myshell.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文件中以防止被系统管理员发现。
l 系统开发阶段的防御
系统开发人员应有较强的安全意识,尤其是采用PHP语言开发系统。在系统开发阶段应充分考虑系统的安全性。对文件上传漏洞来说,最好能在客户端和服务器端对用户上传的文件名和文件路径等项目分别进行严格的检查。客户端的检查虽然对技术较好的攻击者来说可以借助工具绕过,但是这也可以阻挡一些基本的试探。服务器端的检查最好使用白名单过滤的方法,这样能防止大小写等方式的绕过,同时还需对%00截断符进行检测,对HTTP包头的content-type也和上传文件的大小也需要进行检查。
l 系统运行阶段的防御
系统上线后运维人员应有较强的安全意思,积极使用多个安全检测工具对系统进行安全扫描,及时发现潜在漏洞并修复。定时查看系统日志,web服务器日志以发现入侵痕迹。定时关注系统所使用到的第三方插件的更新情况,如有新版本发布建议及时更新,如果第三方插件被爆有安全漏洞更应立即进行修补。对于整个网站都是使用的开源代码或者使用网上的框架搭建的网站来说,尤其要注意漏洞的自查和软件版本及补丁的更新,上传功能非必选可以直接删除。除对系统自生的维护外,服务器应进行合理配置,非必选一般的目录都应去掉执行权限,上传目录可配置为只读。
l 安全设备的防御
文件上传攻击的本质就是将恶意文件或者脚本上传到服务器,专业的安全设备防御此类漏洞主要是通过对漏洞的上传利用行为和恶意文件的上传过程进行检测。恶意文件千变万化,隐藏手法也不断推陈出新,对普通的系统管理员来说可以通过部署安全设备来帮助防御。目前华三通信公司发布的SecPath IPS系列产品经过长期的积累,不但可以基于行为对网络中大量文件上传漏洞的利用进行检测,同时还能基于内容对恶意文件进行识别。