围绕 PHP2Shell——2026 年 PHP 引擎级内存破坏漏洞族(CVE-2026-109618 / CVE-2026-109619,CVSS 9.8/9.2,PHP 8.4.27 修复)——构建的黑盒 CTF 靶机。漏洞在引擎,不在应用:小巧的 PHP 应用层刻意做到零注入。你需要指纹识别运行时、关联漏洞通告,然后选择正确的弹道。 卡住了?黑盒题面见 CHALLENGE.md,完整题解见 SOLUTION.md。
前提: 只需 Docker Engine(Windows/macOS 用 Docker Desktop)+ Compose v2——宿主机不需要 PHP 工具链。支持 Windows 10/11(WSL2)、Linux、macOS;你的 CPU 能打哪条利用链见下方平台说明。
git clone https://github.com/tani2shell/php2shell-lab.git
cd php2shell-lab
docker compose up -d --build # 首次构建会拉取钉版的 base 镜像打开 http://localhost:18901,用用户 demo(密码 change-me-demo)登录即可进入应用。从这里开始就是黑盒:剩下的自己搞定。
想自定义 flag 值和账号密码?编辑 private.ini 后执行:
docker compose build \
--build-arg FLAG_LOCAL=flag{...} \
--build-arg FLAG_PROOF=flag{...}日常运维:
./RESET.sh # 一键完全重置(重新打开泄露窗口)
./teardown.sh # 停机释放资源
docker compose logs -f # 看日志Flag 采用 OverTheWire 风格:
| flag | 路径 | 可读权限 |
|---|---|---|
local.txt |
/var/www/local.txt |
www-data |
proof.txt |
/root/proof.txt |
仅 root |
- 引擎级,不是应用级。 没有 SQLi,没有上传绕过谜题。靶机运行在 PHP2Shell 影响范围内的 PHP 版本上,其余全凭你自己。
- 设计上可泄露,但只在开机首打。 关键的堆泄露原语有一个开机后的窄生存窗口——同类靶机大多把门永远敞开,这台会关上(故意的)。按正路打:先抢泄露、后做侦察——窗口里用来闲逛的时间,到下次
up之前都不会回来。 - 通往
proof.txt的两条提权路径,优雅程度不同。至少一条经过实弹验证;只有一条能扩展到真实机群。 - 实弹标定。 全链通关已由本地 LLM agent 多轮攻防实测验证(逐轮对战记录见 SOLUTION.md)。完整标定记录:DIFFICULTY.md。
PHP2Shell 公开的 RCE 落点利用假定 x86_64 内核堆布局。在 Apple Silicon(以及 Windows-on-ARM 等 aarch64 主机)上,泄露原语可以命中,但 RCE 落点无法复现——我们在 amd64 转译、arm64 原生以及漏洞通告作者的参考配置(calif.io/php2shell,x86_64 Linux)下都验证过这一点。在 ARM 主机上,预期解是泄露链,不是 RCE 链——泄露链在包括 x86_64 在内的所有环境都能打。详见 docs/PLATFORM-MATRIX.md。
- 2 CPU / 1 GB 内存上限——与其他靶机并跑安全。
- 未烧录任何真实环境机密;全部凭证为假值。
完整击杀链、偏移量、逐轮攻击记录:SOLUTION.md。
MIT——可修改、可 fork、可用于培训(欢迎署名)。