
Laboratório de pentest black-box para a família de corrupção de memória do motor PHP2Shell (CVE-2026-109618 / CVE-2026-109619, CVSS 9.8/9.2). Cadeia de ataque verificada por dupla flag, calibrada por agente. EN/JP/ZH.
Um alvo de captura-de-bandeira (CTF) de caixa-preta construído em torno do PHP2Shell — a família de corrupção de memória do motor PHP de 2026 (CVE-2026-109618 / CVE-2026-109619, CVSS 9.8/9.2, corrigida no PHP 8.4.27). A vulnerabilidade está no motor, não na aplicação: a pequena camada de aplicação PHP está intencionalmente limpa de injeções. Você deve identificar a versão do runtime, correlacionar com o advisory e escolher a balística correta. Travado? Passo a passo completo em docs/SOLUTION.md.
Pré-requisitos: Docker Engine (ou Docker Desktop no Windows/macOS) com Compose v2 — só isso. Nenhum toolchain PHP é necessário no host. Funciona no Windows 10/11 (WSL2), Linux e macOS; veja a nota de plataforma abaixo para saber qual cadeia de exploit sua CPU suporta.
git clone https://github.com/taniungou/php2shell-lab.git
cd php2shell-lab
docker compose up -d --build # o primeiro build baixa a imagem base fixada
Abra http://localhost:18901 e entre como usuário demo
(senha change-me-demo) para acessar a aplicação. A partir daqui a caixa é
caixa-preta: descubra o resto.
Quer seus próprios valores de flag e senhas de conta? Edite private.ini, depois:
docker compose build \
--build-arg FLAG_LOCAL=flag{...} \
--build-arg FLAG_PROOF=flag{...}
Manutenção:
docker compose logs -f # acompanhar o alvo
docker compose down -v && docker compose up -d --build # reset completo (rearma a janela de vazamento)
docker compose down # parar e liberar recursos
As flags seguem o estilo OverTheWire:
| flag | caminho | legível por |
|---|---|---|
local.txt | /var/www/local.txt | www-data |
proof.txt | /root/proof.txt | apenas root |
up.proof.txt com graus de elegância diferentes. Pelo
menos um é verificado em fogo real; apenas um escala para uma frota real.Os exploits públicos de aterrissagem de RCE para o PHP2Shell assumem um layout de heap de kernel x86_64. Em Apple Silicon (e outros hosts aarch64, como Windows-on-ARM) as primitivas de vazamento funcionam, mas a aterrissagem de RCE não — verificamos isto em amd64 sob emulação, arm64 nativo e na configuração de referência dos autores do advisory (calif.io/php2shell, Linux x86_64). Em hosts ARM a solução pretendida é a cadeia de divulgação, não a cadeia de RCE — ela funciona em todos os lugares, incluindo x86_64. Detalhes: docs/PLATFORM-MATRIX.md.
Cadeia de ataque completa, offsets e transcrições de ataque por rodada: docs/SOLUTION.md — protegido contra spoilers por esta seção estar no final, prometo.
MIT — construa sobre ela, faça fork, use em treinamentos (atribuição apreciada).