
经过身份验证的 CVE-2026-0911 PoC:测试 WordPress Hustle 插件模块导入端点中的弱文件上传和孤立文件行为,支持多目标扫描和载荷自定义。
针对 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,这实际上可能成为通向远程代码执行的链条的一部分。在已修补版本中,引入了 test_type => true 和临时 来限制 。
upload_mimes.json详细技术摘要请参阅 NVD 记录和 Wordfence 参考资料。
from __future__ import annotations 兼容)安装示例:
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 | 成功“命中”行追加写入的文件 |
admin-ajax.php POST 摘要、可能的候选 URL。多目标时,由于行来自线程,可能偶尔显得混乱;每行都包含目标域名。--quiet 可抑制这些详细信息。-o 文件,并通过 flush / 尽可能 fsync 写入磁盘。默认文件名:cve-2026-0911-hits.txt(工作目录中的绝对路径会被摘要显示)。单站点,启用 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
optinVars 中的 single_module_action_nonce 字段读取。moduleId=0 路径下,插件可能因模块限制而在上传前返回错误;此时文件不会被写入。wp-content/uploads/YYYY/MM/ 假设生成;如果 WordPress 重命名了文件,实际路径可能不同。--cookie 不能用于不同域名;多站点测试时,每个环境都需要相应的会话。0,否则返回非零代码(脚本内部 main 的返回值)。Ctrl+C 中断:130。本工具仅用于 合法安全测试、教育 和 防御目的。在未经授权的系统上使用违反法律,并可能导致严重处罚。作者和贡献者不对滥用行为承担责任。