首页 > 代码库 > ECMS清除挂马以及后台升级实战(从ecms6.6~ecms7.0)
ECMS清除挂马以及后台升级实战(从ecms6.6~ecms7.0)
当时状况
Windows Server 2008 R2 Enterprise + 帝国CMS6.6 + MySql
服务器软件: | Microsoft-IIS/7.5 |
操作系统: | WINNT |
PHP版本: | 5.3.18 |
MYSQL版本: | 5.0.81-community-nt |
全局变量: | 关闭 (建议关闭) |
魔术引用: | 关闭 (建议开启) |
上传文件: | 可以 (最大文件:2M,表单:8M) |
当前时间: | 2014-05-30 14:11:57 |
使用域名: | xxxx.com |
|
|
服务器被挂马,后台版本较老,存在继续被攻击的潜在威胁。
处理过程
首先存在的两个最棘手的问题:
1. 如何清掉目前大量的挂马;
2. 为了后台安全系数更高,如何对当前后台进行升级;
首先清马:
因为大家可以看到,清垃圾文件前后的差距实在是非常的巨大,可见垃圾已经到了无处不在的地步,为了尽量把垃圾清完,我们采用正面挑选的方式,从网络上找到ECMS6.6所有的系统目录结构,这一点可以从官方发布的二次开发手册里头找到,我只是大概的列出其中的文件:
如下列表摘自《帝国CMS二次开发手册》
/ 系统根目录
├d/ 附件和数据存放目录 (data)
│├file/ 附件存放目录
│├js/ JS调用生成目录
│└txt/ 内容存文本存放目录
├e/ 系统程序目录 (empire)
├html/ 自定义内容页存放预设目录
├images/ 默认模板图片目录
├s/ 专题目录 (special)
├search/ 高级搜索页面目录
├skin/ 模板CSS和图片存放目录
├testdata/ 内置测试数据的附件目录 (安装时选择测试数据用的,不内置测试数据可以删除)
└index.html 网站首页
/e/ 系统程序目录
├action/ 信息动态列表页和内容页目录
├admin/ 后台目录 (可重命名)
├class/ 系统核心文件目录
├data/ 系统处理数据相关目录 (临时文件、缓存等)
├DoInfo/ 前台会员管理信息目录 (页面模板e/template/DoInfo)
├DoPrint/ 打印页面目录
├DownSys/ 下载系统模型功能目录 (页面模板e/template/DownSys)
├enews/ 前台处理数据入口文件
├extend/ 扩展程序目录
├ftp/ FTP识别目录
├install/ 安装程序目录,安装后请删除掉
├member/ 前台会员功能目录 (页面模板e/template/member)
├message/ 提示信息页面目录
├NewsSys/ 新闻系统模型功能目录
├payapi/ 在线支付接口目录 (页面模板e/template/payapi)
├pl/ 评论页目录
├public/ 公用功能程序目录 (页面模板e/template/public)
├sch/ 全站全文搜索生成目录
├search/ 普通搜索文件目录
├ShopSys/ 商城系统模型功能目录 (页面模板e/template/ShopSys)
├ShowKey/ 前台验证码文件目录
├space/ 会员空间目录 (其中template为会员空间模板目录)
├tags/ TAGS列表文件目录
├tasks/ 计划任务脚本存放目录
├template/ 前台动态页的模板目录
├tool/ 插件相关功能目录 (页面模板e/template/tool)
├update/ 升级程序目录 (升级程序复制到这个目录运行)
├ViewImg/ 显示图片大图目录
├wap/ WAP功能目录 (其中template为WAP模板目录)
└web/ RSS显示文件目录
/e/template/ 动态页面模板目录
├DoInfo/ 前台投稿模板目录 (对应程序目录:/e/DoInfo/)
│├AddInfo.php 发布投稿页面模板 (对应程序文件:/e/DoInfo/AddInfo.php)
│├ChangeClass.php 发布投稿选择栏目页面模板 (对应程序文件:/e/DoInfo/ChangeClass.php)
│├DoInfo.php 管理投稿首页页面模板 (对应程序文件:/e/DoInfo/index.php)
│└tran.php 发布投稿上传附件页面模板 (对应程序文件:/e/DoInfo/tran.php)
├DownSys/ 下载模型页面模板目录 (对应程序目录:/e/DownSys/)
│└report.php 提交错误报告页面模板 (对应程序文件:/e/report/index.php)
├member/ 会员中心模板目录 (对应程序目录:/e/member/)
│├memberlist/ 会员列表页面模板目录 (对应程序文件:/e/member/list/index.php)
│├mspace/ 管理会员空间页面模板目录 (对应程序目录:/e/member/mspace/)
││├ChangeStyle.php 选择空间模板页面模板 (对应程序文件:/e/member/mspace/ChangeStyle.php)
││├feedback.php 管理会员空间反馈页面模板 (对应程序文件:/e/member/mspace/feedback.php)
││├gbook.php 管理会员空间留言页面模板 (对应程序文件:/e/member/mspace/gbook.php)
││├ReGbook.php 管理会员空间留言回复页面模板 (对应程序文件:/e/member/mspace/ReGbook.php)
││├SetSpace.php 设置会员空间页面模板 (对应程序文件:/e/member/mspace/SetSpace.php)
││└ShowFeedback.php 管理会员空间反馈显示反馈页面模板 (对应程序文件:/e/member/mspace/ShowFeedback.php)
│├AddFava.php 增加收藏页面模板 (对应程序文件:/e/member/fava/add/index.php)
│├AddFriend.php 增加好友页面模板 (对应程序文件:/e/member/friend/add/index.php)
│├AddMsg.php 发送站内信息页面模板 (对应程序文件:/e/member/msg/AddMsg/index.php)
│├buybak.php 购买记录页面模板 (对应程序文件:/e/member/buybak/index.php)
│├buygroup.php 购买充值类型页面模板 (对应程序文件:/e/member/buygroup/index.php)
│├card.php 点卡充值页面模板 (对应程序文件:/e/member/card/index.php)
│├ChangeFriend.php 选择好友页面模板 (对应程序文件:/e/member/friend/FriendClass/index.php)
│├ChangeRegister.php 选择注册会员组页面模板 (对应程序文件:/e/member/register/ChangeRegister.php)
│├cp.php 会员中心首页页面模板 (对应程序文件:/e/member/cp/index.php)
│├downbak.php 消费记录页面模板 (对应程序文件:/e/member/downbak/index.php)
│├EditInfo.php 修改资料页面模板 (对应程序文件:/e/member/EditInfo/index.php)
│├EditSafeInfo.php 修改安全资料页面模板 (对应程序文件:/e/member/EditInfo/EditSafeInfo.php)
│├fava.php 管理收藏页面模板 (对应程序文件:/e/member/fava/index.php)
│├FavaClass.php 管理收藏分类页面模板 (对应程序文件:/e/member/fava/FavaClass/index.php)
│├friend.php 管理好友页面模板 (对应程序文件:/e/member/friend/index.php)
│├FriendClass.php 管理好友分类页面模板 (对应程序文件:/e/member/friend/FriendClass/index.php)
│├getpass.php 取回密码重置页面模板 (对应程序文件:/e/member/GetPassword/getpass.php)
│├GetPassword.php 取回密码页面模板 (对应程序文件:/e/member/GetPassword/index.php)
│├login.php 会员登录页面模板 (对应程序文件:/e/member/login/index.php)
│├loginopen.php 弹出页面提示重新登陆页面模板 (对应程序文件:/e/member/login/login.php)
│├msg.php 管理站内信息页面模板 (对应程序文件:/e/member/msg/index.php)
│├my.php 我的状态页面模板 (对应程序文件:/e/member/my/index.php)
│├register.php 会员注册页面模板 (对应程序文件:/e/member/register/index.php)
│├regsend.php 注册激活帐号页面模板 (对应程序文件:/e/member/register/regsend.php)
│├ShowInfo.php 查看会员资料页面模板 (对应程序文件:/e/member/ShowInfo/index.php)
│└ViewMsg.php 查看站内信息内容页面模板 (对应程序文件:/e/member/msg/ViewMsg/index.php)
├payapi/ 在线支付页面模板目录 (对应程序目录:/e/payapi/)
│└payapi.php 在线支付页面模板 (对应程序文件:/e/payapi/index.php)
├public/ 公共程序页面模板目录 (对应程序目录:/e/public/)
│└vote.php 信息投票结果页面模板 (对应程序文件:/e/public/vote/index.php)
├ShopSys/ 商城模型页面模板目录 (对应程序目录:/e/ShopSys/)
│├buycar.php 购物车页面模板 (对应程序文件:/e/ShopSys/buycar/index.php)
│├ListDd.php 管理商城订单页面模板 (对应程序文件:/e/ShopSys/ListDd/index.php)
│├order.php 订单提交表单页面模板 (对应程序文件:/e/ShopSys/order/index.php)
│├ShowDd.php 查看商城订单内容页面模板 (对应程序文件:/e/ShopSys/ShowDd/index.php)
│└SubmitOrder.php 订单提交最终确认页面模板 (对应程序文件:/e/ShopSys/SubmitOrder/index.php)
└tool/ 内置插件模板目录 (对应程序目录:/e/tool/)
└vote.php 投票插件结果页面模板 (对应程序文件:/e/tool/vote/index.php)
首先我们重新安装一个6.6版本的ECMS,因为更新的7.0版本根本无法兼容6.6的数据库,
所以没办法早早地进行升级。装好新的ECMS之后,我们对这个版本进行尝试,挑出我们真正需要的站点文件和文件夹,上面列出的文件数量是比较少的,而且方便筛选,首先我们从老的数据里头把这些文件夹拷贝出来,复制到新的文件夹下,并且对大小有异常的文件夹进行检查,删除掉其中的异常文件夹和多余的垃圾文件。这样,我们就初步获得了,我们需要的文件;这个过程并不需要针对所有的文件夹进行查看,只需要针对上面列出的文件夹,因为网站根目录下有不少文件夹都是后来由后台生成的。
有了这些基础文件之后,首先我们尝试装ECMS7.0,看能否直接兼容ECMS6.6的数据,事实证明,这个过程中由于两个版本的数据库文件有着巨大的差别,而以失败告终,中间有个小插曲,为了让ECMS6.6的数据库能兼容到ECMS7.0,还自作主张的给6.6添加了一些字段,但是后来发现区别远远超过5个表字段,只能以放弃告终,但是由于我改了数据库的表结构,还导致我后面一次从6.6到7.0的正常升级失败(在已经有某个表字段的表中添加相同字段),再加上我没有记录表结构修改,又很挫的在280+个表里头找哪些字段有修改,真是悔不当初,建议大家吸取教训,千万不要为了让两个版本表结构统一擅自修改,否则后果真的很严重。
清理前后的文件大小比较:
建议不要在实际的生产环境下做操作,因为过程比较复杂,一个小时基本上就能把人搞得晕头转向,这种情况下如果出现生产环境的误删,误修改也非常容易,所以一定要在自己的测试环境下进行,本人的测试环境就是本人自己的机器。
大体上,我把所有的工作分为四个步骤:
1. 把之前挑选出来的站点文件复制到测试环境,并作备份,可以在随时出异常的时候进行覆盖,主要包含两类文件,一个是根目录下的文件,还有一个就是数据库文件;
2. 网络上找到ECMS6.6的安装包,并按照说明安装6.6的ECMS;
3. 下载从6.6升级到7.0的升级包,按照升级说明替换目前的环境,并对目录权限进行设置;
4. 从ECMS6.6往ECMS7.0进行升级;
在数据量很小的情况下,上面的过程都比较容易完成,但是在数据量较大的时候,这些工作完成起来就非常耗时,而且有一种“等了这么多时间,如果还不行,怎么办”的焦灼感。比较煎熬。
分步骤描述
第一步,其实没什么好说的,主要是压缩,拷贝,解压缩的过程,同时要把数据文件和数据库文件一起拷贝。
第二步,网上很难找到6.6的一键安装包,说来奇怪,phome上明显标示的是6.6的一键安装包,但是实际上链接的还是最新的7.0版本,实在是无法理解了,最后没办法,单独下载的6.6的安装包进行安装;
第三步,这个过程中比较纠结的是win2008的文件夹覆盖和合并功能,这个系统默认用两个文件夹合并成一个新的文件夹,这个规矩真实让人“侧目”,好像跟之前的文件夹覆盖完全不同了。同时windows下设置文件夹和文件的777权限也比较麻烦,首先要在文件夹属性中添加everyone用户,然后给everyone用户读取,修改,执行等权限。
第四步,也是最揪心的环节,因为这个环节出错,基本上面临着必须从第一步重新再做一次,我每重做一次的时间大概是40分钟,数据量比较大,再加上中间倒点水,有人干扰一下,基本上每次都需要差不多一个小时,还不能出错,如果再出错,排错,这个过程就远超过1小时了,非常悲催。
这个过程中出现过各种错误,尤其是数据库方面的错误,比如说连不上数据库,或者机器ip地址不能访问后台(不在可访问后台的IP列表里)等,其中大部分错误都可以在config.php中解决,特别提醒的是6.6和7.0的config.php文件所在目录是不同的,6.6在\e\class\目录下,7.0在\e\config\目录下.
这个文件中三处经常面临调试修改:
1. 数据库配置:
//数据库设置
$phome_use_db=‘mysql‘; //数据库类型
$phome_use_dbver=‘5.0‘; //数据库版本
$phome_db_server=‘localhost‘; //数据库登陆地址
$phome_db_port=‘‘; //端口,不填为按默认
$phome_db_username=‘root‘; //数据库用户名
$phome_db_password=‘‘; //数据库密码
$phome_db_dbname=‘abcdb‘; //数据库名
$phome_db_char=‘gbk‘; //设置默认编码
$phome_db_dbchar=‘gbk‘; //数据库默认编码
$dbtbpre=‘phome_‘; //数据表前缀
$ecmslang=‘gb‘; //语言包
这里数据库的配置,要跟当时在安装完成ECMS6.6时设置的密码为准,同时在Navcat等工具里头,可以进行新增和删除数据库连接,新增数据库的名称,用户名,密码都需要后面保存到如上配置中,方便ecms访问数据库,这个配置类似于之前遇到的建立ODBC连接之类的,只是过程比之前的更简单。
2. ‘loginnum‘=>5,
在账户连续5次输错密码之后,系统会自动被锁定一小时(好像是这个时间),一小时之后才能登录。
3. ‘closeip‘=>‘‘,
‘openip‘=>‘‘,
‘hopenip‘=>‘‘,
能连接到ecms后台的ip地址范围,如果后台当下不能登陆,需要把上面三个全部设置为空,然后还需要进入后台以后马上修改,具体如下图,如果不及时修改的话,后续很可能在刷新时自动恢复config.php的配置,我在这个环节也吃过亏,在从6.6到7.0升级过程中,突然出现所在ip地址是prohibited的情况,坑,至少多浪费一个小时。所以要在config.php和后台两处一起改,一个都不能少。
最后总结
1. Web开发有一点好就是不会修改主机的配置,这样在本地把所有配置好,调试通以后,就可以直接往服务器上搬,不需要再进行繁琐的配置,这点非常好。
2. 经过这么一折腾,虽然耗了两三天的时间,但是一下子对ecms的升级,备份,数据库,后台有了比较全面的了解,以后即使管服务器和数据库的人不在,也基本上能一个人拿下这些事情。