apollosun オリジナル
実際には、コンポーネントのアップロードであっても、コンポーネント以外のアップロードであっても、この脆弱性は存在します。コードを理解していれば、次のコードをよく読んでください。
ここでは、ASPUPLOAD コンポーネントのアップロードを例として、
次の 3 つの主要な関数を取り上げます。
function killext(byval s1) '不正なファイル接尾辞を削除します。
ディム許可ext
allowedext=".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=ucase(s1)
len(s1)=0の場合
killext=""
それ以外
chk(allowext,s1,",") でない場合
killext=".クソ"
それ以外
killext=s1
終了する場合
終了する場合
end function
function chk(byval s1,byval s2,byval fuhao) '文字列に以下が含まれていることを確認します
ディミ
チェック=偽
a=split(s1,フハオ)
for i = 0 から ubound(a)
トリム(a(i))=トリム(s2)の場合、
チェック=真
のために出る
終了する場合
次
end function
function gname(byval n1) '日付に基づいてディレクトリ名とファイル名を自動的に生成します。パラメータ 1 はディレクトリを生成し、パラメータ 2 はファイル名を生成します (サフィックスなし)
薄暗いt、r
t=今()
ランダム化(タイマー)
r=int((rnd+1-1)*9999)
ケースn1を選択してください
ケース1
gname=年(t)&right("00"&月(t),2)&right("00"&日(t),2)
ケース2
gname=right("00"&時(t),2)&right("00"&分(t),2)&right("00"&秒(t),2)&right("0000"&r,4)
エンドセレクト
end 関数
呼び出しメソッド:
dim oup,ofile,ext,myfile
Set oup = Server.CreateObject("Persits.Upload")
oup.SetMaxSize 10000000、True
call oup.Save() 'これはサーバーのメモリにアップロードされ、実際のファイルは生成されません。
ファイルのセット = oup.files(1)
ext=killext(ofile.ext)
myfile="/" & ganme(1) & "/" & gname(2) & ext
call ofile.saveas(server.mappath(myfile))
追記:
ハッカーが nc を使用して違法なファイルをアップロードした場合、最終的に取得するファイルは
200511051234559103.shit
のような単なる「クソ」ファイル
です。