
Ausführliche technische Erläuterung von PHP2Shell: Verkettung zweier PHP-Core-CVEs – von einem Out-of-Memory-Absturz und Use-after-free über Heap Grooming und ASLR-Leaks bis hin zur Remote-Code-Execution.

Ich habe diese Recherche am 26. Oktober 2026 begonnen und bin mir noch nicht ganz sicher, wann ich sie abschließen werde.
Zum Zeitpunkt des Verfassens gibt es noch sehr wenige Informationen über PHP2Shell, insbesondere was eine detaillierte technische Analyse der Schwachstellen und des Ausnutzungsprozesses betrifft.
Ehrlich gesagt wurde ich es leid, Erklärungen zu finden, die nur an der Oberfläche kratzten, ohne tatsächlich zu zeigen, was intern vor sich ging. Ich wollte etwas anderes machen: eine ordentliche, tiefgehende technische Abhandlung, die den gesamten Prozess untersucht, jedes wichtige Detail beleuchtet und nicht nur erklärt, WAS passiert, sondern WARUM und WIE es passiert.
Diese Recherche basiert auf meinem eigenen Verständnis des PHP-Quellcodes, meinen Experimenten und den Untersuchungen, die ich durchgeführt habe, während ich versucht habe, diese Schwachstellen zu verstehen. Ich wollte all diese Puzzleteile zusammenfügen, meine Erkenntnisse teilen und hoffentlich einige der zugrunde liegenden Konzepte für andere leichter verständlich machen.
Eines meiner Hauptziele war es, dies zugänglich zu machen, ohne die technische Tiefe zu opfern. Ich möchte, dass jemand mit grundlegenden C-Kenntnissen und allgemeiner Programmiererfahrung folgen kann, auch ohne vorherige Erfahrung mit Low-Level-Speicherausnutzung.
Ich hoffe auch, dass diese Recherche dazu beitragen kann, einige Dinge zu klären, die derzeit schlecht erklärt oder missverstanden werden. Ich möchte jedoch transparent sein: Dies ist mein eigenes technisches Verständnis der Schwachstellen, keine offizielle Analyse oder eine unfehlbare Referenz. Ich lerne noch, untersuche und verbinde selbst die Zusammenhänge. Es kann Fehler, Ungenauigkeiten oder Dinge geben, die ich unterwegs missverstanden habe.
Wenn dir etwas Falsches auffällt, du eine andere Interpretation hast oder denkst, dass etwas weiter untersucht werden sollte, zögere bitte nicht, mich zu kontaktieren. Ich würde mich aufrichtig über Korrekturen, Diskussionen und Beiträge freuen, die dazu beitragen könnten, diese Recherche genauer und für alle nützlicher zu machen.
Schließlich geht es beim Teilen all dessen darum, gemeinsam zu lernen und mehr Menschen zu helfen zu verstehen, was tatsächlich unter der Haube passiert.
Kennst du die Grundlagen bereits?? Springe direkt zu dem Teil, der dich interessiert:
Wenn du neu in der Heap-Exploitation bist oder das volle Erlebnis willst, scroll einfach weiter. Ich habe das zum Lesen von Anfang bis Ende geschrieben.
Es gibt ein paar Dinge, die jeder im Hinterkopf behalten sollte, bevor wir loslegen. Sie werden besonders nützlich, während wir durch die Forschung fortschreiten. Wie ich bereits erwähnt habe, möchte ich, dass dieser Walkthrough für alle zugänglich ist, also nehme ich mir die Zeit, auch die grundlegenderen Konzepte zu erklären. Wenn du damit bereits vertraut bist, kannst du gerne vorspringen!
In einem typischen Programm ist der Speicher in verschiedene Bereiche organisiert, darunter der Stack und der Heap.
Zum Beispiel in C++:
int main() {
int a = 30; // Typically stored on the stack
int* b = new int(30); // b is typically on the stack,
// but the integer it points to is on the heap
}
Hier ist a eine lokale Variable, die den Wert 30 enthält. Der Zeiger b ist ebenfalls eine lokale Variable, aber er enthält die Adresse einer Ganzzahl, die auf dem Heap alloziert wurde.
PHP ist hauptsächlich in C geschrieben, daher müssen wir verstehen, wie die Speicherallokation funktioniert.
Das Betriebssystem stellt einem Prozess einen eigenen virtuellen Adressraum zur Verfügung. Der Speicherallokator des Prozesses verwaltet dann Allokationen innerhalb des ihm zur Verfügung stehenden Speichers.
In C++ haben wir beispielsweise new, malloc() und andere Möglichkeiten, Speicher zu allozieren.
Allokatoren versuchen oft, freigegebenen Speicher wiederzuverwenden, anstatt jedes Mal neuen Speicher vom Betriebssystem anzufordern.