Formation en trois niveaux sur PHP2Shell (CVE-2026-109618/109619)
| docs | ||
| levels | ||
| platform | ||
| scripts | ||
| .gitignore | ||
| LICENSE | ||
| Makefile | ||
| NOTICE.md | ||
| README.md | ||
php2shell-training
Parcours de formation en trois niveaux sur PHP2Shell :
- CVE-2026-109618 / GHSA-w8hw-w9fx-j79w — RCE par corruption d'état lors d'un OOM.
- CVE-2026-109619 / GHSA-6wmf-4rv5-p3rp — RCE par état global obsolète entre deux requêtes.
Laboratoire uniquement. Les scripts d'exploitation sont prévus pour des conteneurs isolés, sur
127.0.0.1. Ne jamais les pointer vers un système tiers. La commande exécutée par défaut estid>/w/p1: elle écrit une preuve bénigne dans le document root du conteneur. Aucune persistance, aucun accès réseau sortant, aucune action destructive.
Niveaux
| Niveau | Objectif | Matériel |
|---|---|---|
| 1 — Audit | Comprendre la surface, inventorier, distinguer vulnérable/corrigé. | Lab 8.2.34 / 8.2.35, php2shell-patchkit. |
| 2 — Correctif | Appliquer une mise à jour et le backport officiel 8.1, vérifier. | Patch 8.1, scripts de build/vérification. |
| 3 — Exploitation contrôlée | Reproduire l'impact sur 8.4.26, constater l'échec sur 8.4.27. | Lab 8.4.26 / 8.4.27, PoC contrôlé. |
Plateforme web
Une interface locale permet de piloter les trois niveaux, de suivre la progression et de lancer les vérifications depuis le navigateur :
cd platform
./manage.sh start # démarrage en arrière-plan
./manage.sh status
Ouvrir http://127.0.0.1:8080. Le mot de passe formateur est généré au premier
démarrage dans platform/instance/admin-password.txt.
Détail : platform/README.md.
Démarrage rapide en ligne de commande
# Niveau 1
cd levels/01-audit/lab && ./run.sh up && ./check.sh
# Niveau 2
cd levels/02-patch && ./scripts/verify-82.sh
sudo ./scripts/build-81-backport.sh /tmp/php81-backport
./scripts/verify-81.sh
# Niveau 3
cd levels/03-exploit/lab && ./run.sh up
cd .. && ./scripts/check-vuln.sh && ./scripts/check-fixed.sh
Prérequis
- Docker + Docker Compose.
- Python 3.9+ (stdlib uniquement).
curl,sha256sum.- Pour le niveau 2 : chaîne de compilation PHP,
autoconf,bison,re2c, en-têteslibxml2,sqlite3,openssl,curl,oniguruma,zip,gd. - Optionnel : le dépôt
php2shell-patchkitpour l'audit.
Ce que le parcours montre
- La faille est dans le moteur PHP, pas dans l'application : un simple endpoint suffit.
- Le chemin
session.upload_progresss'exécute avant le script, pendant le parsing multipart. - Un OOM au mauvais moment laisse un état invalide ; le worker suivant peut le consommer.
- La correction 8.2.35+ remplace le
longjmp()OOM et durcit le décodage de session ; la 8.4.27 fait échouer le PoC. - La branche 8.1 est EOL : seul un backport minimal est publié.
Documentation
Sécurité et éthique
- Les laboratoires écoutent sur
127.0.0.1uniquement. - Les images sont jetables ;
scripts/reset.shsupprime les conteneurs et volumes du niveau 3. - Les PoC sont fournis pour apprendre à corriger, pas pour attaquer.
- Voir
NOTICE.mdpour les attributions et licences.