Une vulnérabilité de téléchargement ASP couramment entendue consiste à télécharger certains fichiers de chevaux de Troie en modifiant leurs noms de suffixe (en suffixes de fichiers image).
Utilisez la fonction suivante pour identifier cette situation :
<%
'************************************************ * ****************
'La fonction CheckFileType est utilisée pour vérifier si le fichier est un fichier image
'Le nom de fichier du paramètre est le chemin du fichier local
'S'il s'agit d'un des fichiers jpeg, gif, bmp, png, la fonction renvoie vrai, sinon elle renvoie faux
'************************************************ * ****************
const adTypeBinary = 1
faible jpg(1):jpg(0)=CByte(&HFF):jpg(1)=CByte(&HD8)
faible 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) =Coctet(&H38):gif(5)=Coctet(&H61)
fonction CheckFileType (nom de fichier)
en cas d'erreur, reprendre ensuite
CheckFileType = faux
dim fstream, fileExt, timbre, je
fileExt=mid(nom de fichier,InStrRev(nom de fichier,.)+1)
définir fstream=Serveur.createobject(ADODB.Stream)
fstream.Ouvrir
fstream.Type = adTypeBinary
nom de fichier fstream.LoadFromFile
fstream.position=0
sélectionner le dossierExt
cas jpg,jpeg
timbre=fstream.read(2)
pour i=0 à 1
si ascB(MidB(stamp,i+1,1))=jpg(i) alors CheckFileType=true sinon CheckFileType=false
suivant
cas gif
timbre=fstream.read(6)
pour i=0 à 5
si ascB(MidB(stamp,i+1,1))=gif(i) alors CheckFileType=true sinon CheckFileType=false
suivant
cas png
timbre=fstream.read(4)
pour i=0 à 3
si ascB(MidB(stamp,i+1,1))=png(i) alors CheckFileType=true sinon CheckFileType=false
suivant
cas bmp
timbre=fstream.read(2)
pour i=0 à 1
si ascB(MidB(stamp,i+1,1))=bmp(i) alors CheckFileType=true sinon CheckFileType=false
suivant
fin de la sélection
fstream.Fermer
définir fsetam = rien
si err.number<>0 alors CheckFileType=false
fonction de fin
%>
Puis lors de la candidature
CheckFileType(server.mappath(cnbruce.jpg))
ou
CheckFileType(F:/web/164/images/cnbruce.jpg))
Quoi qu'il en soit, il s'agit de détecter et de vérifier le type de fichier image de l'adresse physique locale et de renvoyer une valeur vraie ou fausse.
Par conséquent, cette situation s'applique au téléchargement d'image. La méthode actuelle consiste d'abord à autoriser le téléchargement du fichier pseudo-image, puis à utiliser la fonction personnalisée ci-dessus pour déterminer si le fichier répond aux spécifications de l'image s'il s'agit d'un fichier image déguisé par un. Cheval de Troie, FSO le supprimera, tel que :
file.SaveAs Server.mappath(filename) 'Enregistrez le fichier
Sinon CheckFileType(Server.mappath(filename)) alors
réponse.écrire un mauvais format d'image
Définir fso = CreateObject (Scripting.FileSystemObject)
Définir ficn = fso.GetFile(Server.mappath(filename))
ficn.delete
setficn = rien
définir fso = rien
réponse.end
finir si
Le fichier est d'abord téléchargé, puis une fonction personnalisée est immédiatement utilisée pour déterminer la cohérence du type d'image du fichier, et FSO supprime le fichier.
La vulnérabilité de téléchargement ASP utilise également /0 pour manipuler le chemin du fichier.
Pour cette situation, la fonction suivante peut être utilisée :
fonction TrueStr(fileTrue)
str_len=len(fichierVrai)
pos=Instr(fichierVrai,chr(0))
si pos=0 ou pos=str_len alors
TrueStr=vrai
autre
TrueStr=faux
finir si
fonction de fin
Ensuite, vous pouvez porter un jugement avant de télécharger le fichier.
si TrueStr(filename)=false alors
fichier illégal réponse.write
réponse.end
finir si
fichier.SaveAs Server.mappath(nom de fichier)
%>