ASP網站漏洞解析及入侵防範方法

來源:互聯網
上載者:User

  如何更好的達到防範駭客攻擊,本人提一下個人意見!第一,免費程式不要真的就免費用,既然你可以共用原碼,那麼攻擊者一樣可以分析代碼。如果在細節上注意防範,那樣你網站的安全性就大大的提高了。即使出現了SQL Injection這樣的漏洞,攻擊者也不可能馬上拿下你的網站。

  由於ASP的方便易用,越來越多的網站背景程式都使用ASP指令碼語言。但是, 由於ASP本身存在一些安全性漏洞,稍不小心就會給駭客提供可乘之機。事實上,安全不僅是網管的事,編程人員也必須在某些安全細節上注意,養成良好的安全習慣,否則會給自己的網站帶來巨大的安全隱患。目前,大多數網站上的ASP程式有這樣那樣的安全性漏洞,但如果編寫程式的時候注意一點的話,還是可以避免的。

  1、使用者名稱與口令被破解

  攻擊原理:使用者名稱與口令,往往是駭客們最感興趣的東西,如果被通過某種方式看到原始碼,後果是嚴重的。

  防範技巧:涉及使用者名稱與口令的程式最好封裝在伺服器端,盡量少在ASP檔案裡出現,涉及與資料庫連接的使用者名稱與口令應給予最小的許可權。出現次數多的使用者名稱與口令可以寫在一個位置比較隱形包含檔案中。如果涉及與資料庫連接,在理想狀態下只給它以執行預存程序的許可權,千萬不要直接給予該使用者修改、插入、刪除記錄的許可權。

  2、驗證被繞過

  攻擊原理:現在需要經過驗證的ASP程式大多是在頁面頭部加一個判斷語句,但這還不夠,有可能被駭客繞過驗證直接進入。

  防範技巧:需要經過驗證的ASP頁面,可跟蹤上一個頁面的檔案名稱,只有從上一頁面轉進來的會話才能讀取這個頁面。

  3、inc檔案泄露問題

  攻擊原理:當存在ASP的首頁正在製作且沒有進行最後調試完成以前,可以被某些搜尋引擎機動追加為搜尋對象。如果這時候有人利用搜尋引擎對這些網頁進行尋找,會得到有關檔案的定位,並能在瀏覽器中查看到資料庫地點和結構的細節,並以此揭示完整的原始碼。

  防範技巧:程式員應該在網頁發布前對它進行徹底的調試;安全專家則需要加固ASP檔案以便外部的使用者不能看到它們。首先對.inc檔案內容進行加密,其次也可以使用.asp檔案代替.inc檔案使使用者無法從瀏覽器直接觀看檔案的原始碼。inc檔案的檔案名稱不要使用系統預設的或者有特殊含義容易被使用者猜測到的名稱,盡量使用無規則的英文字母。

  4、自動備份被下載

  攻擊原理:在有些編輯ASP程式的工具中,當建立或者修改一個ASP檔案時,編輯器自動建立一個備份檔案,比如:UltraEdit就會備份一個.bak檔案,如你建立或者修改了some.asp,編輯器會自動產生一個叫some.asp.bak檔案,如果你沒有刪除這個bak檔案,攻擊者可以直接下載some.asp.bak檔案,這樣some.asp的來源程式就會被下載。

  防範技巧:上傳程式之前要仔細檢查,刪除不必要的文檔。對以BAK為尾碼的檔案要特別小心。

  5、特殊字元

  攻擊原理:輸入框是駭客利用的一個目標,他們可以通過輸入指令碼語言等對使用者用戶端造成損壞;如果該輸入框涉及資料查詢,他們會利用特殊查詢語句,得到更多的資料庫資料,甚至表的全部。因此必須對輸入框進行過濾。但如果為了提高效率僅在用戶端進行輸入合法性檢查,仍有可能被繞過。

  防範技巧:在處理類似留言板、BBS等輸入框的ASP程式中,最好屏蔽掉HTML、JavaScript、VBScript語句,如無特殊要求,可以限定只允許輸入字母與數字,屏蔽掉特殊字元。同時對輸入字元的長度進行限制。而且不但要在用戶端進行輸入合法性檢查,同時要在伺服器端程式中進行類似檢查。

  6、資料庫下載漏洞

  攻擊原理:在用Access做後台資料庫時,如果有人通過各種方法知道或者猜到了伺服器的Access資料庫的路徑和資料庫名稱,那麼他也能夠下載這個Access資料庫檔案,這是非常危險的。

  防範技巧:

  (1)為你的資料庫檔案名稱起個複雜的非常規的名字,並把它放在幾層目錄下。所謂 “非常規”, 打個比方說,比如有個資料庫要儲存的是有關書籍的資訊, 可不要給它起個“book.mdb”的名字,而要起個怪怪的名稱,比如d34ksfslf.mdb, 並把它放在如./kdslf/i44/studi/的幾層目錄下,這樣駭客要想通過猜的方式得到你的Access資料庫檔案就難上加難了。

  (2)不要把資料庫名寫在程式中。有些人喜歡把DSN寫在程式中,比如:

