
Este es un exploit de bypass de filtros que resulta en la subida arbitraria de archivos y ejecución remota de código en class.upload.php <= 2.0.3
Se trata de un exploit que elude el filtro, resultando en una carga arbitraria de archivos y ejecución remota de código. El script class.upload.php filtra "archivos y contenido peligrosos" y los renombra a la extensión de archivo txt. También realiza diferentes tipos de transformación en la imagen subida, lo que normalmente destruiría cualquier carga útil inyectada, incluso si se pudiera eludir el filtro de extensión de archivo.
El filtro de extensión de archivo es una lista negra, por lo que cada vez que se introduce una nueva extensión (en este caso phar), o se omite alguna, se puede subir un archivo PHP. Sin embargo, el contenido debe seguir siendo una imagen válida y pasará por las funciones imagecreatefromjpeg y similares. Con este fin, escribí el script inject.php que esencialmente fuerza bruta a través de diferentes imágenes hasta encontrar una donde la carga útil no sea destruida por el proceso realizado en class.upload.php. Esto nos da efectivamente una carga arbitraria de archivos y una ejecución de código muy sigilosa, ya que sigue siendo una imagen válida y se mostrará como tal en las páginas donde se suba.
El script upload.php es el código de ejemplo del github de verot.net. Pensé que sería mejor demostrar esta vulnerabilidad usando su propio código de ejemplo.
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
Carga arbitraria de archivos que conduce a ejecución remota de código en JoomlaWorks K2 <= 2.10.1 debido a una versión sin parche de class.upload.php
Un usuario normal sube la imagen generada por inject.php, que contiene una carga útil simple. Eludirá el filtro de extensión en class.upload.php y no será destruida por el manejo de imágenes de la biblioteca. Se renderizará como una imagen normal, lo cual es más sutil.
El archivo se subirá y podrá accederse como una puerta trasera y ejecutar comandos.