
Esto 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.4
Este es un exploit de omisión de filtros que resulta en la subida de archivos arbitraria y la 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 omitir 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 pht), o si alguna ha sido omitida, 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. Para este propósito escribí el script inject.php que básicamente probará por fuerza bruta 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 subida de archivos arbitraria 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 inject.php será reescrito pronto para convertirse en una herramienta más general para este tipo de ataque, pero por ahora solo se incluirá como scripts individuales en este tipo de publicación de CVE.
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.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