檔案下載下傳漏洞
漏洞代碼:
<%
function download(f,n)
on error resume next
Set S=CreateObject("Adodb.Stream")
S.Mode=3
S.Type=1
S.Open
S.LoadFromFile(f)
if Err.Number>0 then
Reaponse.status="404"
else
Response.ContentType="application/octet-stream"
Response.AddHeader "Content-Disposition:","Attachment;filename="&n
Range=Mid(Request.ServerVariables("HTTP_RANGE"),7)
if Range="" then
Response.BinaryWrite(S.Read)
else
S.Postion=Clng(Split(Range,"-")(0))
Response.BinaryWrite(S.Read)
end if
End if
End function
dim filename
filename=request("filename")
filename=filename&".asp"
call download(server.MapPath(filename),filename)
%>
在 MapPath 的 Path 參數中不允許字元 '..',需要啟用父路徑(IIS6.0出于安全考慮,這一選項預設是關閉的。)
漏洞利用:

漏洞修複:
如果存在.. 就結束腳本,禁止跨目錄進行操作
If InStr(filename,"..")>0 Then
Response.write "禁止跨目錄操作!"
response.end
End IF
錯誤處理1:
filename=Replace(filename, "../", "") '替換../為空
filename=Replace(filename, "./", "")
代碼對../和./進行過濾用來防止目錄跳轉,但可以通過構造參數饒過檢測.由于檢測替換隻進行一次可以使用....//代替上級目錄,程式替換後....//變成../
攻擊代碼示例:filename=.....///sql.asp
錯誤處理2:
If InStr(filename,"../")>0 Then
Response.write "禁止跨目錄操作!"
response.end
End IF
代碼對../進行檢測,但是忽略了對..\的情況,在windows下,..\也可實作跨目錄。
攻擊代碼示例:filename=..\sql.asp