解決ASP圖像上傳漏洞
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
常聽說的ASP上傳漏洞,即是將一些木馬文件修改后綴名(修改為圖像文件后綴),進(jìn)行上傳。
針對(duì)此情況使用下列函數(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)用的時(shí)候 CheckFileType(server.mappath("cnbruce.jpg")) 或者 CheckFileType("F:/web/164/images/cnbruce.jpg")) 反正即是檢測(cè)驗(yàn)證本地物理地址的圖像文件類型,返回 true 或 false值 所以這個(gè)情況應(yīng)用在圖像上傳中,目前的辦法是先允許該“偽圖像”文件的上傳,接著使用以上的自定義函數(shù)判斷該文件是否符合圖像的規(guī)范,若是木馬偽裝的圖像文件則FSO刪除之,比如: file.SaveAs Server.mappath(filename) '保存文件 If not CheckFileType(Server.mappath(filename)) then response.write "錯(cuò)誤的圖像格式" 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"對(duì)filepath進(jìn)行手腳操作 針對(duì)這樣的情況可使用如下函數(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) 該文章在 2011/10/10 9:15:56 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |