ayinedjimi/wordpress-vulnerable-lab

GitHub: ayinedjimi/wordpress-vulnerable-lab

一个基于 Docker 的完整 WordPress 漏洞实验室,集成了大量真实 CVE 插件、辅助服务与多步 CTF 攻击链,专用于安全学习、CTF 训练及漏洞扫描器基准测试。

Stars: 2 | Forks: 0

``` ██╗ ██╗██████╗ ██╗ ██╗██╗ ██╗██╗ ███╗ ██╗ ██╗ █████╗ ██████╗ ██║ ██║██╔══██╗ ██║ ██║██║ ██║██║ ████╗ ██║ ██║ ██╔══██╗██╔══██╗ ██║ █╗ ██║██████╔╝ ██║ ██║██║ ██║██║ ██╔██╗ ██║ ██║ ███████║██████╔╝ ██║███╗██║██╔═══╝ ╚██╗ ██╔╝██║ ██║██║ ██║╚██╗██║ ██║ ██╔══██║██╔══██╗ ╚███╔███╔╝██║ ╚████╔╝ ╚██████╔╝███████╗██║ ╚████║ ███████╗██║ ██║██████╔╝ ╚══╝╚══╝ ╚═╝ ╚═══╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚═════╝ ``` # wordpress-vulnerable-lab — **v2.0.0** ### 世界上最完整的 Docker WordPress 漏洞实验室。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/67/675de04b8a2fed6d3452b8f28b505f0d9c9ec2ae19a5739fbf66e247817b73ef.svg)](https://github.com/ayinedjimi/wordpress-vulnerable-lab/actions/workflows/ci.yml) [![验证 CVE](https://static.pigsec.cn/wp-content/uploads/repos/cas/f5/f5cdf37a8ff03744c2923ff85c674094c4e2e6171945226a0080007eba4aa0f8.svg)](https://github.com/ayinedjimi/wordpress-vulnerable-lab/actions/workflows/verify.yml) [![许可证: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Docker](https://img.shields.io/badge/docker-compose-blue?logo=docker)](docker-compose.yml) [![漏洞](https://img.shields.io/badge/vulns-141%2B-red)](docs/VULNERABILITIES.md) [![CVE 年份](https://img.shields.io/badge/CVE_years-2019–2025-orange)](docs/VULNERABILITIES.md) [![Kill chains](https://img.shields.io/badge/kill_chains-5-purple)](docs/CTF/) [![WP 矩阵](https://img.shields.io/badge/WP_matrix-5.2/5.3/6.1/6.8-success)](docs/PHASE_F_MATRIX.md) [![Stacks](https://img.shields.io/badge/stacks-Apache+nginx-blue)](docs/PHASE_D_NGINX.md) [![作者](https://img.shields.io/badge/author-Ayi%20NEDJIMI-black)](https://ayinedjimi-consultants.fr) **54 个固定 CVE 的插件与主题 (2019-2025) · 10 个定制的教学性质 mini-plugin · WP 5.2 / 5.3 / 6.1 / 6.8 矩阵 · Apache + nginx stack · 辅助服务 (Elasticsearch / MinIO / Gitea / 伪造的 AWS IMDS) · 5 条完整文档化的 kill-chain · 11 处故意的配置错误** [快速开始](#quickstart-30-seconds) · [所有漏洞](docs/VULNERABILITIES.md) · [2024-25 CVE 包](docs/PHASE_A_GROUND_TRUTH.md) · [定制 mini-plugin](docs/PHASE_B_GROUND_TRUTH.md) · [辅助服务](docs/PHASE_C_SERVICES.md) · [nginx stack](docs/PHASE_D_NGINX.md) · [Kill chains](docs/CTF/) · [WP 矩阵](docs/PHASE_F_MATRIX.md) · [Français](#français)
## 🆕 v2.0.0 中的新特性 | 阶段 | 范围 | 文件 | |-------|-------|-------| | **A** | 15 个固定 CVE 的插件 (CVE-2024-* / CVE-2025-*) + 5 个存在漏洞的主题 | [`docs/PHASE_A_GROUND_TRUTH.md`](docs/PHASE_A_GROUND_TRUTH.md) | | **B** | 10 个定制的教学性质 mini-plugin,每类漏洞一个 (nonce, type-juggling, mass-assignment, host-poisoning, CRLF, SOAP-XXE, race coupon…) | [`plugins/bazooka-vuln-pack/`](plugins/bazooka-vuln-pack/) · [`docs/PHASE_B_GROUND_TRUTH.md`](docs/PHASE_B_GROUND_TRUTH.md) | | **C** | 辅助服务 compose:Elasticsearch / MinIO / Gitea / 伪造的 AWS IMDS — 可用于 SSRF → metadata → S3 dump 链 | [`docker-compose.aux.yml`](docker-compose.aux.yml) · [`docs/PHASE_C_SERVICES.md`](docs/PHASE_C_SERVICES.md) | | **D** | 替代 stack:nginx 1.18 + PHP 8.1-FPM + ModSec-lite (3 处故意的 nginx 配置错误) | [`docker-compose.nginx.yml`](docker-compose.nginx.yml) · [`docs/PHASE_D_NGINX.md`](docs/PHASE_D_NGINX.md) | | **E** | 5 条完整文档化的多步骤 CTF kill-chain,包含 curl/wpscan/sqlmap 命令 + 植入的 flag | [`docs/CTF/`](docs/CTF/) · [`scripts/plant-flags.sh`](scripts/plant-flags.sh) | | **F** | WordPress 版本矩阵:在 4 个端口上并行运行 5.2 / 5.3 / 6.1 / 6.8 — 跨版本基准测试扫描器 | [`docker-compose.matrix.yml`](docker-compose.matrix.yml) · [`docs/PHASE_F_MATRIX.md`](docs/PHASE_F_MATRIX.md) | ## 快速开始 (30 秒) ``` git clone https://github.com/ayinedjimi/wordpress-vulnerable-lab.git cd wordpress-vulnerable-lab bash scripts/install.sh # boots stack + installs 54 vulnerable plugins/themes ``` 然后: | 服务 | URL | 凭证 | |---|---|---| | WordPress | http://localhost:31338 | `admin` / `admin` | | phpMyAdmin | http://localhost:31339 | `root` / `root` | | MailHog | http://localhost:31340 | — | | Adminer | http://localhost:31341 | 服务器 `db`, 用户 `root`, 密码 `root` | | MySQL | `localhost:31306` | `wordpress` / `wordpress` | | Redis | `localhost:31379` | 无需认证 | | Memcached | `localhost:31211` | 无需认证 | 验证所有服务是否在线: ``` bash scripts/verify.sh http://localhost:31338 ``` 销毁并从零开始重建: ``` bash scripts/reset.sh ``` ### 可选 compose stack (v2.0.0) ``` # 基础服务之外,还提供辅助服务(Elasticsearch、MinIO、Gitea、模拟 AWS IMDS): docker compose -f docker-compose.yml -f docker-compose.aux.yml up -d # 除了 Apache 之外,还提供可选的 nginx 1.18 + PHP 8.1 stack(端口 31888): docker compose -f docker-compose.yml -f docker-compose.nginx.yml up -d # 完整的 WP 版本矩阵(端口 31352-31368 上的 5.2 / 5.3 / 6.1 / 6.8): docker compose -f docker-compose.yml -f docker-compose.matrix.yml up -d # 在 stack 启动后植入 CTF flag(用于链式 walkthrough 所必需): bash scripts/plant-flags.sh ``` ## 包含哪些内容 ### 54 个存在漏洞的插件和主题 (CVE 2019 → 2025) | 阶段 | 组件 | 数量 | 文档 | |---|---|---|---| | 初始 | 插件 CVE 2020-2024 | 39 | [`docs/VULNERABILITIES.md`](docs/VULNERABILITIES.md) | | **A** | 插件 CVE 2024-2025 | 15 | [`docs/PHASE_A_GROUND_TRUTH.md`](docs/PHASE_A_GROUND_TRUTH.md) | | **A** | 主题 CVE 2024 | 5 | [`docs/PHASE_A_GROUND_TRUTH.md`](docs/PHASE_A_GROUND_TRUTH.md) | | **B** | 定制教学 mini-plugin | 10 | [`docs/PHASE_B_GROUND_TRUTH.md`](docs/PHASE_B_GROUND_TRUTH.md) | 完整的 ground-truth 表 (slug、版本、CVE id、CVSS、类型、NVD 链接) 位于 上述各阶段的文档中。 ### 10 个定制教学 mini-plugin (阶段 B) 每一个都精确演示了**一种**很难通过现成 CVE 插件来教学的漏洞类别。 通过以下方式激活它们: ``` docker compose exec wp wp plugin activate bazooka-vuln-pack/bz-broken-nonce --allow-root ``` | # | 插件 | 漏洞类别 | CWE | |---|---|---|---| | 1 | `bz-broken-nonce` | 生成了 nonce 但从未验证的 AJAX action | CWE-352 | | 2 | `bz-cap-confusion` | 使用 `is_user_logged_in()` 而不是 `current_user_can()` | CWE-285 | | 3 | `bz-xxe-soap` | 带有 `LIBXML_NOENT \| LIBXML_DTDLOAD` 的 SOAP/XML endpoint | CWE-611 | | 4 | `bz-type-juggling` | `md5($pw) == '0e…'` magic-hash 绕过 | CWE-697 | | 5 | `bz-mass-assignment` | REST POST 接受任意 `role` 字段 | CWE-915 | | 6 | `bz-host-poisoning` | 基于 `$_SERVER['HTTP_HOST']` 构建密码重置 | CWE-20 | | 7 | `bz-crlf-injection` | 来自未经处理的 `$_GET['url']` 的 `Location:` header | CWE-113 / CWE-601 | | 8 | `bz-postmessage-xss` | 管理页面将 `event.data` 传递给 `innerHTML` | CWE-79 | | 9 | `bz-no-clickjacking` | 移除了 `X-Frame-Options` 的管理 action | CWE-1021 | | 10 | `bz-race-coupon` | coupon 读写之间的 TOCTOU (parallel-curl race) | CWE-367 | ### 辅助服务 (阶段 C) 可通过 Docker 网络中的服务名称从 WordPress 容器访问 — 非常适合 SSRF 链练习 (例如 `wp-content/plugins/xxx → http://aws-metadata/latest/meta-data/iam/security-credentials/`)。 | 服务 | 宿主机端口 | 容器 | 配置错误 | |---|---|---|---| | 伪造的 AWS IMDS | 31254 | `aws-metadata` | 始终开启的 metadata 响应 | | Gitea (HTTP / SSH) | 31300 / 31322 | `gitea` | 公开的 `internal/secrets-leak` 仓库,包含伪造的 `.env` | | Elasticsearch 6.8 | 31392 | `elasticsearch` | 无需认证,`/_cat/indices` 可读 | | MinIO API / 控制台 | 31900 / 31901 | `minio` | 默认凭证,公开的 `wp-backups` bucket 包含 `db_dump.sql` | ### 替代 nginx stack (阶段 D) 在端口 **31888** 上由 **nginx 1.18 + PHP 8.1-FPM** 提供相同的 WordPress 文件, 包含 3 个故意设置的漏洞 (alias path traversal, 通过 `.php~` 导致的源码泄露, 冗长的 `Server:` header),以及一套刻意宽松的 `ModSec-lite` 规则集。 ### WordPress 版本矩阵 (阶段 F) | WP | PHP | 端口 | 亮点 | |----|-----|------|-----------| | 5.2 | 7.2 | 31352 | CVE-2019-17671 REST API 用户泄露 | | 5.3 | 7.4 | 31353 | 与主实验室保持一致 (5.3.2 基线) | | 6.1 | 8.0 | 31361 | CVE-2023-2745 目录遍历 | | 6.8 | 8.2 | 31368 | 已加固 — 误报对照箱 | 使用它来跨 WP 版本对扫描器的召回率与精确度进行基准测试。 ### 11 处故意的配置错误 | URL 或端口 | 问题 | |---|---| | `/info.php` | phpinfo() | | `/adminer.php` | Adminer 诱饵 | | `/debug.log` | Stack traces + secrets | | `/wp-config.php.bak` | 备份泄露 | | `/dump.sql` | SQL 转储 | | `/.env` | Env 文件泄露 | | `/.git/{HEAD,config}` | Git 目录泄露 | | `/wp-content/uploads/` | 目录列表 | | `/xmlrpc.php` | 已启用 | | `/wp-json/wp/v2/users` | 用户枚举 | | MySQL :31306, Redis :31379, Memcached :31211 | 无需认证的网络服务 | ## 5 条完整文档化的 CTF kill-chain (阶段 E) 每条链都将实验室中的 **3 个以上漏洞** 组合成一个现实的 端到端攻击,在每一个步骤中都附有可直接复制粘贴的 curl/wpscan/sqlmap 命令、 预期输出、植入的 flag,**以及**防御者视角 (检测与 加固)。 | # | 标题 | Flag | 演练指南 | |---|---|---|---| | 1 | 从 `.git` 泄露到完全 RCE | `FLAG{wpvulnlab-chain1-a1f3c9e2}` | [`docs/CTF/chain-1.md`](docs/CTF/chain-1.md) | | 2 | 子域名接管 → 窃取管理员 cookie | `FLAG{wpvulnlab-chain2-b7d2e8f4}` | [`docs/CTF/chain-2.md`](docs/CTF/chain-2.md) | | 3 | 开放重定向 → OAuth 钓鱼 → REST 接管 | `FLAG{wpvulnlab-chain3-c4a9b1d6}` | [`docs/CTF/chain-3.md`](docs/CTF/chain-3.md) | | 4 | SSRF → AWS IMDS → S3 备份转储 | `FLAG{wpvulnlab-chain4-d8e5f2a3}` | [`docs/CTF/chain-4.md`](docs/CTF/chain-4.md) | | 5 | XML-RPC multicall 暴力破解 → SVG XSS → 后门插件 | `FLAG{wpvulnlab-chain5-e2b6c4f9}` | [`docs/CTF/chain-5.md`](docs/CTF/chain-5.md) | 在 stack 启动后植入 flag: ``` bash scripts/plant-flags.sh ``` ## 在此实验室中对比 WordPress 扫描器 该实验室是专门为给 WordPress 安全工具*打分*而构建的。运行 包含的基准测试: ``` bash scripts/benchmark.sh http://localhost:31338 ./bench-out ``` | 扫描器 | 召回率 | 精确度 | F1 | 时间 | |---|---:|---:|---:|---:| | [**wordpress-bazooka**](https://github.com/ayinedjimi/wordpress-bazooka) **0.94** | 0.98 | **0.96** | 38 秒 | | WPScan (免费数据库) | 0.82 | 0.93 | 0.87 | 71 秒 | | WPScan (付费 API) | 0.98 | 0.98 | 0.98 | 73 秒 | | Nuclei (wordpress tag) | 0.44 | 0.73 | 0.55 | 24 秒 | | Nikto | 0.14 | 0.33 | 0.20 | 110 秒 | 完整方法论:[`docs/BENCHMARK.md`](docs/BENCHMARK.md)。 ## CTF 挑战 (单漏洞,适合初学者) 除了 5 条 v2.0.0 kill-chain 之外,最初的 **15 个渐进式 单漏洞挑战** 记录在 [`docs/CHALLENGES.md`](docs/CHALLENGES.md) 中: 1. (简单) 发现 WP 版本 2. (简单) 枚举用户 3. (简单) 读取泄露的 `.env` 4. (中等) 通过 xmlrpc 暴力破解编辑者账号 5. (中等) 通过 popup-builder 存储型 XSS (CVE-2023-6000) 6. (中等) 通过 wp-statistics 进行基于时间的 SQLi (CVE-2024-2194) 7. (中等) 通过 ultimate-member 进行权限提升 (PE) (CVE-2023-3460) 8. (中等) 通过 royal-elementor-addons 进行文件上传 (CVE-2023-5360) 9. (困难) 链:post-smtp → admin 10. (困难) 链:forminator AFU → RCE → Redis 11. (困难) SAML XXE (CVE-2024-2879) 12. (困难) WooCommerce 认证绕过 (CVE-2023-28121) 13. (困难) 网络配置错误透传 (Redis/Memcached) 14. (地狱) 完整利用链至持久化 admin ## 路线图 - [x] 植入 39 个 CVE 插件 (v1.0) - [x] 11 个配置错误端点 (v1.0) - [x] CI:实验室启动 / 每周 CVE 端点验证 (v1.0) - [x] **v2.0.0** — 新增 15 个 CVE 插件 (2024-2025) - [x] **v2.0.0** — 5 个存在漏洞的主题 - [x] **v2.0.0** — 10 个定制教学 mini-plugin (`bazooka-vuln-pack`) - [x] **v2.0.0** — 辅助服务 compose (Elasticsearch / MinIO / Gitea / 伪造的 IMDS) - [x] **v2.0.0** — nginx 1.18 + PHP 8.1 替代 stack - [x] **v2.0.0** — 5 条已文档化的多步骤 CTF kill-chain - [x] **v2.0.0** — WP 版本矩阵 (5.2 / 5.3 / 6.1 / 6.8) - [ ] v2.1 — 在 141 个漏洞目录上进行 BAZOOKA / WPScan / Nuclei 自动化基准 CI 测试 - [ ] v2.1 — 多站点模式 (子域名) + 每租户 CVE 矩阵 - [ ] v2.1 — 真正的 ModSecurity v3 (定制 Dockerfile) 替代 ModSec-lite - [ ] v2.1 — 可选的可注入式 Wordfence/iThemes 插件场景 欢迎提交 PR — 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 同一作者的相关项目 - **[wordpress-bazooka](https://github.com/ayinedjimi/wordpress-bazooka)** — 在此实验室中进行基准测试的 WordPress 扫描器。它附带单个 89 MB 的便携式 `bazooka.exe`、嵌入式多源 CVE 数据库、Tor 代理以及实时 GUI。 - **[ayinedjimi-consultants.fr](https://ayinedjimi-consultants.fr)** — WordPress 安全指南、加固检查清单、审计。 ## 作者 **Ayi NEDJIMI** · · [ayinedjimi-consultants.fr](https://ayinedjimi-consultants.fr) # 🇫🇷 Version française ## wordpress-vulnerable-lab v2.0.0 — le lab WordPress vulnérable Docker le plus complet du monde ### 用途 - **formation sécurité WordPress** (étudiants, RSSI, pentesters juniors), - **CTF** internes ou compétitions, - **benchmarking de scanners** (BAZOOKA, WPScan, Nuclei, Nikto…), - **reproduction d'attaques réelles** observées en 2023-2025, - **entraînement blue-team** (détection + hardening). ### v2.0.0 新特性 | Phase | Contenu | |-------|---------| | **A** | 15 plugins CVE 2024-2025 + 5 thèmes vulnérables | | **B** | 10 mini-plugins maison didactiques (un par classe de bug : nonce cassé, type-juggling, mass-assignment, host-header poisoning, CRLF, XXE SOAP, race condition coupon…) | | **C** | Services annexes : Elasticsearch / MinIO / Gitea / faux AWS IMDS — pour pratiquer les chaînes SSRF → metadata → S3 dump | | **D** | Stack alternative nginx 1.18 + PHP 8.1-FPM + ModSec-lite avec 3 misconfigs nginx volontaires | | **E** | 5 kill-chains CTF complètement documentées (curl/wpscan/sqlmap copy-paste, sortie attendue, flag, détection blue-team, hardening) | | **F** | Matrice de versions WP : 5.2 / 5.3 / 6.1 / 6.8 en parallèle sur 4 ports | **141 vulnérabilités vérifiables · 5 kill-chains documentées · 4 versions WP · 2 stacks serveur · 8 services annexes** ### 快速开始 ``` git clone https://github.com/ayinedjimi/wordpress-vulnerable-lab.git cd wordpress-vulnerable-lab bash scripts/install.sh ``` Puis : | Service | URL | Identifiants | |---|---|---| | WordPress | http://localhost:31338 | `admin` / `admin` | | phpMyAdmin | http://localhost:31339 | `root` / `root` | | MailHog | http://localhost:31340 | — | | Adminer | http://localhost:31341 | `root` / `root` | Stacks optionnels v2.0.0 : ``` docker compose -f docker-compose.yml -f docker-compose.aux.yml up -d # services annexes docker compose -f docker-compose.yml -f docker-compose.nginx.yml up -d # stack nginx docker compose -f docker-compose.yml -f docker-compose.matrix.yml up -d # matrice WP bash scripts/plant-flags.sh # planter les flags CTF ``` ### 按漏洞类别分类 | Catégorie | Compte | |---|---:| | RCE / upload arbitraire | 11 | | Injection SQL | 11 | | XSS (stored + reflected) | 18 | | Élévation de privilèges / BAC | 14 | | Bypass d'authentification | 9 | | Désérialisation | 2 | | Open Redirect / SSRF | 2 | | XSS / BAC sur thèmes | 5 | | Mini-plugins didactiques | 10 | | IDOR / divulgation d'information | 4 | | Misconfigurations exposées | 11 | | CVE WP core | 12 | | CVE infrastructure (Apache / PHP / nginx) | 14 | | Comptes faibles | 5 | | Services annexes mal configurés | 8 | | **Total** | **141** | ### 相关项目 - **[wordpress-bazooka](https://github.com/ayinedjimi/wordpress-bazooka)** — scanner WP, exe portable Windows 89 MB avec base CVE multi-source embarquée, proxy Tor bundlé, GUI temps réel. - **[ayinedjimi-consultants.fr](https://ayinedjimi-consultants.fr)** — guides de sécurisation WordPress, checklists de hardening, audits sur devis. ### 作者 **Ayi NEDJIMI** — — [ayinedjimi-consultants.fr](https://ayinedjimi-consultants.fr) ⭐ Si ce projet vous a fait gagner du temps, mettez une étoile et suivez [@ayinedjimi](https://github.com/ayinedjimi).
**由 [Ayi NEDJIMI](https://ayinedjimi-consultants.fr) 使用 🔒 构建 — 巴黎**
标签:CISA项目, Docker, Go语言工具, OPA, WordPress, 安全, 安全测试, 安全防御评估, 搜索引擎查询, 攻击性安全, 文件完整性监控, 漏洞复现, 版权保护, 请求拦截, 超时处理, 靶场