
Dies ist ein Filter-Bypass-Exploit, der zu beliebigem Datei-Upload und Remote-Code-Ausführung in class.upload.php <= 2.0.4 führt.
Dies ist ein Exploit zur Umgehung des Filters, der einen beliebigen Datei-Upload und Remote-Codeausführung ermöglicht. Das Skript class.upload.php filtert „gefährliche Dateien und Inhalte“ und benennt sie mit der Dateiendung txt um. Außerdem führt es verschiedene Transformationen am hochgeladenen Bild durch, die normalerweise jede injizierte Nutzlast zerstören würden, selbst wenn der Dateiendungsfilter umgangen werden könnte.
Der Dateiendungsfilter ist eine Blacklist. Sobald also eine neue Endung eingeführt wird (in diesem Fall pht) oder eine übersehen wurde, kann eine PHP-Datei hochgeladen werden. Der Inhalt muss jedoch weiterhin ein gültiges Bild sein und durchläuft weiterhin die Funktionen imagecreatefromjpeg und ähnliche. Zu diesem Zweck habe ich das Skript inject.php geschrieben, das im Wesentlichen verschiedene Bilder per Brute-Force durchprobiert, bis es eines findet, bei dem die Nutzlast durch den in class.upload.php durchgeführten Prozess nicht zerstört wird. Das verschafft uns effektiv einen beliebigen Datei-Upload und eine sehr heimliche Codeausführung, da es sich weiterhin um ein gültiges Bild handelt und auf Seiten, auf denen es hochgeladen wurde, auch wie ein solches angezeigt wird.
Das Skript inject.php wird bald zu einem allgemeineren Werkzeug für diese Art von Angriff umgeschrieben, aber vorerst wird es in dieser Art von CVE-Veröffentlichung nur als einzelne Skripte enthalten sein.
Das Skript upload.php ist der Beispielcode aus dem GitHub von verot.net. Ich dachte, es wäre am besten, diese Schwachstelle mit ihrem eigenen Beispielcode zu demonstrieren.
user@ayu:/var/www/html# php inject.php
-=Imagejpeg injector 1.8=-
[+] Fetching image (100 X 100) from http://lorempixel.com/100/100/
[+] Jumping to end byte
[+] Searching for valid injection point
[!] Temp solution, if you get a 'recoverable parse error' here, it means it probably failed
[+] It seems like it worked!
[+] Result file: image.jpg.pht
user@ayu:/var/www/html# curl -v -o - http://localhost/images/image_resized.phar?c=uname%20-a | grep -aPo "(Linux.*GNU)"
Linux ayu 5.0.0-36-generic #39-Ubuntu SMP Tue Nov 12 09:46:06 UTC 2019 x86_64 x86_64 x86_64 GNU