回到家後,天玄既興奮又期待的說:「來吧!來吧!」
宇成說:「先不要急,雲飛,過來幫忙吧!」
雲飛走過來問:「你想要學些什麼?」
天玄說:「其實,小紅很崇拜計算機強的人,所以我想要竊取她的數據來證明。另外,她還問我什麼叫作加密編碼,如果我答不出來我就太遜了!」
雲飛說:「這些都可以教你!那,你想要從那裡取得她的數據?」
天玄打開一個網站說:「就是這個遊戲網站,我們就是在這認識的,她叫iccred。」
雲飛看了看說:「這看起來滿像轟炸超人的...你很強嗎?」
天玄拍胸脯保證:「當然強羅!每次本天玄大爺出馬,一堆人就過來圍觀呢!」
雲飛一邊試著輸入SQL隱碼一邊說:「哼,他們是來看你怎麼輸的吧!」
天玄怒道:「喂,你這什麼意思?你看,我一上線就一堆人搶著要跟我聯機。」
雲飛進入數據庫畫面並回道:「是因為找你洗勝率很方便吧。」
天玄憤怒的說:「喂,你這小子,不要太過份了!」
此時雲飛已經抓好數據了,指著屏幕,讓天玄只得『氣得向他道謝』。
宇成看著屏幕問:「雲飛,這就是所謂的SQL隱碼攻擊?」
雲飛點頭說:「是的,沒有錯!所謂的SQL隱碼便是利用程式寫作和語法上的漏洞造成的意外結果。通常利用這種辦法,可以創造出意想不到的效果!我以前和你說過,利用網頁的參數傳入非預期的值不算什麼,而再上去,則是要懂得將對方主機的數據給取出來。」
宇成點頭說:「嗯、嗯、我記得!前者的手法就像天玄一樣,而後者的手法則和明昂一樣厲害!」
天玄聽了氣得問:「喂!這是什麼意思?為什麼要把我和那混蛋扯在一起?」
雲飛不理會天玄的憤怒繼續說:「而SQL隱碼則是利用前者達到後者的技術!」
宇成聽了問:「這又是非正規技術嗎?」
雲飛點頭說:「沒有錯!因為是在正常手法之外的方式,所以是非正規技術!」
天玄大喊一聲:「啊!!!!!」
宇成嚇了一跳摀住耳朵罵道:「天玄,你沒事喊那麼大聲做什麼?」
天玄生氣的說:「你們在那裡講些什麼啦!我完全不懂啊!」
雲飛用輕蔑的語氣說:「小子,你不是想要學習技術嗎?那就給我仔細的聽啊!」
天玄暫時平息怒氣道:「好吧!那你說,什麼利用前者達到後者的是啥意思。」
雲飛指著屏幕說:「你們看,我在用戶名密碼的框框裡輸入的不是正確的數據吧!」
宇成和天玄轉頭看著屏幕說:「嗯,這看起來很像是邏輯判斷式嘛!」
雲飛又打開一個網頁說:「再看這個!這是一個網頁利用表單元件將輸入的數據傳送到後端主機處理的範例,他會收集這兩個inputtype為text的輸入項,然後透過formaction指定的路徑傳遞參數。」
宇成點頭表示明白這些,但天玄卻仍不是很懂,這對他而言還是有點困難的。
雲飛切換頁面,換到傳遞參數到該路徑的處理頁面檢視原始碼說:「你們看,在這裡有一些if判斷式,它會判斷這個用戶名與密碼是否符合管理者要素!其中一個變量rootid[result1]是利用迴圈從數據庫中讀取每一筆用戶名數據出來判斷,當判斷通過後再進入第二個判斷式迴圈讀取數據庫中的密碼判斷是否正確。」
天玄舉手說:「等一等!如果是這樣的話,輸入那些邏輯判斷怎麼會通過?」
雲飛問:「你看看or1=1的結果應該是true或false?」
天玄說:「喂,太瞧不起我了吧?誰都知道1=1啊!這結果當然是true!」
雲飛點頭說:「看來你還有點救!接下來,在判斷式中假設用戶名為paul而密碼為qq則判斷式的成立應該是當if用戶名==『paul『以及if密碼==『qq『對吧?因為在SQL語法中單引號內括字元字串。」
天玄開始瞭解而說:「這樣講我當然明白!可是和or1=1又有何關聯?」
雲飛便說:「你看!假如我們輸入if用戶名==『paul『這裡改成if用戶名==『xxx『本來應該是錯誤的,因為沒有xxx這個用戶名在!可是若輸入『or1=1『變成if用戶名==『xxx『or1=1『『時,因為有一個『或』運算or在,就算沒有用戶名,但判斷到『或1=1』時卻會通過!我們知道AND要兩者都成立,而or只要其中一個成立,所以在某些情況下會通過檢查。而若反過來輸入數據被放在==之前則可以輸入1=1or來變成if1=1or『xxx『==『paul『,同樣判斷到1=1就會通過了。」
天玄拍手恍然大悟道:「天呀!真是高招!我終於開竅了!」
宇成也瞭解道:「原來如此,這就是所謂的SQL隱碼啊!果然很危險!」
雲飛卻搖搖頭說:「不然,這並非是絕對的好方法!這次之所以能成功,是因為寫這個網頁的人疏忽漏掉很多東西,比如過濾掉單引號!如果對方的程式寫了過濾單引號的程式加以檢查,這方法就不會成功了。而且,剛剛所講的只是基本的理論,實際使用上要視不同網頁程式寫法,嘗試各種SQL語法。」
天玄拚命點頭說:「是!是!好,這樣我就知道要怎麼跟小紅說了!」
雲飛轉頭看著宇成說:「怎麼樣?你還是對這些東西很有興趣,對吧?」
宇成不願正面回答,便說:「我只是想到『信息安全』的重要性罷了!畢竟,如果這麼簡單就可以攻擊的話,那我們的數據存在網路上一點也不安全!」
天玄被激勵而說:「宇成,你在胡說什麼啊?網路本來就是一個公開的地方,既然有心要把數據放在上面,當然就沒有絕對的安全啊!所以被入侵,是自己的防護不夠周全的關係。你想想,不鎖好門而被偷東西,該怪誰?」
宇成心中突然又閃過一道光,心想:「是這樣子嗎?沒有鎖好門的人也有錯嗎?」
雲飛喝了口水說:「那麼,接下來是編碼的問題吧?」
天玄又拚命點頭的說:「對,拜託你了,雲飛大大,不,超級大大大!」
雲飛說:「你聽好了,所謂的編碼就是將數據編輯成一連串的二進位碼,而加密則是不以直接的方式解碼,必需要用特殊的規則或演算法去解出來。」
天玄點點頭說:「喔∼是這樣子啊?不過我還是不懂,可以說得更俱體一點嗎?」
雲飛便在屏幕上打了幾個字:B746、A741、A6D1、A5C0。
天玄疑惑的問:「這個...這個是什麼意思啊?」
雲飛邪笑著說:「你用『內碼輸入法』在姓名欄輸入那四組字碼就知道了,哼!」
天玄好奇的打上去,卻發現是一句不勘入目的話,甚是生氣的說:「太過份啦!」
宇成捧腹大笑道:「哈哈哈!天玄.擺了一道喔!」
雲飛轉身打字說:「好了,沒時間讓你當小丑了,得快點讓你明白才可以。」
天玄氣憤的罵道:「喂!這到底是誰造成的啊?」
雲飛說:「你看,以B746這個字碼為例,解析成二進位後會變什麼?」
天玄拿出筆算後說:「是1011011101000110啊!」
雲飛便說:「假如我們把它的編碼往左移兩位,就成了1101110100011010對吧?最左邊的兩位10因為左移所以會跑到最右邊去。此時再組合回十六進位就會變成DD1A這個碼,和原先的B746不同了對吧?但只要右移又恢復了!」
天玄點頭說:「我懂了,我懂了!只要事先制定一套規則演算法,就可以讓字碼在網路上傳遞時屬於被修改過的方式,保護數據傳遞中的安全性。而收到的人如果不懂得演算規則,他就沒有辦法還原回原來的數據了!」
雲飛又說:「但是只有簡單的位移,還是容易被看出來。所以,演算的方式往往要依賴一些公式去計算!B746二進位碼中有1的位元是15,13,12,10,9,8,6,2,1。」(二進位碼的位元位置編號為15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
雲飛換個畫面接著說:「假如不在乎文件大小,可以編碼成9FDCA98621,其中前面的9代表讀取下面幾組位元,而FDCA98621代表第幾個位元為1。因為是9,所以會讀取九組二進碼,從F一直讀到1為止,在1的後面一個碼則是代表下一個字由幾組碼構成。當然,因為開頭的9可以知道後面九個碼都代表同一個字碼的第幾個位元為1,所以就算不按順序,亂數排成9C89A6DF12也無所謂,還原計算回來後都一樣代表15,13,12,10,9,8,6,2,1位元為1,更能保障安全。」
雲飛又說:「利用演算的方式,也可以抽出BIG-5碼的四個十六進位數字單獨做加減,比如B746用B+1、7-1、4+2、6-2的方式編碼成C664,等到要解碼時再重新加減回去變C-1、6+1、6-2、4+2還原回B746。」
天玄又問:「如果這樣做的話,那恰好被猜出幾個字來,不就可以全部解出來了?」
雲飛冷笑道:「你以為編碼的人會這麼笨嗎?多重編碼方式,每個字可以用不同的編碼規則,然後以文件檔頭的隱藏位元做運算式。配合不同的排列規則,往往直接解是解不出什麼東西來的。不過這些還算是下乘的東西,真正上乘的....」
此時,雲飛的計算機上閃起新郵件訊息,雲飛便先打開看。附加檔是一個加密演算過後的文字檔,是明昂傳給他的私密訊息,便邪笑道:「編碼的活教材進來了!」
不知道這封訊息裡面是什麼?...待續