¿Es la concatenación de cadenas vulnerable al carácter nulo en aspx?

1

Acabo de ver esta línea de código en VB en un archivo .aspx

FileUpload.SaveAs(sPath & "/" & FileUpload.FileName)

Esta línea guarda un archivo que un usuario ha cargado. Utiliza el método SaveAs . Estaba preocupado por la sPath porque el usuario puede editarla.

El usuario solo puede guardar la imagen, por lo que verifica la extensión del nombre del archivo. Pensé que alguien puede usar un carácter nulo para guardar otro archivo, como:

/path/evil.aspx0x00/image.jpg

Afortunadamente, esto no funciona. ¿Pero hay otra forma de manipular? ¿Alguien puede enviar otra forma de carácter nulo?

- Editar

Hasta donde sé, enumero este tipo de caracteres nulos

  • 0x00
  • %00
  • /0
  • /x0
  • �
  • �

¿Hay más?

--Editar 2

Lol, esta lista proporciona más tipos de caracteres nulos

    
pregunta Rodrigo 10.12.2014 - 03:32
fuente

2 respuestas

1

En un mecanismo de carga de archivos, siempre se deben considerar algunas cosas como verificadas, en mi opinión, la comprobación básica de las extensiones de archivos no es suficiente.

  1. Comprobación del encabezado del archivo: lea los primeros bytes del archivo y determine si es una imagen o no.
  2. Convertir la imagen: si el paso 1 es exitoso, convierta la imagen a un formato diferente al formato cargado. Esto es para eliminar posibles códigos maliciosos en las imágenes.

En cuanto a su pregunta con respecto a la inyección de nullbyte: además de 0x00,% 00 también se puede usar en nombres de archivos, por ejemplo:

/path/evil.aspx%00.jpg

Dudo que esto funcione en ASPX pero depende de su configuración.

    
respondido por el Jeroen - IT Nerdbox 10.12.2014 - 06:34
fuente
1

FileUpload.FileName es totalmente especificado por el usuario. Puede contener "/../" y otras secuencias de escape de ruta similares, por lo que no puede confiar en él.

Si está guardando el archivo en el disco, lo mejor sería ignorar el nombre de archivo provisto por el usuario y crear su propio nombre de archivo seguro garantizado. Por ejemplo, podría generar un nuevo GUID para lograr esto. Si absolutamente debe usar el nombre de archivo provisto por el usuario, considere restringirlo solo a {caracteres alfanuméricos, guiones, guiones bajos, puntos} y haga que el nombre de archivo comience y termine con un carácter alfanumérico.

    
respondido por el Levi 15.12.2014 - 08:27
fuente

Lea otras preguntas en las etiquetas