Dateiname mit PHP-Code
Der Upload enthält einen Dateinamen wie <?php system($_GET['cmd']); ?>.
php2shell ist eine kritische, nicht authentifizierte RCE in PHP.
Die Demo zeigt die öffentlich dokumentierte Chain A:
Dateiname → session.upload_progress → LFI → Codeausführung.
Sie ist eine kontrollierte Lab-Simulation, kein Angriff auf fremde Systeme.
id-Payload.
Klicke auf einen Schritt oder starte die Animation. Die Demo nutzt ein absichtlich verwundbares Lab mit LFI.
Der Upload enthält einen Dateinamen wie <?php system($_GET['cmd']); ?>.
session.upload_progress legt den Dateinamen ungefiltert in der Session-Datei ab.
Ein LFI wie include($_GET['page']) lädt die Datei aus /tmp/sessions/.
Der Payload läuft als Web-User — im Lab als www-data, nicht als root.
Die Simulation zeigt die Requests und das Ergebnis. Der Schalter wechselt zwischen PHP 8.3.35 und 8.3.36.
Ein LFI, die Upload-Progress-Konfiguration und ein Multipart-Request. Keine Zauberei — genau das macht es so gefährlich.
<?php
// Absichtlich verwundbares Lab — nur lokal!
if (isset($_GET['page'])) {
include($_GET['page']);
} else {
echo "php2shell lab";
}
Alle SAPIs sind betroffen; mod_php gilt laut Advisory als besonders exponiert, weil der Trigger vor Anwendungscode greift.
| Branch | Verwundbar | Fix | Status |
|---|---|---|---|
| PHP 8.5 | < 8.5.12 | 8.5.12 | Fix verfügbar |
| PHP 8.4 | < 8.4.27 | 8.4.27 | Fix verfügbar |
| PHP 8.3 | < 8.3.36 | 8.3.36 | Fix verfügbar |
| PHP 8.2 | < 8.2.35 | 8.2.35 | Fix verfügbar |
| PHP ≤ 8.1 | EOL | Upgrade | Nicht mehr supported |
Patch zuerst. Die anderen Maßnahmen sind Defense in Depth, kein Ersatz für das Update.
Auf 8.2.35, 8.3.36, 8.4.27 oder 8.5.12+ aktualisieren. Danach Apache/PHP-FPM neu starten.
session.upload_progress.enabled = Off reduziert die Chain-A-Angriffsfläche — ersetzt aber nicht den Patch.
Keine dynamischen Includes. Whitelist erlaubter Dateien, Pfade kanonisieren, .. und Stream-Wrapper blocken.
session.use_strict_mode=1, use_only_cookies=1, HttpOnly/Secure/SameSite, kurze Lifetime.
Auf ungewöhnliche Multipart-Filenames, PHPSESSID im Body und Includes aus /tmp/ achten. WAF-Regeln ergänzen.
PHP-User nur auf seine Verzeichnisse zugreifen lassen. Kein Root, keine unnötigen Schreibrechte, ausgehende Verbindungen einschränken.
include/require-Stellen mit Benutzereingaben prüfen.