'Nabend/Moin.
Eure Ausführungen machen schon ziemlich deutlich, daß es sich um eine ernste Sicherheitslücke handelt. Allerdings kommen mir Aussagen wie "gib mir die Adresse und ich übernehm den Server" etwas übereilt vor. Und zwar aus folgenden Gründen:
2.) Ich starte einen HTTP-GET-Request mit den drei heufigsten UploadVer-
zeichnisorten => ?show=/tmp ?show=/tmp/php ?show=../tmp
PHP liefert, per Fehlermeldung schon, das richtige Verzeichnis.
Warum sollte PHP durch die übliche Fehlermeldung "No such file _or_ directory" einen Hinweis auf das verwendete Uploadverzeichnis geben? Dir bleibt also nichts weiter übrig, als in den unter 3.) beschriebenen BruteForce-Ansatz auch das Verzeichnis einzubeziehen. Das vermindert die Chancen, die Datei tatsächlich zu finden, noch weiter.
3.) Habe ich das Uploadverzeichnis so ermittelt kann ich mich mit parallelen
Requests heranmachen per brut force den Namen zu knacken. Dir Wahrschein-
lichkeit, daß mir das gelingt ist sehr gering - geht aber bei durch-
schnittlich 2000 Request pro Minute, die möglich sind, nicht gegen NULL.
Ich weiß zwar gerade nicht aus dem Kopf, ob es eine feste Vorschrift gibt, nach der PHP den Namen der temporären Datei konstruiert (abgesehen davon, daß er eindeutig sein muß), aber bei mir produziert PHP Namen der Form phpXXXX, wobei XXXX aus [0-9a-zA-Z] ist. Selbst wenn der Präfix "php" als bekannt angesehen werden könnte und diesem -- wie bei mir -- lediglich 4 Zeichen folgen, ergibt sich für das BruteForce ein Aufwand, der sich ziemlich deutlich in den Serverlogs niederschlagen dürfte:
62 mögliche Zeichen für jede der 4 Stellen macht etwas mehr als 14.7 Mio. Kombinationen. Bei angenommenen 2000 Anfragen pro Minute kommt man auf eine Laufzeit des BruteForcers von reichlichen 5 Tagen. Das sollte doch reichen, um einen Serverdauerbeschuß festzustellen. Auch wenn die durchschnittliche Laufzeit bis zum Finden des Namens kürzer ist... Dazu müßtest du aber tatsächlich schon im richtigen Verzeichnis suchen (siehe Anmerkung zu Punkt 2).
Verlangsame ich den Request zu erstens nach erfolgtem erstem Scriptup-load bis auf max_input_time, ist die Wahrscheinlichkeit sehr groß Code ausführen zu können.
Vielleicht liegt es an der fortgeschrittenen Stunde. Aber diesen Satz hab ich leider nicht verstanden... Der war etwas zu konfus. Kannst du bitte nochmal erklären, was du meinst?