SQL注入攻擊的簡單示例


SQL注入攻擊的簡單示例:
          statement := "SELECT * FROM Users WHERE Value= " + a_variable + " 
        上面這條語句是很普通的一條SQL語句,他主要實現的功能就是讓用戶輸入一個員工編號然后查詢處這個員工的信息。但是若這條語句被不法攻擊者改裝過后,就可能成為破壞數據的黑手。如攻擊者在輸入變量的時候,輸入以下內容SA001’;drop table c_order--。那么以上這條SQL語句在執行的時候就變為了SELECT * FROM Users WHERE Value= ‘SA001’;drop table c_order--。

  這條語句是什么意思呢?‘SA001’后面的分號表示一個查詢的結束和另一條語句的開始。c_order后面的雙連字符 指示當前行余下的部分只是一個注釋,應該忽略。如果修改后的代碼語法正確,則服務器將執行該代碼。系統在處理這條語句時,將首先執行查詢語句,查到用戶編號為SA001 的用戶信息。然后,數據將刪除表C_ORDER(如果沒有其他主鍵等相關約束,則刪除操作就會成功)。只要注入的SQL代碼語法正確,便無法采用編程方式來檢測篡改。因此,必須驗證所有用戶輸入,並仔細檢查在您所用的服務器中執行構造 SQL命令的代碼。

 SQL注入攻擊原理。

  可見SQL注入攻擊的危害性很大。在講解其防止辦法之前,數據庫管理員有必要先了解一下其攻擊的原理。這有利於管理員采取有針對性的防治措施。

  SQL注入是目前比較常見的針對數據庫的一種攻擊方式。在這種攻擊方式中,攻擊者會將一些惡意代碼插入到字符串中。然后會通過各種手段將該字符串傳遞到SQLServer數據庫的實例中進行分析和執行。只要這個惡意代碼符合SQL語句的規則,則在代碼編譯與執行的時候,就不會被系統所發現。

  SQL注入式攻擊的主要形式有兩種。一是直接將代碼插入到與SQL命令串聯在一起並使得其以執行的用戶輸入變量。上面筆者舉的例子就是采用了這種方法。由於其直接與SQL語句捆綁,故也被稱為直接注入式攻擊法。二是一種間接的攻擊方法,它將惡意代碼注入要在表中存儲或者作為原書據存儲的字符串。在存儲的字符串中會連接到一個動態的SQL命令中,以執行一些惡意的SQL代碼。

  注入過程的工作方式是提前終止文本字符串,然后追加一個新的命令。如以直接注入式攻擊為例。就是在用戶輸入變量的時候,先用一個分號結束當前的語句。然后再插入一個惡意SQL語句即可。由於插入的命令可能在執行前追加其他字符串,因此攻擊者常常用注釋標記“—”來終止注入的字符串。執行時,系統會認為此后語句位注釋,故后續的文本將被忽略,不背編譯與執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM