De hecho, ya sea que se trate de una carga de componentes o no de componentes, existe esta vulnerabilidad. Lea atentamente el siguiente código, siempre que comprenda el código.
Aquí tomamos la carga del componente ASPUPLOAD como ejemplo.
Las siguientes 3 funciones clave:
function killext(byval s1) 'Elimina sufijos de archivos ilegales
texto permitido tenue
permitirtext=.JPG,.JPEG,.GIF,.BMP,.PNG,.SWF,.RM,.MP3,.WAV,.MID,.MIDI,.RA,.
AVI,.MPG,.MPEG,.ASF,.ASX,.WMA,.MOV,.RAR,.ZIP,.EXE,.DOC,.XLS,.CHM,.HLP,.PDF
s1=caso(s1)
si len(s1)=0 entonces
matartexto=
demás
si no chk(allowext,s1,,) entonces
killtext=.mierda
demás
matartexto=s1
terminar si
terminar si
función final
function chk(byval s1,byval s2,byval fuhao) 'Comprueba que la cadena contiene
dimi,a
chk=falso
a=dividir(s1,fuhao)
para i = 0 a ulimitado(a)
si recortar(a(i))=recortar(s2) entonces
chk=verdadero
salida para
terminar si
próximo
función final
function gname(byval n1) 'Genera automáticamente nombres de directorios y archivos según la fecha, el parámetro 1 genera el directorio, el parámetro 2 genera el nombre del archivo (sin sufijo)
tenue t, r
t=ahora()
aleatorizar (temporizador)
r=int((rnd+1-1)*9999)
seleccione el caso n1
caso 1
nombre=año(t)&derecha(00&mes(t),2)&derecha(00&día(t),2)
caso 2
gname=derecha(00&hora(t),2)&derecha(00&minuto(t),2)&derecha(00&segundo(t),2)&derecha(0000&r,4)
finalizar seleccionar
función final
Método de llamada:
dim oup,ofile,ext,miarchivo
Configurar = Server.CreateObject(Persits.Upload)
oup.SetMaxSize 10000000, verdadero
call oup.Save() 'Esto se carga en la memoria del servidor y no se genera ningún archivo real.
conjunto de archivos = oup.files(1)
text=killext(ofile.ext)
miarchivo=/ & ganme(1) & / & gname(2) & ext
llamar a ofile.saveas(servidor.mappath(miarchivo))
Notas adicionales:
Si un hacker usa nc para cargar archivos ilegales, los archivos finales que obtiene son simplemente archivos de mierda como 200511051234559103.shit.