DBPath = Server.MapPath(“cmddb.mdb”)
conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=” & DBPath 

  假如萬一給人拿到了來源程式,你的Access資料庫的名字就一覽無餘了。因此建議你在ODBC裡設定資料來源,再在程式中這樣寫:

conn.open“shujiyuan”

  (3)使用Access來為資料庫檔案編碼及加密。首先在“工具→安全→加密/解密資料庫”中選取資料庫(如:employer.mdb),然後按確定,接著會出現“資料庫加密後另存新檔”的視窗,可存為:“employer1.mdb”。

  要注意的是,以上的動作並不是對資料庫設定密碼,而只是對資料庫檔案加以編碼,目的是為了防止他人使用別的工具來查看資料庫檔案的內容。

  接下來我們為資料庫加密,首先開啟經過編碼了的 employer1.mdb,在開啟時,選擇“獨佔”方式。然後選取功能表的“工具→安全→設定資料庫密碼”,接著輸入密碼即可。這樣即使他人得到了employer1.mdb檔案,沒有密碼他也是無法看到 employer1.mdb中的內容。

  7、防範遠程注入攻擊

  這類攻擊在以前應該是比較常見的攻擊方式,比如POST攻擊,攻擊者可以隨便的改變要提交的資料值已達到攻擊目的.又如:COOKIES 的偽造,這一點更值得引起程式編寫者或站長的注意,不要使用COOKIES來做為使用者驗證的方式,否則你和把鑰匙留給賊是同一個道理.

  比如:

If trim(Request. cookies ("uname"))="fqy" and Request.cookies("upwd") =”fqy#e3i5.com” then
……..more………
End if 

  我想各位站長或者是喜好寫程式的朋友千萬別出這類錯誤,真的是不可饒恕.偽造COOKIES 都多少年了,你還用這樣的就不能怪別人跑你的密碼.涉及到使用者密碼或者是使用者登陸時,你最好使用session 它才是最安全的.如果要使用COOKIES就在你的COOKIES上多加一個資訊,SessionID,它的隨機值是64位的,要猜解它,不可能.例:

if not (rs.BOF or rs.eof) then
login="true"
Session("username"&sessionID) = Username
Session("password"& sessionID) = Password
‘Response.cookies(“username”)= Username
‘Response.cookies(“Password”)= Password 

  下面我們來談談如何防範遠程注入攻擊,一般的攻擊都是將單表提交檔案拖到本地,將Form ACTION=”chk.asp” 指向你伺服器中處理資料的檔案即可.如果你全部的資料過濾都在單表頁上,那麼恭喜你,你將已經被指令碼攻擊了.

  怎麼才能制止這樣的遠程攻擊?好辦,請看代碼如下: 程式體(9)

<%
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
if mid(server_v1,8,len(server_v2))<>server_v2 then
response.write "<br><br><center>"
response.write " "
response.write "你提交的路徑有誤,禁止從網站外部提交資料請不要亂改參數!"
response.write "

"
  response.end
  end if
  %>

‘個人感覺上面的代碼過濾不是很好,有一些外部提交竟然還能堂堂正正的進來,於是再寫一個.

  ‘這個是過濾效果很好,建議使用. 

if instr(request.servervariables("http_referer"),"http://"&request.servervariables("host") )<1 then response.write "處理 URL 時伺服器上出錯。

  如果您是在用任何手段攻擊伺服器,那你應該慶幸,你的所有操作已經被伺服器記錄,我們會第一時間通知公安局與國家安全部門來調查你的IP. "

