CSCMS代码审计(php)
字数 1492 2025-08-06 23:10:31

CSCMS v4.1.9 代码审计与漏洞分析报告

0x00 系统概述

CSCMS 是一款基于 PHP5+MySQL 开发的多功能内容管理系统,采用 CodeIgniter 3.1.3 框架作为内核,基于 MVC 模式开发。系统具有以下特点:

  • 采用 OOP(面向对象)方式进行框架搭建
  • 配置文件位于 /upload/cscms/config 目录
  • 前台入口文件为 index.php
  • 后台入口文件为 admin.php(通过设置 IS_ADMIN=TRUE 标志位实现后台功能)

0x01 路由分析

URL 路由遵循 CodeIgniter 的规则:

example.com/class/function/id/

例如:

http://192.168.111.141/index.php/dance/playsong

对应 dance 类下的 playsong 方法。

0x02 漏洞审计

1. SQL 注入漏洞

位置upload/plugins/dance/playsong.php

漏洞代码

$zd = $this->input->get_post('zd', TRUE, TRUE);
$row = $this->db->query("select id,cid,singerid,name,tid,fid,purl,sc,lrc,dhits".$zd." from ".CS_SqlPrefix."dance where id=".$id."")->row();

分析

  • $zd 变量直接拼接进 SQL 语句
  • 虽然使用了 get_post 方法并设置了 sql_clean=TRUE 进行过滤
  • 过滤函数 safe_replace 过滤了一些特殊字符,但不需要引号闭合仍可构造 SQL 语句

利用
通过 zd 参数注入 SQL 语句。

2. 任意文件删除漏洞

位置:后台删除附件功能

漏洞描述
后台删除附件处未做任何判断和过滤,可删除任意文件。

3. 安装过程 RCE 漏洞

位置install.php

漏洞代码

$config = read_file(CSCMS.'sys'.FGF.'Cs_DB.php');
$config = preg_replace("/'CS_Sqlname',.*?\)/", "'CS_Sqlname','".$dbname."')", $config);
if (!write_file(CSCMS.'sys'.FGF.'Cs_DB.php', $config)) exit('5');

分析

  • 安装过程中数据库名称等参数未过滤直接写入配置文件
  • 可通过数据库名称参数注入 PHP 代码

利用步骤

  1. 删除 install.lock 文件
  2. 重新安装系统
  3. 在数据库名称处输入恶意代码:cscms');phpinfo();//
  4. 安装完成后访问首页触发代码执行

4. 前台 RCE(模板注入)

位置Csskins.phpcscms_php 方法

漏洞代码

public function cscms_php($php, $content, $str) {
    $evalstr = "return $content";
    $newsphp = eval($evalstr);
    $str = str_replace($php, $newsphp, $str);
    return $str;
}

触发点

  • 通过 {cscmsphp}php代码{/cscmsphp} 标签执行 PHP 代码
  • 在视频上传的"剧情简介"等字段插入恶意模板代码

利用方法

  1. 上传视频时在选填字段插入:
    {cscmsphp}phpinfo();{/cscmsphp}
    
  2. 访问视频播放页面触发代码执行

5. 后台 RCE(会员信息修改)

位置:会员信息修改功能

利用方法

  1. 创建用户并设置个人签名包含恶意模板代码
  2. 管理员在后台修改该会员信息
  3. 访问特定 URL 触发代码执行

6. 后台 RCE(模板修改)

位置:后台模板修改功能

利用方法

  1. 管理员后台修改会员主页模板
  2. 插入 PHP 代码并保存为 .html 文件
  3. 系统会将这些 HTML 文件当作 PHP 解析

0x03 漏洞修复建议

  1. SQL 注入

    • 使用预处理语句替代直接拼接 SQL
    • 加强 safe_replace 函数的过滤规则
  2. 文件删除

    • 限制删除操作的文件路径
    • 增加权限验证
  3. 安装 RCE

    • 对写入配置文件的参数进行严格过滤
    • 安装完成后立即删除或重命名安装文件
  4. 模板注入

    • 禁用 eval 执行用户可控内容
    • 过滤模板标签中的特殊字符
    • 对用户输入的模板内容进行严格校验
  5. 通用建议

    • 升级 CodeIgniter 框架到最新版本
    • 实施严格的输入验证和输出编码
    • 最小化 PHP 执行权限

