Uma vulnerabilidade de upload ASP comumente ouvida é fazer upload de alguns arquivos Trojan alterando seus nomes de sufixos (para sufixos de arquivos de imagem).
Use a seguinte função para identificar esta situação:
<%
'********************************************** ****************
'A função CheckFileType é usada para verificar se o arquivo é um arquivo de imagem
'O parâmetro filename é o caminho do arquivo local
'Se for um dos arquivos jpeg, gif, bmp, png, a função retorna verdadeiro, caso contrário retorna falso
'********************************************** ****************
const adTypeBinary=1
dim jpg(1):jpg(0)=CByte(&HFF):jpg(1)=CByte(&HD8)
dim bmp(1):bmp(0)=CByte(&H42):bmp(1)=CByte(&H4D)
dim png(3):png(0)=CByte(&H89):png(1)=CByte(&H50):png(2)=CByte(&H4E):png(3)=CByte(&H47)
dim gif(5):gif(0)=CByte(&H47):gif(1)=CByte(&H49):gif(2)=CByte(&H46):gif(3)=CByte(&H39):gif(4) =CByte(&H38):gif(5)=CByte(&H61)
função CheckFileType(nome do arquivo)
em caso de erro, retome a seguir
CheckFileType=falso
dim fstream,fileExt,stamp,i
fileExt=mid(nome do arquivo,InStrRev(nome do arquivo,.)+1)
definir fstream=Server.createobject(ADODB.Stream)
fstream.Open
fstream.Type=adTypeBinary
nome do arquivo fstream.LoadFromFile
fstream.posição=0
selecione arquivo de casoExt
caso jpg, jpeg
carimbo=fstream.read(2)
para eu = 0 a 1
se ascB(MidB(stamp,i+1,1))=jpg(i) então CheckFileType=true senão CheckFileType=false
próximo
caso
carimbo=fstream.read(6)
para i = 0 a 5
se ascB(MidB(stamp,i+1,1))=gif(i) então CheckFileType=true senão CheckFileType=false
próximo
caso png
carimbo=fstream.read(4)
para i = 0 a 3
se ascB(MidB(stamp,i+1,1))=png(i) então CheckFileType=true senão CheckFileType=false
próximo
caso bmp
carimbo=fstream.read(2)
para eu = 0 a 1
se ascB(MidB(stamp,i+1,1))=bmp(i) então CheckFileType=true senão CheckFileType=false
próximo
final selecionar
fstream.Fechar
definir fseteam = nada
se err.number<>0 então CheckFileType=false
função final
%>
Então, ao aplicar
CheckFileType(servidor.mappath(cnbruce.jpg))
ou
CheckFileType(F:/web/164/images/cnbruce.jpg))
De qualquer forma, serve para detectar e verificar o tipo de arquivo de imagem do endereço físico local e retornar um valor verdadeiro ou falso.
Portanto, esta situação se aplica ao upload de imagens. O método atual é primeiro permitir o upload do arquivo de pseudo-imagem e, em seguida, usar a função personalizada acima para determinar se o arquivo atende às especificações de imagem. Cavalo de Tróia, o FSO irá excluí-lo, como:
file.SaveAs Server.mappath(nome do arquivo) 'Salve o arquivo
Se não for CheckFileType(Server.mappath(filename)) então
response.write formato de imagem errado
Definir fso = CreateObject(Scripting.FileSystemObject)
Definir ficn = fso.GetFile(Server.mappath(nome do arquivo))
ficn.delete
setficn = nada
definir fso = nada
resposta.fim
terminar se
O arquivo é carregado primeiro e, em seguida, uma função personalizada é usada imediatamente para determinar a consistência do tipo de imagem do arquivo e o FSO exclui o arquivo.
A vulnerabilidade de upload ASP também usa /0 para manipular o caminho do arquivo.
Para esta situação, a seguinte função pode ser utilizada:
função TrueStr(arquivoVerdadeiro)
str_len=len(arquivoVerdadeiro)
pos=Instr(arquivoTrue,chr(0))
se pos=0 ou pos=str_len então
TrueStr = verdadeiro
outro
TrueStr=falso
terminar se
função final
Então você pode fazer um julgamento antes de enviar o arquivo.
se TrueStr(nome do arquivo)=falso então
arquivo ilegal response.write
resposta.fim
terminar se
arquivo.SaveAs Server.mappath (nome do arquivo)
%>