cms审计集
字数 1721 2025-08-07 08:22:02
YoudianCMS v9.0/v9.2 与 KiteCMS 安全审计报告
1. YoudianCMS 后台模板管理写入 WebShell 漏洞
漏洞位置
App\Lib\Action\Admin\TemplateAction.class.php#68
漏洞分析
-
文件名处理流程:
- 首先调用
YdInput类的checkFileName方法处理文件名:static function checkFileName($str) { $str = str_replace('..', '', $str); return $str; } - 仅简单替换
..为空,防护不足
- 首先调用
-
路径拼接与校验:
- 调用
ltrim去除文件名开头空白字符 - 拼接完整文件路径
- 调用
isValidTplFile方法校验模板文件:- 进行大小写转换
- 白名单检测文件后缀
- 调用
-
写入过程:
- 调用
htmlspecialchars_decode解码实体编码(不影响WebShell写入) - 使用
file_put_contents写入内容 - HTML文件会被包含,其中的PHP代码会被执行
- 调用
漏洞利用
通过后台模板管理功能,可以写入恶意PHP代码到模板文件中,由于模板文件会被包含执行,导致WebShell植入。
2. KiteCMS 后台模板编辑写入 WebShell 漏洞
漏洞位置
application\admin\controller\Template.php#25
漏洞分析
-
参数处理:
- 调用
Request类的param方法获取path参数 - 实例化
Site类查询数据库获取模板值(默认为default) - 最终路径格式:
root_path/theme/default/$path($path可控)
- 调用
-
路径校验:
if (!file_exists($rootpath) && !preg_match("/theme/", $rootpath)) { throw new HttpException(404, 'This is not file'); }- 仅校验路径存在且包含
/theme/
- 仅校验路径存在且包含
-
写入条件:
- POST传参时触发写入
- 调用
is_write检查文件可写权限 - 使用
file_put_contents写入htmlspecialchars_decode解码后的内容
-
漏洞点:
- 路径拼接可被穿越
- 无有效过滤允许写入任意位置
漏洞利用POC
POST /admin/template/fileedit HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 44
path=../../index.php&html=<?php phpinfo();?>
3. KiteCMS 任意文件读取漏洞
漏洞位置
同模板编辑功能 (application\admin\controller\Template.php)
漏洞分析
- 非POST请求时触发读取逻辑
- 校验文件可读权限
- 调用
file_get_contents读取文件 - 结合路径穿越可读取任意文件
漏洞利用
GET /admin/template/fileedit?path=../../filename
4. KiteCMS 后台文件上传 Getshell
漏洞位置
application\admin\controller\Upload.php
漏洞分析
-
上传流程:
Request类的file方法获取上传文件信息- 实例化
UploadFile类并调用upload方法 - 文件类型默认为
image
-
配置检查:
- 检查
config\site.php默认配置 - 后台可添加上传后缀(如添加php)
- 检查
-
校验逻辑 (
thinkphp\library\think\File.php#226):if ($rule['size'] && $file->getSize() > $rule['size']) { // ... } if ($rule['ext'] && !in_array($file->getExtension(), explode(',', $rule['ext']))) { // ... }- 条件为"或"逻辑,只需满足一项即可
- 文件大小通常满足
- 添加php后缀后上传php文件可通过校验
-
图像检查 (
checkImg方法):- 检查文件是否为有效图像
- 上传php文件时返回false
- 但整体校验仍可通过
漏洞利用
- 后台添加php上传后缀
- 通过文件上传功能上传php文件
- 访问上传的php文件执行任意代码
5. 防护建议
-
YoudianCMS:
- 更新到最新修复版本
- 加强文件名过滤,禁止特殊字符
- 限制模板文件写入目录
-
KiteCMS:
- 官方已停止更新,建议更换系统
- 如需使用:
- 修复路径穿越问题
- 严格限制上传文件类型
- 实现文件操作的安全校验
-
通用防护:
- 实施严格的输入过滤
- 使用白名单而非黑名单
- 限制后台功能权限
- 定期安全审计
6. 总结
本文分析了YoudianCMS和KiteCMS多个高危漏洞,包括:
- 后台模板编辑导致的WebShell写入
- 任意文件读取
- 文件上传Getshell
这些漏洞均需要后台权限,但一旦获取后台权限即可完全控制网站服务器。建议用户及时更新或采取防护措施。