sql注入攻擊的實現原理
結構化查詢語言(sql)是一種用來和資料庫互動的文字語言,sql injection就是利用某些資料庫的外部介面把使用者資料插入到實際的資料庫操作語言當中,從而達到入侵資料庫乃至作業系統的目的。它的產生主要是由於程式對使用者輸入的資料沒有進行細緻的過濾,導致非法資料的匯入查詢。
sql注入攻擊主要是通過構建特殊的輸入,這些輸入往往是sql語法中的一些組合,這些輸入將作為引數傳入web應用程式,通過執行sql語句而執行入侵者的想要的操作,下面以登入驗證中的模組為例,說明sql注入攻擊的實現方法。
在web應用程式的登入驗證程式中,一般有使用者名稱(username)和密碼 (password)兩個引數,程式會通過使用者所提交輸入的使用者名稱和密碼來執行授權操作。其原理是通過查詢user表中的使用者名稱(username)和密碼(password)的結果來進行授權訪問,典型的sql查詢語句為:
select * from users where username='admin' and password='smith』
如果分別給username和password賦值「admin' or 1=1--」和「aaa」。 那麼,sql指令碼直譯器中的上述語句就會變為:
select * from users where username=』admin』 or 1=1-- and password=』aaa』
該語句中進行了兩個判斷,只要乙個條件成立,則就會執行成功,而1=1在邏輯判斷上是恆成立的,後面的「--」表示注釋,即後面所有的語句為注釋語句。同理通過在輸入引數中構建sql語法還可以刪除資料庫中的表,查詢、插入和更新資料庫中的資料等危險操作:
(1)jo'; drop table authors—如果存在authors表則刪除。
(2)' union select sum(username) from users—從users表中查詢出username的個數
(3)'; insert into users values( 666, 'attacker', 'foobar', 0xffff )—在user表中插入值
(4)' union select @@version,1,1,1--查詢資料庫的版本
(5)'exec master..xp_cmdshell 'dir' 通過xp_cmdshell來執行dir命令
sql注入攻擊實現過程
sql注入攻擊可以手工進行,也可以通過sql注入攻擊輔助軟體如hdsi、domain、nbsi等,其實現過程可以歸納為以下幾個階段:
(1)尋找sql注入點;尋找sql注入點的經典查詢方法是在有引數傳入的地方新增諸如「and 1=1」、「and 1=2」以及「』」等一些特殊字元,通過瀏覽器所返回的錯誤資訊來判斷是否存在sql注入,如果返回錯誤,則表明程式未對輸入的資料進行處理,絕大部分情況下都能進行注入。
(2)獲取和驗證sql注入點;找到sql注入點以後,需要進行sql注入點的判斷,常常採用2.1中的語句來進行驗證。
(3)獲取資訊;獲取資訊是sql注入中乙個關鍵的部分,sql注入中首先需要判斷存在注入點的資料庫是否支援多句查詢、子查詢、資料庫使用者賬號、資料庫使用者許可權。如果使用者許可權為sa,且資料庫中存在xp_cmdshell儲存過程,則可以直接轉(4)。
(4)實施直接控制;以sql server 2000為例,如果實施注入攻擊的資料庫是sql server 2000,且資料庫使用者為sa,則可以直接新增管理員賬號、開放3389遠端終端服務、生成檔案等命令。
(5)間接進行控制。間接控制主要是指通過sql注入點不能執行dos等命令,只能進行資料字段內容的猜測。在web應用程式中,為了方便使用者的維護,一般都提供了後台管理功能,其後台管理驗證使用者和口令都會儲存在資料庫中,通過猜測可以獲取這些內容,如果獲取的是明文的口令,則可以通過後台中的上傳等功能上傳網頁木馬實施控制,如果口令是明文的,則可以通過暴力破解其密碼。
it技術,it新聞,it技術資訊**--源點網
sql注入攻擊原理及攻防 02
二 區分資料庫伺服器型別 一般來說,access與sql server是最常用的資料庫伺服器,儘管它們都支援t sql標準,但還有不同之處,而且不同的資料庫有不同的攻擊方法,必須要區別對待。1 利用資料庫服2 務器的系統變數進行區分 sql server有user,db name 等系統變數,利用這...
sql注入詳情 攻擊與防止
所謂sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令,比如先前的很多影視 洩露vip會員密碼大多就是通過web表單遞交查詢字元暴出的,這類表單特別容易受到sql注入式攻擊 sql注入 當應用程式使用輸入內容來構造動態sql...
sql注入攻擊和django如何實現防止sql注入
sql注入攻擊 sql注入攻擊是黑客對資料庫進行攻擊的常用手段之一。隨著b s模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫 的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提...