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
漏洞分析
-
文件后缀限制:
- 使用
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 示例
?s=Tpl/Add&id=C:|windows|win.ini
任意文件删除漏洞
漏洞位置
Admin/Lib/Action/TplAction.class.php#119
漏洞分析
- 处理流程与文件读取类似
- 使用相同的
$id参数处理方法 - 直接指定要删除的文件路径即可
利用示例
删除根目录下的 1.php 文件
后台权限获取方法
-
默认管理员 cookie:
BkGOp9578O_1535522538 = czoxOiIxIjs%3DBkGOp9578O_是COOKIE_PREFIX默认值1533522538是时间戳
-
攻击方法:
- cookie 保持 3 小时(10800 秒)登录状态
- 可通过枚举最多 10800 次获取有效管理员 cookie
修复情况
- 最新版 v7.0.0 已修复这些漏洞
- 下载地址:https://www.damicms.com/Down
- 已联系技术支持确认修复情况
总结
-
漏洞利用前提:
- 需要后台管理员权限
- 但可通过 cookie 枚举获取权限
-
漏洞链:
- 获取后台权限 → 远程代码执行/任意文件操作
-
漏洞危害:
- 高危:可导致服务器完全沦陷
- 影响范围:Damicms 6.0 及以下版本
-
修复建议:
- 立即升级到最新版 v7.0.0
- 加强后台认证机制
- 对文件操作进行严格过滤和权限检查