emlog旧版本代码审计
字数 1377 2025-08-07 08:22:00

emlog旧版本代码审计与漏洞分析报告

1. 文件删除漏洞分析

漏洞位置

admin/plugin.php 后台插件管理处的文件删除功能

漏洞原理

  1. 首先进行Token校验防止CSRF攻击
  2. 调用Plugin_Model类的inactivePlugin方法
  3. inactivePlugin方法中:
    • 调用Option类的get方法获取active_plugins
    • 当返回为空时,直接跳过检查
    • 通过正则替换后,$pludir变量直接使用用户传入的文件路径
    • 调用emDeleteFile方法删除文件或目录

漏洞利用

  • POC: /admin/plugin.php?action=del&plugin=filepath&token=valid_token
  • 攻击者可利用此漏洞删除服务器上的任意文件

2. 文件上传GetShell漏洞分析

漏洞位置

后台插件管理处的插件安装功能 admin/plugin.php#87

漏洞原理

  1. 对上传的ZIP文件进行基本检查:

    • 检查文件名
    • 检查错误码
    • 检查临时文件名
    • 限制文件后缀为ZIP
  2. 调用emUnZip方法解压:

    • 使用PHP原生ZipArchive类处理压缩包
    • 通过explode分割获取文件名
    • 使用getFromName方法检查指定路径下的文件
    • 如果压缩包中的文件名与压缩包本身文件名一致,即可成功上传并解压

漏洞利用

  • 构造恶意ZIP压缩包,其中包含与压缩包同名的PHP Webshell文件
  • 通过插件上传功能上传该压缩包
  • 系统解压后会在服务器上留下Webshell

3. SQL注入漏洞分析

漏洞位置

admin/widgets.php#133

漏洞原理

  1. wgnum参数不赋值时默认为1
  2. widgets参数完全可控
  3. 对传入值进行序列化处理
  4. 调用Option类的updateOption方法:
    • 实例化Database
    • $isSyntax默认为false
    • $value直接使用POST传入的参数值
  5. query方法中:
    • 输出报错信息
    • 查询语句完全可控

漏洞利用

  • POC: 构造报错注入语句
  • 示例注入语句: ' or updatexml(0x3a,concat(1,(select user())),1)and'
  • 注意需要处理序列化数据的引号闭合问题

4. 漏洞修复建议

  1. 文件删除漏洞修复:

    • 严格校验文件路径
    • 限制删除操作只能在插件目录内进行
    • 增加路径合法性检查
  2. 文件上传漏洞修复:

    • 增加文件内容检查
    • 限制解压目录
    • 检查压缩包内文件类型
    • 增加文件名过滤
  3. SQL注入漏洞修复:

    • 使用预处理语句
    • 对输入参数进行严格过滤
    • 关闭错误信息显示

5. 审计经验总结

  1. 后台漏洞虽然利用条件较高,但仍需重视
  2. 审计时应重点关注:
    • 用户输入的直接使用
    • 文件操作相关函数
    • 数据库查询构造
  3. 建议扩展审计范围:
    • 前台功能审计
    • Java等其他语言CMS审计
    • 寻找无需认证的漏洞点

6. 参考信息

  • 漏洞发现时间:2021-12-29
  • 漏洞状态:官方已修复
  • 影响版本:emlog旧版本(具体版本号未提及)
  • 修复版本:最新Pro版本已修复这些问题

本报告详细分析了emlog旧版本中存在的三个高危漏洞,包括漏洞原理、利用方式和修复建议,可作为代码审计和安全研究的参考材料。

emlog旧版本代码审计与漏洞分析报告 1. 文件删除漏洞分析 漏洞位置 admin/plugin.php 后台插件管理处的文件删除功能 漏洞原理 首先进行Token校验防止CSRF攻击 调用 Plugin_Model 类的 inactivePlugin 方法 inactivePlugin 方法中: 调用 Option 类的 get 方法获取 active_plugins 值 当返回为空时,直接跳过检查 通过正则替换后, $pludir 变量直接使用用户传入的文件路径 调用 emDeleteFile 方法删除文件或目录 漏洞利用 POC : /admin/plugin.php?action=del&plugin=filepath&token=valid_token 攻击者可利用此漏洞删除服务器上的任意文件 2. 文件上传GetShell漏洞分析 漏洞位置 后台插件管理处的插件安装功能 admin/plugin.php#87 漏洞原理 对上传的ZIP文件进行基本检查: 检查文件名 检查错误码 检查临时文件名 限制文件后缀为ZIP 调用 emUnZip 方法解压: 使用PHP原生 ZipArchive 类处理压缩包 通过 explode 分割获取文件名 使用 getFromName 方法检查指定路径下的文件 如果压缩包中的文件名与压缩包本身文件名一致,即可成功上传并解压 漏洞利用 构造恶意ZIP压缩包,其中包含与压缩包同名的PHP Webshell文件 通过插件上传功能上传该压缩包 系统解压后会在服务器上留下Webshell 3. SQL注入漏洞分析 漏洞位置 admin/widgets.php#133 漏洞原理 wgnum 参数不赋值时默认为1 widgets 参数完全可控 对传入值进行序列化处理 调用 Option 类的 updateOption 方法: 实例化 Database 类 $isSyntax 默认为false $value 直接使用POST传入的参数值 在 query 方法中: 输出报错信息 查询语句完全可控 漏洞利用 POC : 构造报错注入语句 示例注入语句: ' or updatexml(0x3a,concat(1,(select user())),1)and' 注意需要处理序列化数据的引号闭合问题 4. 漏洞修复建议 文件删除漏洞修复 : 严格校验文件路径 限制删除操作只能在插件目录内进行 增加路径合法性检查 文件上传漏洞修复 : 增加文件内容检查 限制解压目录 检查压缩包内文件类型 增加文件名过滤 SQL注入漏洞修复 : 使用预处理语句 对输入参数进行严格过滤 关闭错误信息显示 5. 审计经验总结 后台漏洞虽然利用条件较高,但仍需重视 审计时应重点关注: 用户输入的直接使用 文件操作相关函数 数据库查询构造 建议扩展审计范围: 前台功能审计 Java等其他语言CMS审计 寻找无需认证的漏洞点 6. 参考信息 漏洞发现时间:2021-12-29 漏洞状态:官方已修复 影响版本:emlog旧版本(具体版本号未提及) 修复版本:最新Pro版本已修复这些问题 本报告详细分析了emlog旧版本中存在的三个高危漏洞,包括漏洞原理、利用方式和修复建议,可作为代码审计和安全研究的参考材料。