天天看點

什麼是SQL注入式攻擊?

a.所謂SQL注入式攻擊,就是攻擊者把SQL指令插入到Web表單的輸入域或頁面請求的查詢字元串,欺騙伺服器執行惡意的SQL指令。

b.在某些表單中,使用者輸入的内容直接用來構造(或者影響)動态SQL指令,或作為存儲過程的輸入參數,這類表單特别容易受到SQL注入式攻擊。

c.常見的SQL注入式攻擊過程例如:

(1)某個ASP.NET Web應用有一個登入頁面,這個登入頁面控制着使用者是否有權通路應用,它要求使用者輸入一個名稱和密碼。

(2)登入頁面中輸入的内容将直接用來構造動态的SQL指令,或者直接用作存儲過程的參數。下面是ASP.NET應用構造查詢的一個例子:

System.Text.StringBuilder query = new System.Text.StringBuilder(“SELECT * from Users WHERE login = '”)

Append(txtLogin.Text).Append("’ AND password=’")

Append(txtPassword.Text).Append("’")

(3)攻擊者在使用者名字和密碼輸入框中輸入"‘或’1’='1"之類的内容。

(4)使用者輸入的内容送出給伺服器之後,伺服器運作上面的ASP.NET代碼構造出查詢使用者的SQL指令,但由于攻擊者輸入的内容非常特殊,是以最後得到的SQL指令變成:SELECT * from Users WHERE login = ‘’ or ‘1’=‘1’ AND password = ‘’ or ‘1’=‘1’。

(5)伺服器執行查詢或存儲過程,将使用者輸入的身份資訊和伺服器中儲存的身份資訊進行對比

(6)由于SQL指令實際上已被注入式攻擊修改,已經不能真正驗證使用者身份,是以系統會錯誤地授權給攻擊者

d.如果攻擊者知道應用會将表單中輸入的内容直接用于驗證身份的查詢,他就會嘗試輸入某些特殊的SQL字元串篡改查詢改變其原來的功能,欺騙系統授予通路權限

e.系統環境不同,攻擊者可能造成的損害也不同,這主要由應用通路資料庫的安全權限決定。如果使用者的帳戶具有管理者或其他比較進階的權限,攻擊者就可能對資料庫的表執行各種他想要做的操作,包括添加、删除或更新資料,甚至可能直接删除表