murrez/CVE-2026-0911

GitHub: murrez/CVE-2026-0911

针对 WordPress Hustle 插件 CVE-2026-0911 漏洞的认证后测试工具,用于验证通过模块导入端点的弱文件上传与孤立文件行为。

Stars: 0 | Forks: 0

# CVE-2026-0911 — Hustle 模块导入 PoC 这是一款针对 WordPress 插件 **Hustle**(`wordpress-popup`,WPMU DEV)[CVE-2026-0911](https://nvd.nist.gov/vuln/detail/CVE-2026-0911) 的**研究 / 渗透测试辅助**工具,用于测试通过需要身份验证的**模块导入**端点所执行的上传行为。 此仓库或文件集中的 `CVE-2026-0911.py` 脚本,仅应在您**拥有**或**获得书面许可**进行测试的系统上使用。 ## 简要说明(漏洞逻辑) 在受影响版本中(Wordfence/NVD:**7.8.9.2 及更低版本**),由于在 `action_import_module()` 内部调用 `wp_handle_upload()` 时使用了 **`test_type => false`**,导致文件类型验证过于薄弱;即使导入后的 JSON 验证失败,上传的文件也可能**未被删除**(即成为“孤立”文件)。如果服务器在 `wp-content/uploads` 目录下启用了 PHP 执行,这实际上可能成为通向远程代码执行(RCE)攻击链的一部分。在修补后的版本中,引入了 `test_type => true` 和临时的 `upload_mimes` 限制以强制执行 `.json` 扩展名。 有关详细的技术摘要,请参阅 NVD 记录和 Wordfence 参考资料。 ## 环境要求 - Python **3.9+**(类型提示兼容 `from __future__ import annotations`) - 依赖包:**requests** 安装示例: ``` pip install requests ``` ## 运行说明 必须提供至少一个目标(`-u` 或 `-l`)以及有效的 WordPress 会话(`--cookie` 或 `--cookie-file`)。 ``` python CVE-2026-0911.py -u "https://ornek.com" --cookie "wordpress_logged_in_...=...; ..." ``` 帮助信息: ``` python CVE-2026-0911.py --help ``` ## 命令行参数 | 参数 | 说明 | |-----------|----------| | `-u`, `--url` | 单个目标的根 URL(例如 `https://site.com`) | | `-l`, `--list` | 包含多个 URL 的文件(每行一个,支持 `#` 注释) | | `--cookie` | 从浏览器中复制的 Cookie 字符串 | | `--cookie-file` | 包含单行 Cookie 的文件 | | `--nonce` | 手动指定 `hustle_single_action` 的 WordPress nonce(代替自动获取) | | `--admin-page` | 用于获取 nonce 的 `admin.php?page=` 值(默认:`hustle_popup_listing`) | | `--module-id` | POST 请求中的 `moduleId`(默认 `0`:无效模块 → 触发导入流程) | | `--module-type` | 模块类型:`popup`、`slidein`、`embedded`、`social_sharing` | | `--module-mode` | 模块模式,例如 `informational`、`optin` | | `--remote-name` | 在 Multipart 请求中发送的文件名(默认:`probe_rce.php`) | | `--payload-file` | 从文件读取要上传的内容(覆盖 `--uploader` 和默认探测行为) | | `--uploader` | 使用内置的微型 PHP 表单上传器主体 | | `--workers` | 列表模式下的并发线程数(默认:8) | | `--timeout` | 请求超时时间(秒)(默认:25) | | `--verify-ssl` | 启用 TLS 验证(默认:关闭) | | `--debug` | 输出额外的调试信息 | | `--quiet` | 关闭域名/步骤日志;聚焦于摘要信息 | | `-o`, `--output` | 追加写入成功“命中”记录的输出文件 | ## 输出与日志记录 - 默认情况下,将为每个目标打印**中文步骤日志**:nonce GET 请求、`admin-ajax.php` POST 摘要、可能的候选 URL。在多目标模式下,由于行来自不同线程,显示可能会偶尔交错;每行都将包含目标域名。 - 使用 `--quiet` 可关闭这些详细信息。 - **成功**的结果(基于脚本内部逻辑的“孤立上传”信号)会立即**追加**(`append`)到 `-o` 文件中,并通过 `flush` 以及(如果可能)`fsync` 写入磁盘。默认文件名为:`cve-2026-0911-hits.txt`(位于工作目录下,会输出绝对路径摘要)。 - 文件格式:一行包含目标及描述;下方为缩进的候选 shell URL。 ## 使用场景示例 单站点,启用 TLS 验证和调试: ``` python CVE-2026-0911.py -u "https://lab.local" --cookie-file cookie.txt --verify-ssl --debug ``` 列表扫描,16 个线程,自定义输出: ``` python CVE-2026-0911.py -l hedefler.txt --cookie "..." --workers 16 -o sonuclar.txt ``` 使用内置上传器主体和自定义远程文件名: ``` python CVE-2026-0911.py -u "https://lab.local" --cookie "..." --uploader --remote-name test.php ``` ## 前置条件与限制 - 需要有效的 **WordPress 会话**及对 Hustle 管理界面的访问权限;nonce 通常从 `optinVars` 中的 `single_module_action_nonce` 字段读取。 - **免费配额限制:** 在 `moduleId=0` 路径中,插件可能会在执行上传前因模块数量限制而返回错误;在这种情况下,文件将不会被写入。 - 候选 URL 基于 `wp-content/uploads/YYYY/MM/` 的假设生成;如果 WordPress 重命名了文件,实际路径可能会有所不同。 - 相同的 `--cookie` 无法在不同域名上生效;在测试多站点时,每个环境都需要提供相应的会话。 ## 退出代码 - 如果至少有一次成功的“命中”,则返回 `0`;否则返回非零代码(基于脚本内部 `main` 的返回值)。 - 通过 `Ctrl+C` 中断:`130`。 ## 参考文献 - [NVD — CVE-2026-0911](https://nvd.nist.gov/vuln/detail/CVE-2026-0911) - [WordPress.org — Hustle 插件](https://wordpress.org/plugins/wordpress-popup/) - Wordfence 威胁情报链接可在 NVD 的“References”部分中找到。 ## 免责声明 本工具仅供**合法的安全测试**、**教育**和**防御目的**使用。未经授权在系统上使用是违法行为,可能导致严厉的法律处罚。作者和贡献者对任何滥用行为不承担责任。
标签:CISA项目, CVE-2026-0911, Hustle插件, Maven, PoC, Python, RCE, URL发现, Web安全, WordPress, WPMU DEV, 任意文件上传, 孤儿文件, 安全检测, 弱文件验证, 提示词注入, 插件漏洞, 无后门, 无服务器架构, 暴力破解, 漏洞验证, 白盒测试, 编程工具, 蓝队分析, 远程代码执行, 逆向工具