emlog2.5.3代码审计(后台文件上传漏洞)
字数 980 2025-08-29 08:29:41
emlog 2.5.3/2.5.4 后台文件上传漏洞分析报告
漏洞概述
本报告详细分析 emlog 2.5.3 及 2.5.4 版本中存在的后台文件上传漏洞,该漏洞允许经过认证的攻击者通过插件上传功能上传恶意 ZIP 文件,最终导致任意代码执行。
环境搭建
-
下载安装:
- 从官网 https://www.emlog.net/ 下载 emlog 2.5.3 版本
- 解压到 PHP 环境(如 phpstudy 的 www 目录)
- 访问 install.php 完成安装
-
后台访问:
- 需要管理员权限账号登录后台
漏洞定位
漏洞位于插件上传功能,相关文件为 /admin/plugin.php
代码分析
关键代码段
if ($action == 'upload_zip') {
if (defined('APP_UPLOAD_FORBID') && APP_UPLOAD_FORBID === true) {
emMsg('系统禁止上传安装应用');
}
LoginAuth::checkToken();
$zipfile = isset($_FILES['pluzip']) ? $_FILES['pluzip'] : '';
// 省略部分错误检查代码...
if (getFileSuffix($zipfile['name']) != 'zip') {
emDirect("./plugin.php?error_f=1");
}
$ret = emUnZip($zipfile['tmp_name'], '../content/plugins/', 'plugin');
// 省略后续处理代码...
}
核心函数 emUnZip
function emUnZip($zipfile, $path, $type = 'tpl') {
if (!class_exists('ZipArchive', FALSE)) {
return 3;
}
$zip = new ZipArchive();
if (@$zip->open($zipfile) !== TRUE) {
return 2;
}
$r = explode('/', $zip->getNameIndex(0), 2);
$dir = isset($r[0]) ? $r[0] . '/' : '';
switch ($type) {
case 'plugin':
$plugin_name = substr($dir, 0, -1);
$re = $zip->getFromName($dir . $plugin_name . '.php');
if (false === $re) {
return -1;
}
break;
// 其他 case 省略...
}
if (true === @$zip->extractTo($path)) {
$zip->close();
return 0;
}
return 1;
}
漏洞原理
-
上传流程:
- 系统仅检查上传文件是否为 ZIP 格式
- 调用 emUnZip 函数解压 ZIP 文件到插件目录
-
关键缺陷:
- 检查机制不完善:仅验证 ZIP 中是否存在
目录名/目录名.php文件 - 目录遍历:未对 ZIP 文件中的目录结构进行安全过滤
- 检查机制不完善:仅验证 ZIP 中是否存在
-
绕过方法:
- 构造 ZIP 文件,使其包含一个目录和同名 PHP 文件
- 例如:
malicious/malicious.php
漏洞利用步骤
-
构造恶意 ZIP:
/malicious/ ├── malicious.php (包含恶意代码) -
上传流程:
- 登录后台
- 访问插件管理页面
- 上传构造的恶意 ZIP 文件
-
访问路径:
- 上传成功后,文件将解压到
/content/plugins/malicious/malicious.php - 直接访问该路径即可执行恶意代码
- 上传成功后,文件将解压到
影响范围
- 确认受影响版本:emlog 2.5.3 和 2.5.4
- 需要后台管理员权限
- 可导致任意代码执行
修复建议
-
临时解决方案:
- 禁用插件上传功能(设置 APP_UPLOAD_FORBID 为 true)
-
长期修复:
- 对 ZIP 文件中的目录名和文件名进行严格过滤
- 增加文件类型白名单验证
- 限制解压路径,防止目录遍历
漏洞验证
- 验证 2.5.4 版本:
- 确认该漏洞在 2.5.4 版本中仍然存在
- 利用方式与 2.5.3 完全相同
总结
该漏洞源于对上传 ZIP 文件内容检查不严格,结合 PHP 的 ZipArchive 类特性,导致攻击者可上传任意 PHP 文件。虽然需要管理员权限,但对于已获取后台权限的攻击者来说危害较大,可完全控制网站服务器。