
Questo è un exploit di bypass del filtro che porta al caricamento arbitrario di file e all'esecuzione di codice remoto in class.upload.php <= 2.0.4
Questo è un exploit di bypass del filtro che consente il caricamento arbitrario di file e l'esecuzione remota di codice. Lo script class.upload.php filtra "file e contenuti pericolosi" e li rinomina con estensione .txt. Esegue anche diversi tipi di trasformazione sull'immagine caricata, che normalmente distruggerebbero qualsiasi payload iniettato, anche se il filtro delle estensioni dei file potesse essere bypassato.
Il filtro delle estensioni dei file è una blacklist, quindi ogni volta che viene introdotta una nuova estensione (in questo caso pht), o se ne è stata dimenticata una, è possibile caricare un file PHP. Il contenuto deve comunque essere un'immagine valida e passerà attraverso le funzioni imagecreatefromjpeg e simili. A questo scopo ho scritto lo script inject.php che essenzialmente forza bruta attraverso diverse immagini fino a trovarne una in cui il payload non viene distrutto dal processo eseguito da class.upload.php. Questo ci dà effettivamente un caricamento arbitrario di file e un'esecuzione di codice molto furtiva, poiché rimane un'immagine valida e viene visualizzata come tale nelle pagine in cui viene caricata.
Lo script inject.php sarà presto riscritto per diventare uno strumento più generale per questo tipo di attacco, ma per ora sarà incluso come script individuale in questo tipo di rilascio CVE.
Lo script upload.php è il codice di esempio dal github di verot.net. Ho pensato che fosse meglio dimostrare questa vulnerabilità utilizzando il loro stesso codice di esempio.
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