SQL Injection(資料隱碼) 簡介

Download Report

Transcript SQL Injection(資料隱碼) 簡介

SQL Injection(資料隱碼) 簡介
CCU Campus Network Association
講師:黃韋翔
[email protected]
2015/4/13
Outline
什麼是SQL Injection
 影響的系統
 SQL Injection原理
 SQL Injection攻擊
 SQL Injection防範
 參考資料

2015/4/13
什麼是SQL Injection
SQL Injection 應稱為 SQL 指令植入式攻擊,
主要是屬於 Input Validation 的問題。目前
被翻譯成『資料隱碼』攻擊。
 SQL Injection攻擊並非植入電腦病毒,他
利用寫入特殊SQL語法來動作。
 只要有提供使用者輸入的介面,且對於資
料沒有做過處理,則當資料傳遞給後端資
料庫時,則可能造成問題。

2015/4/13
SQL Injection
SQL Injection 的起因通常是因為網頁設計
不良,沒有對於輸入的字串做過濾。
 利用正常查詢網站資料時,將攻擊的語法
夾藏於網站查詢命令中。
 攻擊者可穿透防火牆,繞過身分認證機制,
取得資料庫使用權限,進而竊取資料或竄
改、破壞資料庫。

2015/4/13
影響的系統

各種互動性的網頁語言如PHP.ASP.JSP等
等。

影響的系統包括市面上常見的MSSQL、
MySQL、Oracle、Sybase等Database。
2015/4/13
造成SQL Injection的因素






沒有針對特殊符號(如單引號)進行過濾
查詢欄位沒有限制長度及內容
資料庫的帳號控管不佳
資料庫權限過高
攻擊者猜測到資料欄位的部分資訊
程式原始碼的洩漏
2015/4/13

攻擊成立的前提
沒有針對特殊符號(如單引號)進行過濾
查詢欄位沒有限制長度及內容
資料庫的帳號控管不佳
資料庫權限過高
攻擊者猜測到資料欄位的部分資訊
程式原始碼的洩漏
2015/4/13
程式碼洩漏

常見的將檔案改成login.bak或是login.old
2015/4/13
資料庫密碼控管不佳

使用預設密碼,或是空白密碼
2015/4/13
2015/4/13
SQL Injection攻擊原理(1)

一般網站對於使用者帳號驗證的sql語法
SELECT * FROM User WHERE
UserName=‘$ID' AND Password=‘$Pass‘;

正常使用者輸入帳號test,密碼123
SELECT * FROM User WHERE
UserName=‘test' AND Password=‘123‘;
2015/4/13
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’--'
2015/4/13
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/dem
o.php

2015/4/13
SQL Injection攻擊原理(4)

使用者資料庫密碼為空白
則可插入惡意語法新增檔案、使用者

http://140.123.106.83/phpmyadmin/
2015/4/13
SQL 攻擊防範(1)
過濾輸入條件中可能隱含的sql指令(如
insert、select、update)
 對於輸入進來的字串做過濾(如特殊的’和--)
 利用檢測程式掃描原始碼是否有漏洞

2015/4/13
SQL 攻擊防範(2)

資料庫權限控管
root帳號的密碼控管
只開給普通使用者單一database的權限
刪除多餘的公開資料表
2015/4/13
SQL 攻擊防範(3)

網站伺服器方面
定期更新系統軟體版本
避免使用者可以看到網頁資料夾原始目錄
不要使用預設的網站路徑(/usr/local/www)
不提供錯誤訊息,使得使用者無法從回報的錯
誤訊息中得到資料庫的資料結構
避免使用Windows架設WWW Server
2015/4/13
SQL 攻擊防範(4)

程式撰寫部分
多利用addslash或是magic_quotes來做過濾
在撰寫程式時避免將檔案命名成xxx.old或是
xxx.bak以及xxx.conf
將conf檔放置於WWW不能存取之目錄
2015/4/13
參考資料

PHP Manual
http://us2.php.net/manual/en/security.databas
e.sql-injection.php

台灣Microsoft
http://www.microsoft.com/taiwan/sql/SQL_Inje
ction_G1.htm
http://www.microsoft.com/taiwan/sql/SQL_Inje
ction_G2.htm
2015/4/13
Any Questions?
2015/4/13
Thank You !!!
2015/4/13