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

漏洞分析

  1. 文件名处理流程

    • 首先调用 YdInput 类的 checkFileName 方法处理文件名:
      static function checkFileName($str) {
          $str = str_replace('..', '', $str);
          return $str;
      }
      
    • 仅简单替换 .. 为空,防护不足
  2. 路径拼接与校验

    • 调用 ltrim 去除文件名开头空白字符
    • 拼接完整文件路径
    • 调用 isValidTplFile 方法校验模板文件:
      • 进行大小写转换
      • 白名单检测文件后缀
  3. 写入过程

    • 调用 htmlspecialchars_decode 解码实体编码(不影响WebShell写入)
    • 使用 file_put_contents 写入内容
    • HTML文件会被包含,其中的PHP代码会被执行

漏洞利用

通过后台模板管理功能,可以写入恶意PHP代码到模板文件中,由于模板文件会被包含执行,导致WebShell植入。

2. KiteCMS 后台模板编辑写入 WebShell 漏洞

漏洞位置

application\admin\controller\Template.php#25

漏洞分析

  1. 参数处理

    • 调用 Request 类的 param 方法获取 path 参数
    • 实例化 Site 类查询数据库获取模板值(默认为 default
    • 最终路径格式:root_path/theme/default/$path$path 可控)
  2. 路径校验

    if (!file_exists($rootpath) && !preg_match("/theme/", $rootpath)) {
        throw new HttpException(404, 'This is not file');
    }
    
    • 仅校验路径存在且包含 /theme/
  3. 写入条件

    • POST传参时触发写入
    • 调用 is_write 检查文件可写权限
    • 使用 file_put_contents 写入 htmlspecialchars_decode 解码后的内容
  4. 漏洞点

    • 路径拼接可被穿越
    • 无有效过滤允许写入任意位置

漏洞利用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

漏洞分析

  1. 上传流程

    • Request 类的 file 方法获取上传文件信息
    • 实例化 UploadFile 类并调用 upload 方法
    • 文件类型默认为 image
  2. 配置检查

    • 检查 config\site.php 默认配置
    • 后台可添加上传后缀(如添加php)
  3. 校验逻辑 (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文件可通过校验
  4. 图像检查 (checkImg 方法):

    • 检查文件是否为有效图像
    • 上传php文件时返回false
    • 但整体校验仍可通过

漏洞利用

  1. 后台添加php上传后缀
  2. 通过文件上传功能上传php文件
  3. 访问上传的php文件执行任意代码

5. 防护建议

  1. YoudianCMS

    • 更新到最新修复版本
    • 加强文件名过滤,禁止特殊字符
    • 限制模板文件写入目录
  2. KiteCMS

    • 官方已停止更新,建议更换系统
    • 如需使用:
      • 修复路径穿越问题
      • 严格限制上传文件类型
      • 实现文件操作的安全校验
  3. 通用防护

    • 实施严格的输入过滤
    • 使用白名单而非黑名单
    • 限制后台功能权限
    • 定期安全审计

6. 总结

本文分析了YoudianCMS和KiteCMS多个高危漏洞,包括:

  • 后台模板编辑导致的WebShell写入
  • 任意文件读取
  • 文件上传Getshell

这些漏洞均需要后台权限,但一旦获取后台权限即可完全控制网站服务器。建议用户及时更新或采取防护措施。

YoudianCMS v9.0/v9.2 与 KiteCMS 安全审计报告 1. YoudianCMS 后台模板管理写入 WebShell 漏洞 漏洞位置 App\Lib\Action\Admin\TemplateAction.class.php#68 漏洞分析 文件名处理流程 : 首先调用 YdInput 类的 checkFileName 方法处理文件名: 仅简单替换 .. 为空,防护不足 路径拼接与校验 : 调用 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 可控) 路径校验 : 仅校验路径存在且包含 /theme/ 写入条件 : POST传参时触发写入 调用 is_write 检查文件可写权限 使用 file_put_contents 写入 htmlspecialchars_decode 解码后的内容 漏洞点 : 路径拼接可被穿越 无有效过滤允许写入任意位置 漏洞利用POC 3. KiteCMS 任意文件读取漏洞 漏洞位置 同模板编辑功能 ( application\admin\controller\Template.php ) 漏洞分析 非POST请求时触发读取逻辑 校验文件可读权限 调用 file_get_contents 读取文件 结合路径穿越可读取任意文件 漏洞利用 4. KiteCMS 后台文件上传 Getshell 漏洞位置 application\admin\controller\Upload.php 漏洞分析 上传流程 : Request 类的 file 方法获取上传文件信息 实例化 UploadFile 类并调用 upload 方法 文件类型默认为 image 配置检查 : 检查 config\site.php 默认配置 后台可添加上传后缀(如添加php) 校验逻辑 ( thinkphp\library\think\File.php#226 ): 条件为"或"逻辑,只需满足一项即可 文件大小通常满足 添加php后缀后上传php文件可通过校验 图像检查 ( checkImg 方法): 检查文件是否为有效图像 上传php文件时返回false 但整体校验仍可通过 漏洞利用 后台添加php上传后缀 通过文件上传功能上传php文件 访问上传的php文件执行任意代码 5. 防护建议 YoudianCMS : 更新到最新修复版本 加强文件名过滤,禁止特殊字符 限制模板文件写入目录 KiteCMS : 官方已停止更新,建议更换系统 如需使用: 修复路径穿越问题 严格限制上传文件类型 实现文件操作的安全校验 通用防护 : 实施严格的输入过滤 使用白名单而非黑名单 限制后台功能权限 定期安全审计 6. 总结 本文分析了YoudianCMS和KiteCMS多个高危漏洞,包括: 后台模板编辑导致的WebShell写入 任意文件读取 文件上传Getshell 这些漏洞均需要后台权限,但一旦获取后台权限即可完全控制网站服务器。建议用户及时更新或采取防护措施。