程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL注入漏洞全接觸--高級篇(二)

SQL注入漏洞全接觸--高級篇(二)

編輯:關於SqlServer


  第二節、繞過程序限制繼續注入  

  在入門篇提到,有很多人喜歡用’號測試注入漏洞,所以也有很多人用過濾’號的方法來“防止”注入漏洞,這也許能擋住一些入門者的攻擊,但對SQL注入比較熟悉的人,還是可以利用相關的函數,達到繞過程序限制的目的。  

  在“SQL注入的一般步驟”一節中,我所用的語句,都是經過我優化,讓其不包含有單引號的;在“利用系統表注入SQLServer數據庫”中,有些語句包含有’號,我們舉個例子來看看怎麼改造這些語句:  

  簡單的如where xtype=’U’,字符U對應的ASCII碼是85,所以可以用where xtype=char(85)代替;如果字符是中文的,比如where name=’用戶’,可以用where name=nchar(29992)+nchar(25143)代替。  

  第三節、經驗小結  

  1.有些人會過濾Select、Update、Delete這些關鍵字,但偏偏忘記區分大小寫,所以大家可以用selecT這樣嘗試一下。  

  2.在猜不到字段名時,不妨看看網站上的登錄表單,一般為了方便起見,字段名都與表單的輸入框取相同的名字。 

  3.特別注意:地址欄的+號傳入程序後解釋為空格,%2B解釋為+號,%25解釋為%號,具體可以參考URLEncode的相關介紹。  

  4.用Get方法注入時,IIS會記錄你所有的提交字符串,對Post方法做則不記錄,所以能用Post的網址盡量不用Get。  

  5. 猜解Access時只能用Ascii逐字解碼法,SQLServer也可以用這種方法,只需要兩者之間的區別即可,但是如果能用SQLServer的報錯信息把值暴露出來,那效率和准確率會有極大的提高。  

  防 范 方 法  

  SQL注入漏洞可謂是“千裡之堤,潰於蟻穴”,這種漏洞在網上極為普遍,通常是由於程序員對注入不了解,或者程序過濾不嚴格,或者某個參數忘記檢查導致。在這裡,我給大家一個函數,代替ASP中的Request函數,可以對一切的SQL注入Say NO,函數如下:  

   Function SafeRequest(ParaName,ParaType)
   '--- 傳入參數 ---
   'ParaName:參數名稱-字符型
   'ParaType:參數類型-數字型(1表示以上參數是數字,0表示以上參數為字符) 

   Dim ParaValue
   ParaValue=Request(ParaName)
   If ParaType=1 then
   If not isNumeric(ParaValue) then
   Response.write "參數" & ParaName & "必須為數字型!"
   Response.end
   End if
   Else
   ParaValue=replace(ParaValue,"'","''")
   End if
   SafeRequest=ParaValue
   End function  

   文章到這裡就結束了,不管你是安全人員、技術愛好者還是程序員,我都希望本文能對你有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved