damicms6.0审计
字数 1599 2025-08-09 13:33:59

Damicms 6.0 安全审计分析报告

环境搭建

  • 建议使用 PHP5 环境搭建
  • 最新版支持 PHP7,但使用 PHP7 时可能遇到问题:
    • 能进入安装界面完成安装
    • 但界面无法显示且无报错信息
    • 解决方案:更换为 PHP5 版本

远程代码执行漏洞分析

漏洞触发点

  • 模板文件(如 head.html)可触发漏洞
  • 任意页面均可触发写入的恶意代码

漏洞代码路径

Admin/Lib/Action/TplAction.class.php#89

漏洞分析

  1. 文件后缀限制:

    • 使用 stripos 检查文件后缀(不区分大小写,无法通过大小写绕过)
  2. 内容处理流程:

    • htmlspecialchars_decode: 将文件内容中的 HTML 实体转换回普通字符
    • stripslashes: 去除转义反斜杠
    • 调用 write_file 方法写入文件(无内容校验)
  3. 文件写入流程:

    • 跟进 Admin/Common/common.php#45write_file 方法
    • 清除文件缓存后直接写入内容
  4. PHP 代码执行原因:

    • 正常情况下 HTML 文件只能解析 HTML 标签
    • 实际能解析 PHP 代码,需分析调用机制

代码执行触发机制

  1. 文件包含位置:

    • Web/Lib/Action/PublicAction.class.php#70
    • 调用 assign 方法
  2. 视图处理:

    • 通过 Think 类的 instance 方法实例化 View
    • 赋值给 $view 参数
  3. 模板解析:

    • View 视图类中的 display 方法加载模板和输出
    • 调用 fetch 方法进行模板解析
    • 使用 PHP 原生模板,通过 eval 执行拼接的内容

任意文件读取漏洞

漏洞触发点

  • 通过 id 参数触发

漏洞分析

  1. 参数处理:

    • 去除首尾空白字符
    • 进行字符替换
    • 调用 dami_url_replace 方法
  2. 路径处理:

    • 跟进 Admin/Common/common.php#94
    • 调用 Admin/Lib/Action/TplAction.class.php#76
    • $order 默认为 asc
    • id 参数值进行特殊字符替换:
      • | => /
      • @ => =
      • # => &
  3. 文件读取:

    • 调用 read_file 方法直接读取文件内容
    • 方法实现:function read_file($11) { return @file_get_contents($11); }

POC 示例

?s=Tpl/Add&id=C:|windows|win.ini

任意文件删除漏洞

漏洞位置

Admin/Lib/Action/TplAction.class.php#119

漏洞分析

  • 处理流程与文件读取类似
  • 使用相同的 $id 参数处理方法
  • 直接指定要删除的文件路径即可

利用示例

删除根目录下的 1.php 文件

后台权限获取方法

  1. 默认管理员 cookie:

    • BkGOp9578O_1535522538 = czoxOiIxIjs%3D
    • BkGOp9578O_COOKIE_PREFIX 默认值
    • 1533522538 是时间戳
  2. 攻击方法:

    • cookie 保持 3 小时(10800 秒)登录状态
    • 可通过枚举最多 10800 次获取有效管理员 cookie

修复情况

  • 最新版 v7.0.0 已修复这些漏洞
  • 下载地址:https://www.damicms.com/Down
  • 已联系技术支持确认修复情况

总结

  1. 漏洞利用前提:

    • 需要后台管理员权限
    • 但可通过 cookie 枚举获取权限
  2. 漏洞链:

    • 获取后台权限 → 远程代码执行/任意文件操作
  3. 漏洞危害:

    • 高危:可导致服务器完全沦陷
    • 影响范围:Damicms 6.0 及以下版本
  4. 修复建议:

    • 立即升级到最新版 v7.0.0
    • 加强后台认证机制
    • 对文件操作进行严格过滤和权限检查
Damicms 6.0 安全审计分析报告 环境搭建 建议使用 PHP5 环境搭建 最新版支持 PHP7,但使用 PHP7 时可能遇到问题: 能进入安装界面完成安装 但界面无法显示且无报错信息 解决方案:更换为 PHP5 版本 远程代码执行漏洞分析 漏洞触发点 模板文件(如 head.html)可触发漏洞 任意页面均可触发写入的恶意代码 漏洞代码路径 Admin/Lib/Action/TplAction.class.php#89 漏洞分析 文件后缀限制: 使用 stripos 检查文件后缀(不区分大小写,无法通过大小写绕过) 内容处理流程: htmlspecialchars_decode : 将文件内容中的 HTML 实体转换回普通字符 stripslashes : 去除转义反斜杠 调用 write_file 方法写入文件(无内容校验) 文件写入流程: 跟进 Admin/Common/common.php#45 的 write_file 方法 清除文件缓存后直接写入内容 PHP 代码执行原因: 正常情况下 HTML 文件只能解析 HTML 标签 实际能解析 PHP 代码,需分析调用机制 代码执行触发机制 文件包含位置: Web/Lib/Action/PublicAction.class.php#70 调用 assign 方法 视图处理: 通过 Think 类的 instance 方法实例化 View 类 赋值给 $view 参数 模板解析: View 视图类中的 display 方法加载模板和输出 调用 fetch 方法进行模板解析 使用 PHP 原生模板,通过 eval 执行拼接的内容 任意文件读取漏洞 漏洞触发点 通过 id 参数触发 漏洞分析 参数处理: 去除首尾空白字符 进行字符替换 调用 dami_url_replace 方法 路径处理: 跟进 Admin/Common/common.php#94 调用 Admin/Lib/Action/TplAction.class.php#76 $order 默认为 asc 对 id 参数值进行特殊字符替换: | => / @ => = # => & 文件读取: 调用 read_file 方法直接读取文件内容 方法实现: function read_file($11) { return @file_get_contents($11); } POC 示例 任意文件删除漏洞 漏洞位置 Admin/Lib/Action/TplAction.class.php#119 漏洞分析 处理流程与文件读取类似 使用相同的 $id 参数处理方法 直接指定要删除的文件路径即可 利用示例 删除根目录下的 1.php 文件 后台权限获取方法 默认管理员 cookie: BkGOp9578O_1535522538 = czoxOiIxIjs%3D BkGOp9578O_ 是 COOKIE_PREFIX 默认值 1533522538 是时间戳 攻击方法: cookie 保持 3 小时(10800 秒)登录状态 可通过枚举最多 10800 次获取有效管理员 cookie 修复情况 最新版 v7.0.0 已修复这些漏洞 下载地址:https://www.damicms.com/Down 已联系技术支持确认修复情况 总结 漏洞利用前提: 需要后台管理员权限 但可通过 cookie 枚举获取权限 漏洞链: 获取后台权限 → 远程代码执行/任意文件操作 漏洞危害: 高危:可导致服务器完全沦陷 影响范围:Damicms 6.0 及以下版本 修复建议: 立即升级到最新版 v7.0.0 加强后台认证机制 对文件操作进行严格过滤和权限检查