Tengo una pequeña aplicación web. Debido a que es necesario cargar algunos archivos, reviso las extensiones de archivo con una lista blanca (tgz, jpg, png, pdf, zip, rar, txt, gif, py, c, rb). Además de eso, tengo el hash de los nombres de archivo con md5, por ejemplo, cuando el usuario carga el archivo "exploit.php.jpg", se le cambia el nombre a "526a8f9f3497b5a69bc4523ba0c6aacd.jpg".
No hay una verificación de tipo MIME ni una función "getimagesize ()" o de cambio de tamaño, si se trata de una imagen. Debido a eso, es posible cargar un archivo php cuyo nombre acaba de cambiarse a exploit.jpg
Aunque esto parece ser muy arriesgado y el usuario también sabe, donde existe este archivo en mi servidor ( /images/526a8f9f3497b5a69bc4523ba0c6aacd.jpg
), no puedo ejecutar este archivo como .php.
Cuando intento abrir /images/526a8f9f3497b5a69bc4523ba0c6aacd.jpg%00
o /images/526a8f9f3497b5a69bc4523ba0c6aacd.php
, etc., solo obtengo "archivo no encontrado" (.php) o "imagen no se puede mostrar" (jpg, gif).
¿Alguien sabe si y cómo es posible explotar ese archivo?