¿Cómo probar la vulnerabilidad de carga de imágenes en una aplicación móvil?

2

Estoy administrando una aplicación móvil con muchos usuarios. Los usuarios pueden subir sus propias imágenes .jpg.

No puedo saber en este momento si las entradas de imagen en la aplicación que estoy administrando están saneadas o no, pero sé que un usuario logró cargar una imagen que bloquea la aplicación para quien la vea.

Funciona así:

  1. El usuario carga su archivo .jpg en su perfil

  2. Se almacena en la base de datos

Verifiqué la base de datos y vi que en lugar del nombre del archivo de imagen para el usuario dice simplemente <HTML></HTML>

Al instante me di cuenta de que podría tener un método para combinar archivos HTML / PHP con archivos de imagen y ejecutar código.

Siendo extremadamente estúpido, eliminé el archivo real que cargó sin revisarlo primero.

Ahora, ¿hay alguna manera de lanzar códigos php / mysql simples usando el método de combinación de imágenes para probar la vulnerabilidad por mí mismo? Intenté variaciones con la adición de código html y php en los datos EXIF del encabezado, pero todavía se guardó como una imagen normal en la base de datos. No logré guardar la imagen como < HTML > < / HTML > como lo hizo originalmente el hacker.

Es posible que no pudiera pasar la seguridad y en realidad piratear el servidor, pero es obvio que lanzó un script que resultó en un error y que la aplicación falló.

Me gustaría averiguar qué tipo de método se utilizó aquí. Agradecería cualquier ayuda!

    
pregunta AndyTTT 14.08.2015 - 01:08
fuente

2 respuestas

1

Una de las leyes de seguridad más importantes: Nunca pienses en confiar en el cliente. No hay excepciones.

Si su cliente puede enviar cualquier archivo por usted y tener acceso directo a él más tarde, está solicitando problemas.

Si sus archivos son imágenes, asegúrese de que sean realmente imágenes. La búsqueda de .png en la extensión o Tipo de contenido: imagen / png no es suficiente. Debes usar funciones para detectar realmente una imagen.

Y no debes permitir que los usuarios accedan directamente a los archivos. Obtenga el archivo, colóquelo en una carpeta inaccesible para el servidor web con un nombre generado y use un archivo para enviar la imagen al cliente, usando fpasstrhu () o algo parecido. Si es posible, aplique alguna transformación a la imagen.

No importa si se trata de una aplicación móvil, una aplicación de escritorio, una API o cualquier otra cosa: el servidor es el mismo.

    
respondido por el ThoriumBR 19.04.2016 - 00:01
fuente
0

Si no desinfectó la entrada de su archivo EN TODO, el pirata informático podría simplemente cargar un shell php como c99.php en su servidor. Luego podría acceder al control de shell a través de yourapp.com/uploads/c99.php

Si marcó el tipo de contenido de la solicitud, podría cargar el shell después de cambiar el tipo de contenido de la solicitud a imagen / jpg a través de una herramienta de edición HTTP POST.

Y si comprobó la extensión del archivo, probablemente subió el shell c99.php como c99.jpg y cambió la extensión del archivo a .php a través de una herramienta de edición HTTP POST.

Por cierto, este shell php del que hablé toma el control total de su servidor, lo que conlleva pérdidas de datos y desfiguración.

Busqué en la documentación de php.net sobre la carga segura de archivos, y la forma más segura de sanear los datos de entrada de archivos es usar la extensión finfo.

    
respondido por el Marco Nicolodi 18.08.2015 - 23:23
fuente

Lea otras preguntas en las etiquetas