230 likes | 614 Views
SQL Injection( 資料隱碼 ) 簡介. CCU C ampus N etwork A ssociation 講師:黃韋翔 maximum@cna.ccu.edu.tw. Outline. 什麼是 SQL Injection 影響的系統 SQL Injection 原理 SQL Injection 攻擊 SQL Injection 防範 參考資料. 什麼是 SQL Injection. SQL Injection 應稱為 SQL 指令植入式攻擊,主要是屬於 Input Validation 的問題。目前被翻譯成 『 資料隱碼 』 攻擊。
E N D
SQL Injection(資料隱碼) 簡介 CCU Campus Network Association 講師:黃韋翔 maximum@cna.ccu.edu.tw
Outline • 什麼是SQL Injection • 影響的系統 • SQL Injection原理 • SQL Injection攻擊 • SQL Injection防範 • 參考資料
什麼是SQL Injection • SQL Injection 應稱為 SQL 指令植入式攻擊,主要是屬於 Input Validation 的問題。目前被翻譯成『資料隱碼』攻擊。 • SQL Injection攻擊並非植入電腦病毒,他利用寫入特殊SQL語法來動作。 • 只要有提供使用者輸入的介面,且對於資料沒有做過處理,則當資料傳遞給後端資料庫時,則可能造成問題。
SQL Injection • SQL Injection 的起因通常是因為網頁設計不良,沒有對於輸入的字串做過濾。 • 利用正常查詢網站資料時,將攻擊的語法夾藏於網站查詢命令中。 • 攻擊者可穿透防火牆,繞過身分認證機制,取得資料庫使用權限,進而竊取資料或竄改、破壞資料庫。
影響的系統 • 各種互動性的網頁語言如PHP.ASP.JSP等等。 • 影響的系統包括市面上常見的MSSQL、MySQL、Oracle、Sybase等Database。
造成SQL Injection的因素 • 沒有針對特殊符號(如單引號)進行過濾 • 查詢欄位沒有限制長度及內容 • 資料庫的帳號控管不佳 • 資料庫權限過高 • 攻擊者猜測到資料欄位的部分資訊 • 程式原始碼的洩漏
攻擊成立的前提 • 沒有針對特殊符號(如單引號)進行過濾 • 查詢欄位沒有限制長度及內容 • 資料庫的帳號控管不佳 • 資料庫權限過高 • 攻擊者猜測到資料欄位的部分資訊 • 程式原始碼的洩漏
程式碼洩漏 • 常見的將檔案改成login.bak或是login.old
資料庫密碼控管不佳 • 使用預設密碼,或是空白密碼
SQL Injection攻擊原理(1) • 一般網站對於使用者帳號驗證的sql語法 • SELECT * FROM User WHERE UserName=‘$ID' AND Password=‘$Pass‘; • 正常使用者輸入帳號test,密碼123 • SELECT * FROM User WHERE UserName=‘test' AND Password=‘123‘;
SQL Injection攻擊原理(2) • 常見的系統管理帳號都為admin或是root • 有心人士猜測系統有admin帳號,則輸入帳號admin’--,使得SQL查詢語法變成 • SELECT * FROM User WHERE UserName=‘admin’--' AND Password=‘etretet‘; • 而--在sql語法中為註解的意思 • 也就是sql server實際上執行的語法是 • SELECT * FROM User WHERE UserName=‘admin’--'
SQL Injection攻擊原理(3) • 或是使用者輸入abc’ or 1=1--這類的語法 • 則查詢的Sql語法變成 • SELECT * FROM User WHERE UserName=‘admin' AND Password=‘abc’ or 1=1--‘ • 因為加上的 or 1=1,則不管之前的條件為合,只要某個條件為真,則整個式子恆為真 • http://140.123.242.24/~maximum/nsc/demo.php
SQL Injection攻擊原理(4) • 使用者資料庫密碼為空白 • 則可插入惡意語法新增檔案、使用者 • http://140.123.106.83/phpmyadmin/
SQL 攻擊防範(1) • 過濾輸入條件中可能隱含的sql指令(如insert、select、update) • 對於輸入進來的字串做過濾(如特殊的’和--) • 利用檢測程式掃描原始碼是否有漏洞
SQL 攻擊防範(2) • 資料庫權限控管 • root帳號的密碼控管 • 只開給普通使用者單一database的權限 • 刪除多餘的公開資料表
SQL 攻擊防範(3) • 網站伺服器方面 • 定期更新系統軟體版本 • 避免使用者可以看到網頁資料夾原始目錄 • 不要使用預設的網站路徑(/usr/local/www) • 不提供錯誤訊息,使得使用者無法從回報的錯誤訊息中得到資料庫的資料結構 • 避免使用Windows架設WWWServer
SQL 攻擊防範(4) • 程式撰寫部分 • 多利用addslash或是magic_quotes來做過濾 • 在撰寫程式時避免將檔案命名成xxx.old或是xxx.bak以及xxx.conf • 將conf檔放置於WWW不能存取之目錄
參考資料 • PHP Manual • http://us2.php.net/manual/en/security.database.sql-injection.php • 台灣Microsoft • http://www.microsoft.com/taiwan/sql/SQL_Injection_G1.htm • http://www.microsoft.com/taiwan/sql/SQL_Injection_G2.htm