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

CVE-2021-47870 GetSimple CMS My SMTP Contact Plugin存储型XSS漏洞

披露日期: 2026-01-21

漏洞信息

漏洞编号
CVE-2021-47870
漏洞类型
存储型XSS
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
GetSimple CMS My SMTP Contact Plugin

相关标签

存储型XSSGetSimple CMSMy SMTP Contact Pluginhtmlspecialchars绕过CVE-2021-47870Web安全漏洞内容管理系统的安全漏洞

漏洞概述

CVE-2021-47870是GetSimple CMS的My SMTP Contact插件中存在的一个存储型跨站脚本(Stored XSS)漏洞,该插件版本为1.1.2。漏洞源于插件虽然尝试使用htmlspecialchars()函数对用户输入进行安全过滤,但攻击者可以通过传递经过转义的十六进制字节来绕过这一防护机制。具体而言,当管理员访问包含恶意脚本的页面时,攻击者注入的任意客户端代码将在管理员的浏览器中执行。由于该插件常用于处理联系表单数据,攻击者可以利用此漏洞窃取管理员会话cookie、劫持管理员账户,甚至进一步对网站进行更深层次的入侵。此漏洞需要攻击者具备低权限用户身份,并且需要诱导管理员进行某种交互操作,如访问特定页面或点击链接。CVSS 3.1评分为5.4,属于中等严重程度,主要影响系统的机密性和完整性。

技术细节

该漏洞的技术核心在于htmlspecialchars()函数的绕过。htmlspecialchars()通常会将特殊字符转换为HTML实体,如将<转换为&lt;、将>转换为&gt;等。然而,攻击者发现可以通过提交经过十六进制编码的恶意字符来绕过这一过滤机制。例如,使用\x3c绕过<符号的检测。插件在处理用户输入时未能正确识别和过滤这种编码后的恶意内容,导致攻击载荷被成功存储在服务器端。当其他用户(特别是管理员)访问包含恶意数据的页面时,这些编码后的字符会被浏览器解析执行,从而触发XSS攻击。攻击者可以利用此漏洞注入JavaScript代码,执行诸如窃取cookie、修改页面内容、重定向用户等恶意操作。由于是存储型XSS,恶意脚本会持久存在于服务器上,所有访问该页面的用户都会受到影响。

攻击链分析

STEP 1
步骤1
攻击者获取目标GetSimple CMS网站的用户账户(低权限即可)
STEP 2
步骤2
攻击者构造包含十六进制编码XSS载荷的表单数据,使用\\x3c等编码绕过htmlspecialchars()过滤
STEP 3
步骤3
攻击者通过联系表单提交恶意数据,载荷被存储在服务器数据库中
STEP 4
步骤4
当管理员访问包含恶意数据的页面时,浏览器解析并执行注入的JavaScript代码
STEP 5
步骤5
攻击者通过XSS窃取管理员Cookie或会话令牌,劫持管理员账户
STEP 6
步骤6
攻击者利用管理员权限进一步入侵,如上传webshell、修改网站内容或获取服务器完全控制权

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2021-47870 PoC - Stored XSS in GetSimple CMS My SMTP Contact Plugin # Target: GetSimple CMS with My SMTP Contact Plugin <= 1.1.2 target_url = sys.argv[1] if len(sys.argv) > 1 else 'http://target.com' # XSS payload using hex encoding to bypass htmlspecialchars() # The plugin filters < and > but hex encoded values bypass this xss_payload = '\\x3cscript\\x3ealert(document.cookie)\\x3c/script\\x3e' # Data to submit (adjust parameters based on plugin's actual form fields) data = { 'name': 'Attacker', 'email': '[email protected]', 'subject': xss_payload, 'message': 'Test XSS payload' } try: # Submit the malicious form data response = requests.post(f'{target_url}/plugins/my-smtp-contact/', data=data, timeout=10) if response.status_code == 200: print('[+] XSS payload submitted successfully') print('[+] When admin visits the page, the XSS will execute') print(f'[+] Payload: {xss_payload}') else: print('[-] Failed to submit payload') except requests.exceptions.RequestException as e: print(f'[-] Error: {e}')

影响范围

My SMTP Contact Plugin <= 1.1.2

防御指南

临时缓解措施
在官方补丁发布前,可临时采取以下措施:1) 禁用或删除My SMTP Contact插件;2) 实施严格的输入验证和白名单机制;3) 配置Web应用防火墙(WAF)规则识别和阻止XSS攻击尝试;4) 对管理员账户启用双因素认证以降低账户劫持风险;5) 监控网站日志及时发现异常请求和可疑活动。

参考链接

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