帝国 CMS 木马清理方法
照着这篇做完,你能把一个被挂马的帝国 CMS 站点从"能打开但危险"恢复到"文件干净、账号可控、漏洞堵住"的状态。
第一步:先隔离,再完整备份(别急着删文件)
这一步要拿到一份"案发现场"的完整拷贝,后面所有对比、排查都靠它,同时切断木马继续外连或继续写入。
如果服务器能停,直接在宝塔/云控制台把站点停掉,或在 Nginx 站点配置里加 return 403; 并 reload。别停的话至少把 PHP 的 allow_url_fopen、exec、system 相关函数在 php.ini 的 disable_functions 里临时禁掉。
cd /www/wwwroot/www.example.com
tar -zcvf /root/site_$(date +%F).tar.gz .
mysqldump -uroot -p phome_dbname > /root/db_$(date +%F).sql
注意:数据库前缀大多是
phome_,用 phpMyAdmin 或show tables;确认后再导。备份文件别放在网站根目录下,否则等于给攻击者留了下载入口。
第二步:找出所有"不该被改过"的文件
这一步用时间线和特征字符串,把可疑文件列出来,得到一份待处理清单。
帝国 CMS 正常运行时,只有 /e/data/ 下的缓存、/d/file/ 下的附件会频繁变动,其他 PHP 文件不应该有新修改时间:
find /www/wwwroot/www.example.com -type f -name "*.php" -mtime -30 \
-printf "%TY-%Tm-%Td %TH:%TM %p\n" | sort -r
再用一句话木马的特征词扫一遍:
grep -rn -E "eval\(|assert\(|base64_decode\(|gzinflate\(|create_function\(" \
--include="*.php" /www/wwwroot/www.example.com
注意:帝国 CMS 自身个别文件里也有
eval写法,判断标准是"文件名 + 上下文",重点看有没有$_POST、$_REQUEST拼在 eval 里。
第三步:重点检查这几个"重灾区"
这一步按帝国 CMS 的目录结构逐个体检,能覆盖 90% 的常见挂马位置。
- 根目录
index.php、config.php:正常内容很短,如果开头出现一长串乱码变量,基本是被插了。 /e/data/html/、/e/data/tmp/、/e/data/js/:缓存目录常被写马,看有没有奇怪的.php文件。/e/admin/:后台目录,注意index.php、login.php有没有被追加代码。/d/file/、/uploadfile/:附件目录里出现.php、.phtml、.php5后缀的,一律可疑。- 隐藏文件:
.user.ini、.htaccess、.well-known下的异常文件。
find /www/wwwroot/www.example.com -name "*.php" -path "*d/file*"
find /www/wwwroot/www.example.com -name ".user.ini" -o -name ".htaccess"
最稳的做法是去帝国 CMS 官网下载与你版本号完全相同的安装包(后台首页左下角能看到版本,如 7.5),解压后对比:
diff -r /root/EmpireCMS_7.5/upload /www/wwwroot/www.example.com | head -50
第四步:清数据库里的后门账号和恶意内容
这一步把攻击者在数据库里留下的管理员、会员、广告、内容一并清掉,否则文件删干净了也能重新进来。
在 phpMyAdmin 里对网站库执行:
SELECT userid,username,email,logintime,lastip FROM phome_enewsuser;
SELECT memberid,username,email,registertime FROM phome_enewsmember;
对比管理员列表,把不认识的账号删掉;会员表里大量陌生注册,可能是被用来发垃圾内容的。再查内容表有没有被注入脚本:
SELECT id,title FROM phome_ecms_news WHERE newstext LIKE '%<script%';
注意:帝国 CMS 后台"系统 → 执行 SQL 语句"也能跑,但被挂马的后台本身不可信,建议用 phpMyAdmin 直连操作。
第五步:改密码 + 从官方包恢复被改文件
这一步让攻击者手里的旧凭证全部失效,并保证核心程序文件是干净的。
- 数据库密码:宝塔面板 → 数据库 → 修改密码,同步更新
/e/config/config.php里的$ecms_config['db']['dbpw']。 - 后台管理员:后台 → 用户 → 管理员管理,逐个改密码,密码用 16 位以上混合字符。
- 文件恢复:把第二步、第三步确认被改的文件,用官方 7.5 安装包里的同名文件覆盖;模板里的恶意代码进后台 → 模板 → 模板管理,逐个模板搜
<script和iframe清掉。
注意:不要把官方包里的
config.php、/e/data/目录一起覆盖,那会把你的数据库配置和站点数据冲掉。
第六步:堵住入口,做长期监控
这一步做权限收敛和后续巡检,避免一周后再被挂一次。
find /www/wwwroot/www.example.com -type d -exec chmod 755 {} \;
find /www/wwwroot/www.example.com -type f -exec chmod 644 {} \;
chown -R www:www /www/wwwroot/www.example.com
/e/data/、/d/file/ 必须可写,这两个目录保持 755 且属主为 web 用户即可,别用 777。后台入口改名:把 /e/admin 改为自定义名称(如 /e/myadmin888),同时在 /e/config/config.php 里搜索后台目录相关配置项一并修改,改完先测能否登录。最后升级到帝国 CMS 最新版本,并装个 WAF 或开启云厂商的网站安全防护。
注意:清理完立刻用 D盾或河马 WEBSHELL 查杀工具再扫一遍全站,确认无残留;之后每两周看一次文件修改时间列表。
小结:
- 动手前先停站、备份文件和数据库,备份别放网站目录。
- 用
find -mtime和grep eval(两条命令锁定可疑文件。 - 重灾区是
/e/data/、/e/admin/、/d/file/和根目录index.php。 - 数据库里的陌生管理员、会员、注入内容的文章必须一起清。
- 清完立刻改数据库密码和后台密码,覆盖回官方文件,收紧目录权限。
原文链接:https://www.gj0.com/thread-591.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。