EMLOG Pro 2.6.9路径遍历漏洞CVE-2026-39276
EMLOG Pro是一款轻量级、基于PHP+MySQL博客/CMS 建站系统,主打简单、省资源、易上手,全中文后台符合国内用户使用习惯。
一、基本情况
EMLOG Pro内置了 AI 大模型接口,支持AI 写文、AI 生图、AI 摘要,内置Markdown 编辑器,自动保存、草稿箱,代码精简,负载低。
EMLOG Pro代码精简,负载低,比 WordPress 更轻快,适合低配服务器/NAS,适合个人博客、小型网站、资讯站、企业官网等场景。

EMLOG Pro 2.6.9版本更新发布于 2026年04月02日,截止本文成文时的最新版本是发布于2026年06月24日的EMLOG Pro 2.6.16版本。
栋科技漏洞库关注到在 EMLOG Pro 2.6.9版本中存在的路径遍历漏洞,该漏洞现已经被追踪为CVE-2026-39276,CVSS 3.0评分 7.2。
二、漏洞分析
CVE-2026-39276是 EMLOG Pro 内容管理系统(CMS)在2.6.9及之前版本的模板管理模块(/admin/template.php)的路径遍历漏洞。
由于解压 ZIP 格式模板文件时未对文件名做充分安全过滤,View::getView 直接使用模板参数拼接文件路径,未校验 .. 路径遍历序列。

已获得管理员权限的攻击者可以构造包含目录穿越字符(如 ../)的恶意 ZIP 压缩包,攻击者上传含路径遍历文件名的恶意 ZIP 压缩包。
管理员后台上传并解压该模板时,系统会将恶意文件写入目标模板目录外的位置,覆盖模板文件或写入PHP代码,实现任意代码执行。
具体来说:
/include/lib/common.php 文件大约 第780行,switch (case 'tpl') 代码块仅检查压缩包内是否存在 header.php 文件,没有任何安全校验。
在第802行,extractTo() 函数直接解压文件,
未对文件名进行任何合法性校验、过滤或净化处理(如未检查目录穿越字符串、未限制文件后缀名)。
恶意文件会被解压到 /content/templates/[模板名称]/ 目录,以及通过目录穿越到达的任意路径,并可直接通过 Web 访问。
漏洞类型:ZIP 解压文件上传 → 路径遍历 → 覆盖默认(任意)模板文件 → 全站远程代码执行(RCE)
利用条件:后台管理员权限
漏洞根源:
/admin/template.php 文件中(第 69-105 行)的 emUnZip() 函数;
及该函数在 /include/lib/common.php 文件中(第 768-808 行)对解压流程的处理逻辑。
该漏洞属于 “ZIP 解压 + 路径遍历” 类型漏洞。Emlog 后台模板上传采用 ZIP 部署机制,执行流程如下:
1、管理员上传.zip 格式模板包
2、系统调用 emUnzip () 函数,通过 ZipArchive::extractTo () 将文件解压至 /content/templates 目录
3、缺陷:解压过程未对压缩包内文件类型与内容做白名单校验,也未检测目录穿越字符(../)
4、攻击者可在 ZIP 中嵌入任意 PHP 文件(如 header.php),通过文件名中包含../ 实现覆盖默认模板。
解压后,直接访问目标站点 Web 地址即可执行恶意代码
5、核心风险:
模板机制允许解压 PHP 模板文件,但缺乏对 “非模板文件” 与../ 等穿越字符的过滤逻辑,导致任意代码注入与默认模板被篡改。
据 FOFA 统计,互联网上部署的 Emlog 系统超 6400 个。所有使用受影响版本且未对后台做 IP 限制的站点均存在高风险。

6、漏洞位置
/admin/template.php 第 69-105 行,$zipfile 参数与 emUnZip () 函数


/include/lib/common.php 第 768-808 行,switch 语句与 extractTo () 函数


根源
/include/lib/common.php 第780行(case tpl)仅检查压缩包内是否存在 header.php,
第802行直接解压后返回,未做任何检测与过滤。
解压后访问路径
恶意文件位于 /content/templates/[模板名称]/ 目录下,可直接通过 Web 访问。
三、POC概念验证
(一)测试环境
源码版本:Emlog Pro v2.6.9(官方正式版 https://www.emlog.net,MD5:B178E2174A74989B2C83D8D3F3EC92E9)

运行环境:phpstudy_pro v8.1(PHP 7.3.4 + Apache 2.4.39)
测试系统:Windows 11 x64
复现日期:2026 年 4 月 5 日
(二)复现步骤
步骤 1:制作恶意 ZIP 压缩包
使用以下 Python 脚本生成一个包含目录穿越攻击载荷的恶意 ZIP 压缩包(evil_tpl_poc.zip)。
管理员已设置登录后刷新可查看
header.php 为恶意文件,测试内容如下:

恶意压缩包 evil_tpl_poc.zip 结构:

步骤 2:访问默认页面
上传前访问首页 http (s):// 目标站点,页面正常显示。

步骤 3:后台上传模板
1、登录后台 → 控制台 → 外观 → 模板 → 安装模板

2、选择 “上传并安装”,上传 test.zip
数据包如下:


3、系统提示 “安装成功”,文件已解压至 /content/templates/default111
访问默认页面 http(s)://target,默认模板已成功被恶意文件覆盖:

也可上传恶意后门并进行连接:

访问地址为 http (s)://target,连接密码为:pass

(三)修复建议
路径净化:
增设严格的路径校验,通过realpath()解析绝对路径并比对路径前缀,确保文件解压路径限定在指定的 /content/templates/ 目录内。
防范目录穿越:
检测并剔除压缩包文件名中的 ../、..\\ 等目录穿越字符。
内容校验:
遍历压缩包内所有文件,检查文件名与文件内容,采用文件后缀白名单机制,解压前拦截异常文件。
四、影响范围
EMLOG Pro ≤ 2.6.9
五、修复建议
EMLOG Pro ≥ 2.6.15
六、参考链接
管理员已设置登录后刷新可查看