由 Yora 制作
仅供教育与授权测试使用
CVE-2026-15748 是与 WordPress 上的 Forminator 插件相关的漏洞。
该工具旨在帮助针对使用 Forminator 的 WordPress 安装进行安全研究与授权测试。
扫描器的检查分为多个阶段,从 WordPress 检测、Forminator 查找、版本识别、页面爬取,到特定表单配置检查。
⚠️ 仅在你拥有或已获得测试授权的网站、服务器、实验室或系统上使用此工具。
| 功能 | 说明 |
|---|---|
| 🔎 WordPress 检测 | 检测目标是否使用 WordPress |
| 🔌 Forminator 检测 | 检测 Forminator 插件安装 |
| 🏷️ 版本检测 | 从可用来源获取 Forminator 版本 |
| 📊 版本检查 | 将版本与 1.56.1 进行比较 |
| 🕷️ 网站爬取 | 在目标上查找相关页面 |
| 🗺️ Sitemap 检测 | 检查多个 WordPress sitemap |
| 📝 表单检测 | 检测特定的 Forminator 表单 |
| 🔐 Nonce 检测 | 尝试查找 Forminator nonce |
| ⚡ 多线程 | 同时支持多个目标 |
| 🔁 重试 | 失败的请求将被重试 |
| ⏱️ 请求延迟 | 在请求之间使用随机延迟 |
| 📄 详细结果 | 将检查结果保存到文件 |
该工具需要:
requestspackagingurllib3安装依赖:
pip install requests packaging urllib3
或者:
python -m pip install requests packaging urllib3
克隆仓库:
git clone https://github.com/yora1928/cve-2026-15748.git
进入目录:
cd cve-2026-15748
安装依赖:
pip install requests packaging urllib3
检查 Python:
python --version
主要配置位于脚本的 CONFIG 部分:
TIMEOUT = 15
THREADS = 8
VULN_MAX = "1.56.1"
MAX_RETRIES = 3
DELAY_MIN = 1.0
DELAY_MAX = 2.5
CRAWL_DEPTH = 2
这些配置直接位于源代码中。
该工具支持两种目标输入方式:
python cve-2026-15748.py -u https://target.com
参数:
-u
--url
用于输入单个目标。
创建文件:
targets.txt
示例:
https://target1.com
https://target2.com
https://target3.com
然后运行:
python cve-2026-15748.py -f targets.txt
参数:
-f
--file
源代码将每行读取为一个目标,并忽略空行。
默认:
8 threads
如需更改:
python cve-2026-15748.py -f targets.txt -t 10
另一个示例:
python cve-2026-15748.py -f targets.txt -t 5
参数:
-t
脚本还提供以下选项:
--upload
示例:
python cve-2026-15748.py -u https://target.com --upload
或者:
python cve-2026-15748.py -f targets.txt --upload
⚠️ 该模式会向 Forminator 端点发送 POST/上传请求。仅可在明确允许此类测试的系统上使用。
当满足特定检查条件时,--upload 实现会调用 upload_test() 函数。
python cve-2026-15748.py -u https://target.com
python cve-2026-15748.py -f targets.txt
python cve-2026-15748.py -f targets.txt -t 10
python cve-2026-15748.py -u https://lab.example.com --upload
python cve-2026-15748.py -f authorized-targets.txt -t 5 --upload
通常,扫描器按以下流程工作:
Target
│
▼
Normalize URL
│
▼
WordPress Detection
│
├── Tidak ditemukan
│ └── NOT WORDPRESS
│
▼
Crawl Pages
│
▼
Forminator Detection
│
▼
Version Detection
│
▼
Version Comparison
│
▼
Form Detection
│
▼
Result
扫描器检查以下端点:
/wp-login.php
/wp-json
/xmlrpc.php
/wp-content
除了特定的 HTTP 状态外,扫描器还会查找以下指示器:
wp-content
wp-includes
在页面响应中。
如果未找到 WordPress 指示器:
[NOT WORDPRESS]
扫描器会从多个来源构建页面列表。
检查的路径包括:
/contact
/kontak
/hubungi-kami
/form
/forms
/formulir
/upload
/unggah
/submit
/kirim
/gallery
/kontribusi
/daftar
/pendaftaran
/registration
/register
/file-upload
/submit-document
/unggah-berkas
/upload-file
源代码还会检查:
/sitemap.xml
/sitemap_index.xml
/wp-sitemap.xml
并从主页获取内部链接。
扫描器会查找 Forminator 标识符,例如:
forminator-form-<ID>
以及其他一些 HTML 模式。
对于找到的表单,扫描器会检查是否存在:
type="file"
以及:
<select>
扫描器还会尝试获取:
form_id
nonce
从表单的 HTML 中。
Forminator 版本可以从 HTML 资源中获取,例如:
/wp-content/plugins/forminator/...
使用参数:
?ver=X.X.X
扫描器还有后备方法来查找:
Stable tag:
在 HTML 和 readme.txt 中。
输出中显示的方法可以是:
html-source
或者:
readme.txt
源代码中的版本上限:
1.56.1
检查方式是将发现的版本与 VULN_MAX 进行比较。
内部结果可以是:
VULNERABLE
或者:
PATCHED
如果版本未知但满足特定条件,源代码会使用状态:
INSTALLED (unknown version)
工具的主要输出格式遵循以下结构:
[STATUS] URL VERSION (METHOD) [PAGES] [FORM STATUS] [VULNERABILITY STATUS] [UPLOAD STATUS]
示例:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [HAS UPLOAD FORM] [VULNERABLE]
如果检测到上传表单:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [HAS UPLOAD FORM] [VULNERABLE]
如果没有表单:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [VULNERABLE]
FOUNDForminator 已找到,并成功获取了重要信息。
NOT FOUND未能找到 Forminator。
示例:
[NOT FOUND] https://target.com [17 pages]
NOT WORDPRESS目标未被检测为 WordPress。
示例:
[NOT WORDPRESS] https://target.com
INSTALLED (unknown version)检测到 Forminator 已安装,但未能确定版本。
VULNERABLE发现的版本低于或等于:
1.56.1
PATCHED发现的版本高于上限:
1.56.1
所有目标处理完毕后,工具会显示摘要。
示例:
========== SUMMARY ==========
VULNERABLE : 10
PATCHED : 5
UNKNOWN VERSION : 3
NOT FOUND : 20
NOT WORDPRESS : 2
TOTAL SCANNED : 40
[+] HAVE UPLOAD FORM: 2
摘要根据扫描器收集到的每个目标结果计算得出。
工具会自动创建:
scan_results_detailed.txt
该文件在扫描过程完成后创建。
其结构如下:
=== VULNERABLE (with upload form) ===
=== VULNERABLE (no upload form) ===
=== UNKNOWN VERSION (assume vulnerable) ===
示例:
=== VULNERABLE (with upload form) ===
https://target.example - v1.56.0 (html-source) - form_data: ...
=== VULNERABLE (no upload form) ===
https://target.example - v1.55.0 (html-source)
=== UNKNOWN VERSION (assume vulnerable) ===
https://target.example
如果扫描结果文件包含目标或敏感信息,则不应将其提交到仓库。
cve-2026-15748/
│
├── cve-2026-15748.py
├── README.md
├── targets.txt
└── scan_results_detailed.txt
cve-2026-15748.py主扫描器。
README.md项目文档。
targets.txt将要处理的目标列表。
scan_results_detailed.txt自动生成的扫描结果文件。
源代码由几个主要部分组成:
cve-2026-15748.py
│
├── CONFIG
│ ├── TIMEOUT
│ ├── THREADS
│ ├── VULN_MAX
│ ├── MAX_RETRIES
│ ├── DELAY_MIN
│ ├── DELAY_MAX
│ └── CRAWL_DEPTH
│
├── HTTP / REQUEST
│ ├── get_headers()
│ └── safe_get()
│
├── URL
│ └── normalize()
│
├── VERSION
│ ├── is_vulnerable()
│ └── extract_version_from_html()
│
├── WORDPRESS
│ └── check_wordpress()
│
├── CRAWLING
│ └── get_all_pages()
│
├── FORM DETECTION
│ └── extract_form_data_advanced()
│
├── FORMINATOR
│ └── check_forminator_full()
│
├── TESTING
│ └── upload_test()
│
├── SCANNING
│ └── scan_target()
│
└── MAIN
└── main()
这些函数与源代码的实际结构一致。
扫描器使用:
所使用的 User-Agent 涵盖多种常见浏览器。
GET 请求使用重试和延迟配置:
TIMEOUT = 15 seconds
MAX_RETRIES = 3
DELAY = 1.0–2.5 seconds
扫描器存在以下一些局限性:
UNKNOWN 结果需要手动检查。建议 WordPress 管理员:
在对系统运行扫描器之前:
✓ Pastikan sistem berada dalam scope
✓ Pastikan kamu memiliki izin
✓ Gunakan environment testing jika memungkinkan
✓ Hindari data pengguna nyata
✓ Jangan melakukan pengujian di luar scope
✓ Simpan hasil assessment dengan aman
仅供教育与授权测试使用。
本工具是为以下目的而创建的:
请勿将此工具用于你不拥有或未提供测试授权的系统。
用户应对使用本工具承担全部责任。
作者不对因滥用本工具而造成的损害、数据丢失、服务中断或法律后果承担责任。
Yora
GitHub:
仓库:
https://github.com/yora1928/cve-2026-15748
如果该项目有助于学习或合法的安全研究,你可以在仓库上点一个 ⭐。
MIT License
由 Yora 以 ❤️ 制作
| 变量 | 默认值 | 功能 |
|---|
TIMEOUT | 15 | HTTP 请求超时 |
THREADS | 8 | worker/线程数量 |
VULN_MAX | 1.56.1 | 被视为受影响版本的版本上限 |
MAX_RETRIES | 3 | 请求重试次数 |
DELAY_MIN | 1.0 | 最小延迟 |
DELAY_MAX | 2.5 | 最大延迟 |
CRAWL_DEPTH | 2 | 爬取深度 |