第66部分(第3/4 頁)
主機的資料給取出來。」
宇成點頭說:「嗯、嗯、我記得!前者的手法就像天玄一樣,而後者的手法則和明昂一樣厲害!」
天玄聽了氣得問:「喂!這是什麼意思?為什麼要把我和那混蛋扯在一起?」
雲飛不理會天玄的憤怒繼續說:「而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語法。」
天玄拼命點頭說:「是!是!好,這樣我就知道要怎麼跟小紅說了!」
雲飛轉頭看著宇成說:「怎麼樣?你還是對這些東西很有興趣,對吧?」
宇成不願正面回答,便說:「我只是想到『資訊保安』的重要性罷了!畢竟,如果這麼簡單就可以攻擊的話,那我們的資料存在網路上一點也不安全!」
天玄被激勵而說:「宇成,你在胡說什麼啊?網路本來就是一個公開的地方,既然有心要把資料放在上面,當然就沒有絕對的安全啊!所以被入侵,是自己的防護不夠周全的關係。你想想,不鎖好門而被偷東西,該怪誰?」
本章未完,點選下一頁繼續。