相信不少讀者都聽過「SQL」這個專有名詞,其實SQL就是一種用於資料庫的特殊語言,只要有用到資料庫的系統都會用它來進行資料的查詢及處理。而現在的網站因為使用了動態網頁技術,不論是部落格、論壇、CMS…等網站的後台都會有資料庫,因此不肖人士可以透過網頁程式的漏洞,使用一種「SQL Injection」技術來入侵網站,取得裡面的資料甚至是帳號/密碼,也是駭客常見的攻擊手法。如果你有學習網頁程式語言及資料庫,不論用PHP、Perl、Pyhton、JSP、ASP.Net或其他網頁語言,都應該來看看這個教學網站,以實際操作的方式輕鬆了解SQL Injection的攻擊原理及修補方式,以下就來看看阿正老師的介紹吧!
「SQL Injection」,中文稱為SQL攻擊、SQL隱碼攻擊或SQL注入攻擊,就是透過網頁程式所使用的「結構化查詢語言」(Structured Query Language,SQL),在網頁中的資料輸入欄位(如帳號/密碼)或網址列的參數(如 xxxx?id=111)夾帶惡意的SQL語法,利用程式設計不良所造成的漏洞來執行惡意的SQL指令,入侵到資料庫來取得資料,甚至可能破壞資料庫,是駭客常用的一種攻擊手法。
如果你有學過程式語言,不知道SQL攻擊是怎麼運作的,那麼可以試試看今天阿正老師要介紹的這個教學網站,它會帶著你一步一步操作SQL攻擊的方式,進而修補裡面的漏洞,雖然該網頁是以JSP來示範,不過只要了解原理之後,就可以輕鬆利用你熟悉的語言來修改或是修補,趕快來體驗一下這個簡單的SQL攻擊課程吧!
SQL攻擊範例教學 |
開啟網站之後,依照畫面指示按下〔Next〕按鈕即可開始。
可以看到畫面左方是課程的進度, 一共有12個步驟,右上方則是網頁畫面,這個範例是一個網路銀行客戶登入的畫面。右下方是執行SQL指令的紀錄。
首先教程會先叫你輸入一組正常的帳號密碼,看看執行的結果。從第四個步驟開始,會教你輸入錯誤的資料,例如在密碼後面加入一個單引號,就會出現「500 Internal Server Error」(內部伺服器錯誤)的訊息,表示這個網頁設計得有問題。
接著範例會帶你查看程式的原始碼(以JSP為範例,其他語言的用法其實也差異不大),可看到該程式取得使用者POST過來的網頁參數後,直接存入email及password兩個字串中,完全不做任何處理,存在著SQL Injection漏洞。
範例的第10個步驟會要你將密碼輸入‘ or 1=1)# ,即可輕鬆登入網路銀行的後台,是不是很恐怖呢?
其實 OR 1=1 就是使用到程式語言的「OR」邏輯運算子,也就是前面的帳號密碼即使錯誤,只要加上 OR 1=1 就能將運算結果變為真(true),而後面的 # 則是SQL的註解,也就是將後面的語法全部忽略,因此可以利用這種方式避開帳號密碼的檢查,直接登入網路銀行了。
最後範例會教你要如何修正這個程式的漏洞,其實原理非常簡單,就是只要事先將使用者傳過來的資料加以處理,轉換為你要的資料型態(如數值、字串…),就可避免駭客透過SQL Injection的手法來入侵你的網頁了。
當然駭客入侵的技術五花八門,SQL Injection只不過是其中常用的一種技術,市面上也有不少SQL攻擊的駭客工具可以自動掃描並嘗試各種SQL的漏洞來攻擊,因此如果你正在學習或是撰寫網頁程式,請記得一個原則,就是不要相信傳進來的資料,一定要事先做好資料的轉換或過濾,才能避免SQL攻擊的發生喔!
###
為什麼練習的時候輸入 ‘ or 1=1)# 不會過了呢