SQL資料隱碼攻擊

SQL攻擊(SQL injection,中國大陸稱作SQL注入攻擊,台灣稱作SQL資料隱碼攻擊),簡稱隱碼攻擊,是發生於套用程式之資料庫層的安全漏洞。簡而言之,是在輸入的字串之中注入SQL指令,在設計不良的程式當中忽略了檢查,那么這些注入進去的指令就會被資料庫伺服器誤認為是正常的SQL指令而執行,因此遭到破壞。有部份人認為SQL隱碼攻擊是只針對Microsoft SQL Server而來,但只要是支援批次處理SQL指令的資料庫伺服器,都有可能受到此種手法的攻擊。

基本介紹

  • 中文名:SQL資料隱碼攻擊
  • 外文名:SQL Injection Attacks
原因,作用原理,可能造成的危害,避免方法,

原因

在套用程式中若有下列狀況,則可能套用程式正暴露在SQL Injection的高風險情況下:
1.在套用程式中使用字串聯結方式組合SQL指令。
2.在套用程式連結資料庫時使用許可權過大的帳戶(例如很多開發人員都喜歡用sa(內建的最高許可權的系統管理員帳戶)連線Microsoft SQL Server資料庫)。
3.在資料庫中開放了不必要但權力過大的功能(例如在Microsoft SQL Server資料庫中的xp_cmdshell延伸預存程式或是OLE Automation預存程式等)
4.太過於信任使用者所輸入的資料,未限制輸入的字元數,以及未對使用者輸入的資料做潛在指令的檢查。

作用原理

1.SQL命令可查詢、插入、更新、刪除等,命令的串接。而以分號字元為不同命令的區別。(原本的作用是用於SubQuery或作為查詢、插入、更新、刪除……等的條件式)
2.SQL命令對於傳入的字串參數是用單引號字元所包起來。《但連續2個單引號字元,在SQL資料庫中,則視為字串中的一個單引號字元》
3.SQL命令中,可以注入註解《連續2個減號字元——後的文字為註解,或“/*”與“*/”所包起來的文字為註解》
4.因此,如果在組合SQL的命令字串時,未針對單引號字元作取代處理的話,將導致該字元變數在填入命令字串時,被惡意竄改原本的SQL語法的作用。

可能造成的危害

1.資料表中的資料外泄,例如個人機密資料,帳戶資料,密碼等。
2.數據結構被黑客探知,得以做進一步攻擊(例如SELECT * FROM sys.tables)。
3.資料庫伺服器被攻擊,系統管理員帳戶被竄改(例如ALTER LOGIN sa WITH PASSWORD='xxxxxx')。
4.取得系統較高許可權後,有可能得以在網頁加入惡意連結以及XSS
5.經由資料庫伺服器提供的作業系統支援,讓黑客得以修改或控制作業系統(例如xp_cmdshell "net stop iisadmin"可停止伺服器的IIS服務)。
6.破壞硬碟資料,癱瘓全系統(例如xp_cmdshell "FORMAT C:")。

避免方法

1.在設計套用程式時,完全使用參數化查詢(Parameterized Query)來設計資料存取功能。
2.在組合SQL字串時,先針對所傳入的參數作字元取代(將單引號字元取代為連續2個單引號字元)。
3.如果使用PHP開發網頁程式的話,亦可開啟PHP的魔術引號(Magic quote)功能(自動將所有的網頁傳入參數,將單引號字元取代為連續2個單引號字元)。
4.其他,使用其他更安全的方式連線SQL資料庫。例如已修正過SQL注入問題的資料庫連線元件。
5.使用SQL防注入系統。

相關詞條

熱門詞條

聯絡我們