Wir müssen von der ASP-Upload-Sicherheitslücke gehört haben. Das Prinzip besteht darin, den Suffixnamen einiger Trojanerdateien (in das Suffix der Bilddatei) zu ändern und sie hochzuladen.
Hinweis: CheckFileType kann keine als GIF89a getarnten Dateien ermitteln.
Verwenden Sie die folgende Funktion, um diese Situation zu identifizieren:
<%
'************************************************** * ****************
Mit der Funktion „CheckFileType“ wird überprüft, ob es sich bei der Datei um eine Bilddatei handelt
'Der Parameter Dateiname ist der Pfad der lokalen Datei
„Wenn es sich um eine der Dateien jpeg, gif, bmp, png handelt, gibt die Funktion „true“ zurück, andernfalls gibt sie „false“ zurück
'************************************************** * ****************
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)
Funktion CheckFileType(Dateiname)
Bei Fehler als nächstes fortfahren
CheckFileType=false
Dateiname=LCase(Dateiname)
dim fstream,fileExt,stamp,i
fileExt=mid(filename,InStrRev(filename,.)+1)
set fstream=Server.createobject(ADODB.Stream)
fstream.Öffnen
fstream.Type=adTypeBinary
fstream.LoadFromFile Dateiname
fstream.position=0
Wählen Sie FalldateiExt
Fall jpg,jpeg
stamp=fstream.read(2)
für i=0 bis 1
Wenn ascB(MidB(stamp,i+1,1))=jpg(i) dann CheckFileType=true, sonst CheckFileType=false
nächste
Fall-GIF
stamp=fstream.read(6)
für i=0 bis 5
Wenn ascB(MidB(stamp,i+1,1))=gif(i), dann CheckFileType=true, sonst CheckFileType=false
nächste
Fall png
stamp=fstream.read(4)
für i=0 bis 3
Wenn ascB(MidB(stamp,i+1,1))=png(i), dann CheckFileType=true, sonst CheckFileType=false
nächste
Fall bmp
stamp=fstream.read(2)
für i=0 bis 1
Wenn ascB(MidB(stamp,i+1,1))=bmp(i), dann CheckFileType=true, sonst CheckFileType=false
nächste
Ende auswählen
fstream.Schließen
setze fseteam=nichts
Wenn err.number<>0, dann ist CheckFileType=false
Endfunktion
%>
Dann bei der Bewerbung
CheckFileType(server.mappath(cnbruce.jpg))
oder
CheckFileType(F:/web/164/images/cnbruce.jpg))
Auf jeden Fall dient es dazu, den Bilddateityp der lokalen physischen Adresse zu erkennen und zu überprüfen und einen wahren oder falschen Wert zurückzugeben.
Daher gilt diese Situation für das Hochladen von Bildern. Die aktuelle Methode besteht darin, zunächst das Hochladen der Pseudo-Bilddatei zuzulassen und dann die oben genannte benutzerdefinierte Funktion zu verwenden, um festzustellen, ob die Datei den Bildspezifikationen entspricht Trojanisches Pferd, FSO wird es löschen, wie zum Beispiel:
file.SaveAs Server.mappath(filename) 'Speichern Sie die Datei
Wenn nicht, CheckFileType(Server.mappath(filename)) dann
Antwort. Falsches Bildformat schreiben
Setze fso = CreateObject(Scripting.FileSystemObject)
Setze ficn = fso.GetFile(Server.mappath(filename))
ficn.delete
setficn=nichts
setze fso=nichts
Antwort.Ende
Ende wenn
Die ASP-Upload-Schwachstelle verwendet auch /0, um den Dateipfad zu manipulieren.
http://www.vevb.com/blog/showlog.asp?cat_id=32&log_id=635
Für diese Situation können Sie die folgende Funktion verwenden
Funktion TrueStr(fileTrue)
str_len=len(fileTrue)
pos=Instr(fileTrue,chr(0))
wenn pos=0 oder pos=str_len dann
TrueStr=true
anders
TrueStr=false
Ende wenn
Endfunktion
Dann können Sie vor dem Hochladen der Datei ein Urteil fällen.
wenn TrueStr(filename)=false dann
Antwort. Ungültige Datei schreiben
Antwort.Ende
Ende wenn
file.SaveAs Server.mappath(Dateiname)