解決ASP(圖像)上傳漏洞的方法
更新時間:2006年12月17日 00:00:00 作者:
經(jīng)常聽說的ASP上傳漏洞,即是將一些木馬文件修改后綴名(修改為圖像文件后綴),進(jìn)行上傳。
針對此情況使用下列函數(shù)進(jìn)行辨別:
那么在應(yīng)用的時候
CheckFileType(server.mappath("cnbruce.jpg"))
或者
CheckFileType("F:/web/164/images/cnbruce.jpg"))
反正即是檢測驗證本地物理地址的圖像文件類型,返回 true 或 false值
所以這個情況應(yīng)用在圖像上傳中,目前的辦法是先允許該“偽圖像”文件的上傳,接著使用以上的自定義函數(shù)判斷該文件是否符合圖像的規(guī)范,若是木馬偽裝的圖像文件則FSO刪除之,比如:
則是先將文件上傳,接著立馬使用自定義函數(shù)判斷文件圖像類型的吻合性,F(xiàn)SO做出刪除該文件的操作。
ASP上傳漏洞還利用"\0"對filepath進(jìn)行手腳操作
http://www.cnbruce.com/blog/showlog.asp?cat_id=32&log_id=635
針對這樣的情況可使用如下函數(shù)
接著就可判斷后再做文件的上傳
所以,在Blog中的一文:(ASP)文件系統(tǒng)之化境無組件(v2.0)上傳
關(guān)于upfile.asp的全新內(nèi)容如下:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
針對此情況使用下列函數(shù)進(jìn)行辨別:
<% '****************************************************************** 'CheckFileType 函數(shù)用來檢查文件是否為圖片文件 '參數(shù)filename是本地文件的路徑 '如果是文件jpeg,gif,bmp,png圖片中的一種,函數(shù)返回true,否則返回false '****************************************************************** 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) function CheckFileType(filename) on error resume next CheckFileType=false dim fstream,fileExt,stamp,i fileExt=mid(filename,InStrRev(filename,".")+1) set fstream=Server.createobject("ADODB.Stream") fstream.Open fstream.Type=adTypeBinary fstream.LoadFromFile filename fstream.position=0 select case fileExt case "jpg","jpeg" stamp=fstream.read(2) for i=0 to 1 if ascB(MidB(stamp,i+1,1))=jpg(i) then CheckFileType=true else CheckFileType=false next case "gif" stamp=fstream.read(6) for i=0 to 5 if ascB(MidB(stamp,i+1,1))=gif(i) then CheckFileType=true else CheckFileType=false next case "png" stamp=fstream.read(4) for i=0 to 3 if ascB(MidB(stamp,i+1,1))=png(i) then CheckFileType=true else CheckFileType=false next case "bmp" stamp=fstream.read(2) for i=0 to 1 if ascB(MidB(stamp,i+1,1))=bmp(i) then CheckFileType=true else CheckFileType=false next end select fstream.Close set fseteam=nothing if err.number<>0 then CheckFileType=false end function %> |
那么在應(yīng)用的時候
CheckFileType(server.mappath("cnbruce.jpg"))
或者
CheckFileType("F:/web/164/images/cnbruce.jpg"))
反正即是檢測驗證本地物理地址的圖像文件類型,返回 true 或 false值
所以這個情況應(yīng)用在圖像上傳中,目前的辦法是先允許該“偽圖像”文件的上傳,接著使用以上的自定義函數(shù)判斷該文件是否符合圖像的規(guī)范,若是木馬偽裝的圖像文件則FSO刪除之,比如:
file.SaveAs Server.mappath(filename) '保存文件 If not CheckFileType(Server.mappath(filename)) then response.write "錯誤的圖像格式" Set fso = CreateObject("Scripting.FileSystemObject") Set ficn = fso.GetFile(Server.mappath(filename)) ficn.delete set ficn=nothing set fso=nothing response.end end if |
則是先將文件上傳,接著立馬使用自定義函數(shù)判斷文件圖像類型的吻合性,F(xiàn)SO做出刪除該文件的操作。
ASP上傳漏洞還利用"\0"對filepath進(jìn)行手腳操作
http://www.cnbruce.com/blog/showlog.asp?cat_id=32&log_id=635
針對這樣的情況可使用如下函數(shù)
function TrueStr(fileTrue) str_len=len(fileTrue) pos=Instr(fileTrue,chr(0)) if pos=0 or pos=str_len then TrueStr=true else TrueStr=false end if end function |
接著就可判斷后再做文件的上傳
if TrueStr(filename)=false then response.write "非法文件" response.end end if file.SaveAs Server.mappath(filename) |
所以,在Blog中的一文:(ASP)文件系統(tǒng)之化境無組件(v2.0)上傳
關(guān)于upfile.asp的全新內(nèi)容如下:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
相關(guān)文章
Asp實現(xiàn)的數(shù)據(jù)庫連接池功能函數(shù)分享
這篇文章主要介紹了Asp實現(xiàn)的數(shù)據(jù)庫連接池功能函數(shù)分享,本函數(shù)能夠加快網(wǎng)頁的訪問速度,降低數(shù)據(jù)庫的壓力,需要的朋友可以參考下2014-07-07ASP 處理JSON數(shù)據(jù)的實現(xiàn)代碼
今天看網(wǎng)頁才發(fā)現(xiàn)了ASP也能處理JSON數(shù)據(jù)?呵呵,剛才論壇上看到一個兄弟寫的文章,沒有測試,不過理論上一定是可以的,之前腳本之家小編也發(fā)過類似的文章都可以看下2017-07-07asp中用數(shù)據(jù)庫生成不重復(fù)的流水號
asp中用數(shù)據(jù)庫生成不重復(fù)的流水號的實現(xiàn)代碼,需要的朋友可以參考下實現(xiàn)原理其它程序一樣。2006-09-09面向小白visual studio 2019 添加第三方庫教程(入門)
這篇文章主要介紹了面向小白visual studio 2019 添加第三方庫教程,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03ASP通過ODBC連接SQL Server 2008數(shù)據(jù)庫的方法
這篇文章主要介紹了ASP通過ODBC連接SQL Server 2008數(shù)據(jù)庫的方法,需要的朋友可以參考下2015-08-08