74CMS后台RCE分析
字数 1345 2025-08-22 12:23:36

74CMS后台RCE漏洞分析与利用教学文档

漏洞概述

74CMS v5.0.1版本存在一个后台远程代码执行(RCE)漏洞,攻击者通过精心构造的恶意请求可以在服务器上执行任意PHP代码。该漏洞需要管理员权限才能利用,但利用思路巧妙,通过网站域名设置功能实现代码注入。

影响范围

  • 受影响版本:74CMS v5.0.1
  • 利用条件:需要登录后台管理账户

漏洞复现

环境搭建

  1. 从74CMS官网下载v5.0.1版本系统安装包:http://www.74cms.com/download/index.html
  2. 在本地使用PHPstudy搭建测试环境

漏洞利用步骤

  1. 使用管理员账号登录后台
  2. 点击保存网络配置并使用BurpSuite抓包
  3. 构造恶意payload修改site_domain参数:
site_domain=', file_put_contents('403.php',base64_decode('PD9waHAgcGhwaW5mbygpOz8%2b')),'

其中PD9waHAgcGhwaW5mbygpOz8+<?php phpinfo();?>的base64编码

  1. 发送修改后的请求
  2. 访问/74cms/Application/Common/Conf/url.php触发恶意代码执行
  3. 成功写入403.php文件,内容为<?php phpinfo();?>
  4. 访问403.php验证漏洞利用成功

实战利用:可将文件内容修改为一句话木马实现getshell

漏洞分析

漏洞触发流程

  1. 攻击者通过后台配置功能提交恶意构造的site_domain参数
  2. 系统将恶意代码写入Application/Common/Conf/url.php配置文件
  3. 访问该配置文件时触发恶意代码执行
  4. 恶意代码在服务器上创建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函数用于安全获取输入参数,其工作流程:

  1. 参数过滤:默认使用htmlspecialchars过滤
  2. 变量类型转换:支持强制转换为整型(d)、字符串(s)、数组(a)等
  3. 特殊字符过滤:通过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;
}

该函数将配置数组合并后写入文件,未对内容进行充分过滤,导致恶意代码被写入配置文件。

漏洞利用技巧

  1. Payload构造:利用PHP的字符串连接和函数执行特性构造恶意代码
  2. Base64编码:绕过可能的过滤机制
  3. 二次触发:需要访问url.php文件才能使写入的代码执行
  4. 权限维持:可写入持久化后门而非一次性代码

防御建议

  1. 对用户输入进行严格过滤,特别是配置项的值
  2. 限制配置文件中可写入的内容类型
  3. 对文件写入操作增加内容安全检查
  4. 及时更新到最新版本
  5. 最小化后台管理权限

总结

该漏洞展示了即使需要管理员权限的漏洞也不容忽视,攻击者一旦获取后台权限,可通过看似无害的功能点实现服务器完全控制。开发人员应重视所有用户输入的安全处理,特别是系统配置相关功能。

参考链接

  1. ThinkPHP I函数详解
  2. 74CMS漏洞原始分析
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 参数: 其中 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() 方法: I函数分析 ThinkPHP的I函数用于安全获取输入参数,其工作流程: 参数过滤:默认使用 htmlspecialchars 过滤 变量类型转换:支持强制转换为整型(d)、字符串(s)、数组(a)等 特殊字符过滤:通过 think_filter 函数过滤SQL注入等危险字符 update_ config函数分析 位于 Application\Common\Controller\BackendController.class.php : 该函数将配置数组合并后写入文件,未对内容进行充分过滤,导致恶意代码被写入配置文件。 漏洞利用技巧 Payload构造 :利用PHP的字符串连接和函数执行特性构造恶意代码 Base64编码 :绕过可能的过滤机制 二次触发 :需要访问url.php文件才能使写入的代码执行 权限维持 :可写入持久化后门而非一次性代码 防御建议 对用户输入进行严格过滤,特别是配置项的值 限制配置文件中可写入的内容类型 对文件写入操作增加内容安全检查 及时更新到最新版本 最小化后台管理权限 总结 该漏洞展示了即使需要管理员权限的漏洞也不容忽视,攻击者一旦获取后台权限,可通过看似无害的功能点实现服务器完全控制。开发人员应重视所有用户输入的安全处理,特别是系统配置相关功能。 参考链接 ThinkPHP I函数详解 74CMS漏洞原始分析