実際、コンポーネントのアップロードであっても、コンポーネント以外のアップロードであっても、この脆弱性は存在します。コードを理解していれば理解できます。
ここでは、例として 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の場合
キレックス=
それ以外
chk(allowext,s1,,) でない場合
killext=.shit
それ以外
killext=s1
終了する場合
終了する場合
終了関数
function chk(byval s1,byval s2,byval fuhao) '文字列に以下が含まれていることを確認します
ディミ、
チェック=偽
a=split(s1,フハオ)
for i = 0 から ubound(a)
トリム(a(i))=トリム(s2)の場合、
チェック=真
のために出る
終了する場合
次
終了関数
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)
エンドセレクト
終了関数
呼び出し方法:
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 のようなクソ ファイルです。