Parece que solo estás mirando la extensión del archivo. Esto no es efectivo. Para obtener una descripción del por qué y una lista de protecciones viables, consulte el artículo de OWASP sobre "Carga de archivos sin restricciones" .
Extracto: (Es posible que parte de esto no sea directamente aplicable a su entorno, pero no los estoy editando).
Uso de listas negras para extensiones de archivos
Algunas aplicaciones web todavía usan solo una lista negra de extensiones para
evitar que se cargue un archivo malicioso.
- Es posible omitir esta protección utilizando algunas extensiones que son ejecutables en el servidor pero que no se mencionan en la lista.
(Ejemplo: "file.php5", "file.shtml", "file.asa", o "file.cer")
- A veces es posible pasar por alto esta protección cambiando algunas letras de extensión a la forma de mayúscula (ejemplo: "archivo.aSp" o
"Archivo.PHp3").
- El uso de espacios y / o puntos al final del nombre de archivo a veces puede provocar que se omita la protección. Estos espacios y / o puntos en
El final del nombre de archivo se eliminará cuando el archivo quiera ser
Guardado en el disco duro automáticamente. El nombre del archivo puede ser enviado a la
servidor mediante un proxy local o mediante un script simple (ejemplo:
"Archivo.asp ... .... . .. .. "," file.asp ", o" file.asp. ").
- Un servidor web puede usar la primera extensión después del primer punto (".") en el nombre del archivo o usar un algoritmo de prioridad específico para detectar
extensión de archivo. Por lo tanto, la protección puede ser anulada subiendo un
Archivo con dos extensiones después del caracter punto. El primero es
prohibido, y el segundo está permitido (ejemplo: "file.php.jpg").
- En caso de usar IIS6 (o versiones anteriores), podría ser posible omitir esta protección agregando un punto y coma después de lo prohibido.
extensión y antes de la extensión permitida (ejemplo:
“File.asp; .jpg”).
- En el caso de utilizar IIS6 (o versiones anteriores), podría ser posible omitir esta protección poniendo un archivo ejecutivo como ASP con
Otra extensión en una carpeta que termina con una extensión ejecutiva.
como ".asp" (ejemplo: "folder.asp \ file.txt"). Ademas es
es posible crear un directorio simplemente usando un cargador de archivos y ADS
(Flujo de datos alternativo). En este método, el nombre de archivo debe terminar con
“:: $ Index_Allocation” o “: $ I30: $ Index_Allocation” para crear un
directorio en lugar de un archivo (ejemplo:
“Newfolder.asp :: $ Index_Allocation” crea “newfolder.asp” como nuevo
directorio).
- Esta protección se puede omitir completamente mediante el uso de, por ejemplo, caracteres de control como Null (0x00) después de la extensión prohibida y
antes de la permitida. En este método, durante el proceso de guardado.
Todas las cadenas después del carácter nulo serán descartadas. Poniendo un
El carácter nulo en el nombre de archivo se puede hacer simplemente usando un local
proxy o utilizando un script (ejemplo: "file.asp% 00.jpg"). A pesar de
sería perfecto si el carácter nulo se inserta directamente usando
la opción de vista Hex de un proxy local como Burpsuite o Webscarab en
el lugar correcto (sin usar%).
- También es posible crear un archivo con una extensión prohibida utilizando el flujo de datos alternativos NTFS (ADS). En este caso, un signo ":"
Se insertará después de la extensión prohibida y antes de lo permitido.
uno. Como resultado, un archivo vacío con la extensión prohibida será
creado en el servidor (ejemplo: "archivo.asp: .jpg"). El atacante puede intentar
edite este archivo más tarde para ejecutar sus códigos maliciosos. Sin embargo, un
El archivo vacío no siempre es bueno para un atacante. Por lo tanto, hay una
Método inventado por el autor de este documento en el que un atacante puede
cargue un archivo de shell no vacío utilizando el ADS. En este método, un
El archivo prohibido se puede cargar usando este patrón:
"File.asp :: $ data.".
- En los servidores de Windows, es posible reemplazar los archivos utilizando su nombre corto (8.3). (ejemplo: "web.config" puede ser reemplazado por
subir "web ~ 1.con") A veces la combinación de lo anterior puede llevar a
sin pasar por las protecciones.
Uso de listas blancas para las extensiones de archivos
Muchas aplicaciones web utilizan una lista blanca para aceptar los archivos
extensiones Aunque el uso de la lista blanca es una de las recomendaciones,
no es suficiente por sí solo. Sin tener validación de entrada, hay
Todavía es una oportunidad para que un atacante pase por alto las protecciones.
- Los métodos tercero, cuarto, quinto y sexto de la última sección también se aplican aquí.
- La lista de extensiones permitidas debe revisarse, ya que también puede contener extensiones maliciosas. Por ejemplo, en caso de tener
“.Shtml” en la lista, la aplicación puede ser vulnerable a SSI
ataques.