
Questo è un exploit di bypass del filtro che consente il caricamento arbitrario di file e l'esecuzione remota di codice in class.upload.php <= 2.0.3
Questo è un exploit di bypass del filtro che comporta il caricamento arbitrario di file e l'esecuzione remota di codice. Lo script class.upload.php filtra i "file e contenuti pericolosi" e li rinomina con l'estensione txt. Inoltre esegue diversi tipi di trasformazione sull'immagine caricata, che normalmente distruggerebbero qualsiasi payload iniettato, anche se il filtro sull'estensione del file potesse essere aggirato.
Il filtro sulle estensioni dei file è una blacklist, quindi ogni volta che viene introdotta una nuova estensione (in questo caso phar), o se qualcuna è stata dimenticata, è possibile caricare un file PHP. Il contenuto deve comunque essere un'immagine valida e passerà ancora attraverso imagecreatefromjpeg e funzioni simili. A questo scopo ho scritto lo script inject.php che sostanzialmente forza bruta diverse immagini fino a trovarne una in cui il payload non venga distrutto dal processo eseguito in class.upload.php. Questo ci dà di fatto un caricamento arbitrario di file e un'esecuzione di codice molto furtiva, poiché si tratta comunque di un'immagine valida che verrà visualizzata come tale nelle pagine in cui viene caricata.
Lo script upload.php è il codice di esempio dal github di verot.net. Ho pensato che fosse meglio dimostrare questa vulnerabilità usando il loro stesso codice di esempio.
user@ayu:/var/www/html# php inject.php
-=Imagejpeg injector 1.7=-
[+] 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.phar
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
Caricamento arbitrario di file che porta all'esecuzione remota di codice in JoomlaWorks K2 <= 2.10.1 a causa di una versione non corretta di class.upload.php
Un utente normale carica l'immagine generata da inject.php, contenente un semplice payload. L'immagine aggirerà il filtro sulle estensioni in class.upload.php e non verrà distrutta dalla gestione delle immagini effettuata dalla libreria. Verrà visualizzata come un'immagine normale, il che è più discreto.
Il file verrà caricato e potrà essere utilizzato come backdoor per eseguire comandi.