Formation en trois niveaux sur PHP2Shell (CVE-2026-109618/109619)
Find a file
2026-11-03 00:17:03 +01:00
docs platform: render course supports and harden startup 2026-11-03 00:12:10 +01:00
levels level 3: report PHP version from X-Powered-By header 2026-11-02 21:45:42 +01:00
platform platform: persist LAN binding via instance/platform.env 2026-11-03 00:17:03 +01:00
scripts php2shell-training: three-level lab (audit, patch, controlled exploit) 2026-11-02 21:43:58 +01:00
.gitignore platform: add local web UI for labs, checks and progress 2026-11-03 00:09:50 +01:00
LICENSE php2shell-training: three-level lab (audit, patch, controlled exploit) 2026-11-02 21:43:58 +01:00
Makefile platform: add local web UI for labs, checks and progress 2026-11-03 00:09:50 +01:00
NOTICE.md php2shell-training: three-level lab (audit, patch, controlled exploit) 2026-11-02 21:43:58 +01:00
README.md platform: add local web UI for labs, checks and progress 2026-11-03 00:09:50 +01:00

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 est id>/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êtes libxml2, sqlite3, openssl, curl, oniguruma, zip, gd.
  • Optionnel : le dépôt php2shell-patchkit pour l'audit.

Ce que le parcours montre

  1. La faille est dans le moteur PHP, pas dans l'application : un simple endpoint suffit.
  2. Le chemin session.upload_progress s'exécute avant le script, pendant le parsing multipart.
  3. Un OOM au mauvais moment laisse un état invalide ; le worker suivant peut le consommer.
  4. La correction 8.2.35+ remplace le longjmp() OOM et durcit le décodage de session ; la 8.4.27 fait échouer le PoC.
  5. La branche 8.1 est EOL : seul un backport minimal est publié.

Documentation

Sécurité et éthique

  • Les laboratoires écoutent sur 127.0.0.1 uniquement.
  • Les images sont jetables ; scripts/reset.sh supprime les conteneurs et volumes du niveau 3.
  • Les PoC sont fournis pour apprendre à corriger, pas pour attaquer.
  • Voir NOTICE.md pour les attributions et licences.