response.end
end if 

  程式體(9)

  本以為這樣就萬事大吉了,在表格頁上加一些限制,比如maxlength啦,等等..但天公就是那麼不作美,你越怕什麼他越來什麼.你別忘了,攻擊者可以突破sql注入攻擊時輸入框長度的限制.寫一個SOCKET程式改變HTTP_REFERER?我不會。網上發表了這樣一篇文章:

  ------------len.reg-----------------
  Windows Registry Editor Version 5.00
  [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\擴充(&E)]
  @="C:\Documents and Settings\Administrator\案頭\len.htm"
  "contexts"=dword:00000004
  -----------end----------------------
  -----------len.htm------------------
  
  ----------end----------------------- 

  用法:先把len.reg匯入註冊表(注意檔案路徑)

  然後把len.htm拷到註冊表中指定的地方.

  開啟網頁,游標放在要改變長度的輸入框上點右鍵,看多了一個叫擴充的選項了吧

  單擊搞定! 後記:同樣的也就可以對付那些限制輸入內容的指令碼了.

  怎麼辦?我們的限制被饒過了,所有的努力都白費了?不,舉起你de鍵盤,說不。讓我們繼續回到指令碼字元的過濾吧,他們所進行的注入無非就是進行指令碼攻擊。我們把所有的精力全都用到ACTION以後的頁面吧,在chk.asp頁中,我們將非法的字元全部過濾掉,結果如何?我們只在前面虛晃一槍,叫他們去改註冊表吧,當他們改完才會發現,他們所做的都是那麼的徒勞。

  8、ASP木馬

  已經講到這裡了,再提醒各位論壇站長一句,小心你們的檔案上傳:為什麼論壇程式被攻破後主機也隨之被攻擊者佔據。原因就在……對!ASP木馬!一個絕對可惡的東西。病毒嗎?非也.把個檔案隨便放到你論壇的程式中,您老找去吧。不吐血才怪哦。如何才能防止ASP木馬被上傳到伺服器呢?方法很簡單,如果你的論壇支援檔案上傳,請設定好你要上傳的檔案格式,我不贊成使用可更改的檔案格式,直接從程式上鎖定,只有圖象檔案格式,和壓縮檔就完全可以,多給自己留點方便也就多給攻擊者留點方便。怎麼判斷格式,我這裡收集了一個,也改出了一個,大家可以看一下:

  程式體(10)

  ’判斷檔案類型是否合格
  Private Function CheckFileExt (fileEXT)
  dim Forumupload
  Forumupload="gif,jpg,bmp,jpeg"
  Forumupload=split(Forumupload,",")
  for i=0 to ubound(Forumupload)
  if lcase(fileEXT)=lcase(trim(Forumupload(i))) then
  CheckFileExt=true
  exit Function
  else
  CheckFileExt=false
  end if
  next
  End Function
  ‘驗證檔案內容的合法性

set MyFile = server.CreateObject ("Scripting.FileSystemObject")
  set MyText = MyFile.OpenTextFile (sFile, 1) ’ 讀取文字檔
  sTextAll = lcase(MyText.ReadAll): MyText.close
  ’判斷使用者檔案中的危險操作
  sStr ="8 .getfolder .createfolder .deletefolder .createdirectory 
  .deletedirectory"
  sStr = sStr & " .saveas wscript.shell script.encode"
  sNoString = split(sStr," ")
  for i = 1 to sNoString(0)
  if instr(sTextAll, sNoString(i)) <> 0 then
  sFile = Upl.Path & sFileSave: fs.DeleteFile sFile
  Response.write "<center><br><big>"& sFileSave &"檔案中含有與操作目錄等有關的命令"&_
  "<br><font color=red>"& mid(sNoString(i),2) &"</font>,為了安全原因,<b>不能上傳。<b>"&_"</big></center></html>"
  Response.end
  end if
  next 

  把他們加到你的上傳程式裡做一次驗證,那麼你的上傳程式安全性將會大大提高.

  什嗎?你還不放心?拿出殺手鐧,請你的虛擬機器主機服務商來幫忙吧。登陸到伺服器,將PROG ID 中的"shell.application"項和"shell.application.1"項改名或刪除。再將”WSCRIPT.SHELL”項和”WSCRIPT.SHELL.1”這兩項都要改名或刪除。呵呵,我可以大膽的說,國內可能近半以上的虛擬機器主機都沒改過。只能慶幸你們的使用者很合作,否則……我刪,我刪,我刪刪刪……



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.