ASPアップロードされた脆弱性、つまり、いくつかのTrojanファイル(画像ファイルの接尾辞に変更された)とアップロードを変更することがよくあります。
次の機能を使用して、この状況を特定します。
<%
'******************************************* ******************************************** ******************************************** ******************************************** ******************************************** ************、********************
'CheckFileType関数は、ファイルが画像ファイルであるかどうかを確認するために使用されます
'パラメーターファイル名はローカルファイルのパスです
'ファイルjpeg、gif、bmp、png picturesの場合、関数はtrueを返します。
'******************************************* ******************************************** ******************************************** ******************************************** ******************************************** ************、********************
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)
関数checkfiletype(filename)
エラーの再開時に次に再開します
checkfiletype = false
dim fstream、fileext、stamp、i
filext = mid(filename、instrrev(filename、。)+1)
fstream = server.createObject(adodb.stream)を設定します
fstream.open
fstream.type = adtypebinary
fstream.loadfromfile filename
fstream.position = 0
ケースFileExtを選択します
ケースJPG、JPEG
スタンプ= fstream.read(2)
i = 0〜1の場合
ASCB(MIDB(スタンプ、I+1,1))= jpg(i)の場合、checkfiletype = true else checkfiletype = false
次
ケースGIF
スタンプ= fstream.read(6)
i = 0〜5の場合
ASCB(MIDB(スタンプ、I+1,1))= GIF(i)checkfileType = true else checkfiletype = false
次
ケースPNG
スタンプ= fstream.read(4)
i = 0〜3の場合
ASCB(MIDB(スタンプ、I+1,1))= PNG(i)CheckFileType = true else checkfiletype = false
次
ケースBMP
スタンプ= fstream.read(2)
i = 0〜1の場合
ASCB(MIDB(スタンプ、I+1,1))= BMP(i)の場合、CheckFileType = true else checkfiletype = false
次
[選択]を終了します
fstream.close
fseteam = Nothingを設定します
err.number <> 0の場合、checkfiletype = false
エンド関数
%>
その後、申請するとき
checkfiletype(server.mappath(cnbruce.jpg))
または
checkfiletype(f:/web/164/images/cnbruce.jpg))
とにかく、ローカルの物理アドレスを検証し、真または偽の値を返すのは画像ファイルタイプです
したがって、この状況は画像のアップロードに適用されます
file.saveas server.mappath(filename) 'ファイルを保存します
CheckFileType(server.mappath(filename))でない場合
Response.Writeエラー画像形式
fso = createObject(scripting.filesystemObject)をset
ficn = fso.getfile(server.mappath(filename))をset
ficn.delete
ficn = Nothingを設定します
FSO =何も設定しません
Response.End
ifを終了します
ファイルは最初にアップロードされ、すぐにカスタム関数を使用してファイルイメージタイプの吻合を決定し、FSOはファイルを削除します。
ASPアップロード脆弱性は、手と足の操作に/0にFilepathを使用します
この状況には、次の機能を使用できます。
function trueStre(filetrue)
str_len = len(filetrue)
pos = strunt(filetrue、chr(0))
pos = 0またはpos = str_lenの場合
trueStr = true
それ以外
trueStr = false
ifを終了します
エンド関数
次に、ファイルを判断してからアップロードできます
trueSter(filename)= falseの場合
respons.write違法ファイル
Response.End
ifを終了します
file.saveas server.mappath(filename)
%>