帝国 CMS 木马清理方法

juming
juming 初级会员超兽战士
发布于 2026-10-07 22:30 ·1 浏览 ·0 回复

照着这篇做完,你能把一个被挂马的帝国 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 查杀工具再扫一遍全站,确认无残留;之后每两周看一次文件修改时间列表。

小结:

  1. 动手前先停站、备份文件和数据库,备份别放网站目录。
  2. 用 find -mtime 和 grep eval( 两条命令锁定可疑文件。
  3. 重灾区是 /e/data/、/e/admin/、/d/file/ 和根目录 index.php。
  4. 数据库里的陌生管理员、会员、注入内容的文章必须一起清。
  5. 清完立刻改数据库密码和后台密码,覆盖回官方文件,收紧目录权限。
版权声明:本文来自 GJ站长论坛《帝国 CMS 木马清理方法》
原文链接:https://www.gj0.com/thread-591.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~