Input validation, SQL Injection, WarGame 2 - Steve

第六組:

401261102 顏嘉村

401261449 王思涵

401262584 周思妤

 

綱要:

1.  GAME#1 - LEVEL 3

    1.1 開啟Unix/Linux

    1.2 愷薩加密法

2.  GAME#1 - LEVEL 4

3.  GAME#1 - LEVEL 5

    3.1 資料庫隱碼攻擊(SQL Injection)

 

 

1.  GAME#1 - LEVEL 3

這題的提示,讓我先下載 "level3.dat"這個檔案

以及這句:"unix makes your life easy"

提示了我們,可能可以用unix來開啟這個檔案

 

1.1  如何開啟Unix/Linux

  1. 任一網路上免費主機如:LionFree、Heroku等
  2. UnxUtils
  3. Cygwin
  4. Virtual Machine 

 

以Cygwin 為例
首先,前往官網去下載,連結
下載下來後,安裝完就能用了,他會產生一個資料夾,可以當作一個專屬於Unix環境的空間。

然後我們就把題目所給的 level3.dat 給放進去,之後打開我們的 Cygwin Terminal。

我們可以在 ' / '發現我們剛剛丟進去的檔案。

在Unix 裡,有個指令叫做 'file',這個指令可以辨別檔案的類型,詳細Wiki

於是我們就鍵入了 file level3.dat,我們可以看到,他回饋給我們的是。

" level3.dat: Zip archive data, at least v2.0 to extract "

出乎意料的,他是個 Zip 壓縮檔。回到Windows,果不其然我們解壓縮後出現了一個資料夾(解壓縮方法不再贅述)。

裏頭有個," ReadMe.txt ",打開後,都是看不懂的句子,但仔細看後發現,有一行滿特別的句子。

" kwws://zzz.hhbh.frp/kwpo/ " 看起來是不是跟一般的網址很像?

例如:" https://www.youtube.com/ "

仔細比對後,似乎也有些規律。k往前三個字母為h,w往前三個字母為t。

原來是愷薩加密法

 

1.2  愷薩加密法
    在密碼學中,愷撒密碼(或稱愷撒加密、愷撒變換、變換加密)是一種最簡單且最廣為人知的加密技術。它是一種替換加密的技術,明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。

經線上服務,Online calculator: Caesar cipher,可以幫你做好解碼。整份文件經解碼後如下圖。

 

 疑??為什麼是Level 6?

原來是數字沒有被解碼到,連同後面的密碼一起。

"Password key For Level 3 is : w8ulP6 " ,恭喜進入下一關。

 

 

 2.  GAME#1 - LEVEL 4

這題的提示為這句," Author wrote script that would email his password to him automaticlly."

觀看網頁原始碼後發現,點了提示下面的那個按鈕後,會執行 " level4email.php " 這個php程式。

 

看似是會傳送出什麼,接著我們試著用 " Burp Suite ",來攔截看看,會得到什麼東西?

 

看起來是會傳送資料到 "unohope@gmail.com",那我們把這個 ' to'的欄位,改成我們自己的email吧,然後點選 ' Forward'。

接著我們就在信箱收到信了!

這題提到,當我們在接收資料的時候,如果沒有去對我們的內容加以做驗證,很有可能就會被竄改。

 

 

3.  GAME#1 - LEVEL 5

 

這題的提示為這句,"I never metacharacter I did not like ;)"

看樣子作者不太喜歡符號,那我們就打一個單引號進去密碼試試看吧。

果不其然效果驚人,馬上得到錯誤。

"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /game1/level5/index5.php on line 36"

 

3.1  資料庫隱碼攻擊(SQL Injection)

      簡而言之是,在輸入的欄位中夾帶SQL語法,然後程式本身沒有去檢查到,資料庫即當成正常的指令去執行,因此遭到攻擊。

      其中比較多的原因是,太過於信任使用者所輸入的資料,未限制輸入的字元數,以及未對使用者輸入的資料做潛在指令的檢查,像是單引號就為語法結束的字元,兩個「-」即為註解,如果沒有對此做輸入防護的話,將很容易地會被竄改原本的SQL語法。

      比較常見的防護方法像是,處理輸入的特殊符號等,或使用參數化查詢(Parameterized Query)。在需要輸入數值以及資料的地方,改以參數來給值,事先定義好所有SQL語句,再傳入參數。

 

      說到這裡,這題就在Password上打,「' or 1=1-- 」吧。 前面單引號為讓指令提早結束 後面 為 true 在後面兩個 「-」為後面的語句全部註解。恭喜進入下一關!