0x04 总结

CSCMS v4.1.9 存在多处高危漏洞,攻击者可利用这些漏洞实现:

  • 未授权 SQL 注入
  • 任意文件删除
  • 前台/后台远程代码执行
  • 通过安装过程获取服务器控制权

建议用户立即升级到最新版本或应用相关补丁,并检查系统是否已被入侵。

CSCMS v4.1.9 代码审计与漏洞分析报告 0x00 系统概述 CSCMS 是一款基于 PHP5+MySQL 开发的多功能内容管理系统,采用 CodeIgniter 3.1.3 框架作为内核,基于 MVC 模式开发。系统具有以下特点: 采用 OOP(面向对象)方式进行框架搭建 配置文件位于 /upload/cscms/config 目录 前台入口文件为 index.php 后台入口文件为 admin.php (通过设置 IS_ADMIN=TRUE 标志位实现后台功能) 0x01 路由分析 URL 路由遵循 CodeIgniter 的规则: 例如: 对应 dance 类下的 playsong 方法。 0x02 漏洞审计 1. SQL 注入漏洞 位置 : upload/plugins/dance/playsong.php 漏洞代码 : 分析 : $zd 变量直接拼接进 SQL 语句 虽然使用了 get_post 方法并设置了 sql_clean=TRUE 进行过滤 过滤函数 safe_replace 过滤了一些特殊字符,但不需要引号闭合仍可构造 SQL 语句 利用 : 通过 zd 参数注入 SQL 语句。 2. 任意文件删除漏洞 位置 :后台删除附件功能 漏洞描述 : 后台删除附件处未做任何判断和过滤,可删除任意文件。 3. 安装过程 RCE 漏洞 位置 : install.php 漏洞代码 : 分析 : 安装过程中数据库名称等参数未过滤直接写入配置文件 可通过数据库名称参数注入 PHP 代码 利用步骤 : 删除 install.lock 文件 重新安装系统 在数据库名称处输入恶意代码: cscms');phpinfo();// 安装完成后访问首页触发代码执行 4. 前台 RCE(模板注入) 位置 : Csskins.php 的 cscms_php 方法 漏洞代码 : 触发点 : 通过 {cscmsphp}php代码{/cscmsphp} 标签执行 PHP 代码 在视频上传的"剧情简介"等字段插入恶意模板代码 利用方法 : 上传视频时在选填字段插入: 访问视频播放页面触发代码执行 5. 后台 RCE(会员信息修改) 位置 :会员信息修改功能 利用方法 : 创建用户并设置个人签名包含恶意模板代码 管理员在后台修改该会员信息 访问特定 URL 触发代码执行 6. 后台 RCE(模板修改) 位置 :后台模板修改功能 利用方法 : 管理员后台修改会员主页模板 插入 PHP 代码并保存为 .html 文件 系统会将这些 HTML 文件当作 PHP 解析 0x03 漏洞修复建议 SQL 注入 : 使用预处理语句替代直接拼接 SQL 加强 safe_replace 函数的过滤规则 文件删除 : 限制删除操作的文件路径 增加权限验证 安装 RCE : 对写入配置文件的参数进行严格过滤 安装完成后立即删除或重命名安装文件 模板注入 : 禁用 eval 执行用户可控内容 过滤模板标签中的特殊字符 对用户输入的模板内容进行严格校验 通用建议 : 升级 CodeIgniter 框架到最新版本 实施严格的输入验证和输出编码 最小化 PHP 执行权限 0x04 总结 CSCMS v4.1.9 存在多处高危漏洞,攻击者可利用这些漏洞实现: 未授权 SQL 注入 任意文件删除 前台/后台远程代码执行 通过安装过程获取服务器控制权 建议用户立即升级到最新版本或应用相关补丁,并检查系统是否已被入侵。