之前在網上經常看到很多的CTF的練習平台,在加上搞CTF比賽的學弟推薦了這個 CTF平台 。當時在網上看了一下,這個平台推薦的人還是很多的。這個平台是由一個白帽子個人開發的一個平台。趁著這個平台還沒有關閉的時候,我抓緊時間來練習一下,找找做CTF比賽的感覺,同時也提升我的滲透能力。當我千辛萬苦地做完了之後,發現網上還沒有人寫這個練習平台的writeup,於是我決定記錄下我的做題過程。一方面是為了能夠協助做題遇到困難的同學們,另一方面也是記錄我的成長過程。
第一關
第一關很簡單,根據題目的提示key藏在頁面中。做CTF比賽的題目,第一步就是要查看網頁的原始碼,查看原始碼就可以發現key。
第二關
第二關的提示是:
有時候網頁源碼並不是唯一可以隱藏資訊的。
除了看原始碼之後,很多時候還要看題目與分伺服器之間發送的網路請求包。這道題目中,key就藏在了網頁的響應包中。
Key:SDUH@HEADER
這道題目要求對HTTP協議有一個基本的瞭解和認識。知道HTTP的請求報文和響應報文的格式,以及每個欄位所代表的含義,哪些欄位是必須的等等知識。
使用PHP來設定header也是十分地簡單
header("Key:SDUH@HEADER");
第三關
第三關的提示是:
right,但還是有地方可以隱藏資訊
這道題目就需要使用到burpsuite這個白帽子都很熟悉的工具了。
從中可以看到,Cookie中的值為give_me_key的值為no,將其改為yes,然後轉寄。在頁面中就可以看到了key。
$('#key').val("0fC00k13@sc")
這個題目同樣是需要看請求包的,不同的是這個題目需要看的是cookie。同時這個題目還告訴我們,在瀏覽器和伺服器進行通訊的過程中,我們還可以使用各種攔截工具,如burosuite,fiddle,firefox外掛程式Tamper Data來進行修改。
第四關
第四關中給出了網頁的原始碼。
if (isset ($_GET['getkey'])) { if (@ereg ("^[1-9]+$", $_GET['getkey']) === FALSE) echo '必須輸入數字才行'; else if (strpos ($_GET['getkey'], 'givemekey') !== FALSE) die('Flag: '.$flag); else echo 'getkey姿勢不對啊';}
這段代碼中有2個函數。
@ereg(string pattern, string string):以patttern的規則來解析字串string,如果解析成功返回True否則返回FALSE;
strpos(str1,str2):尋找str2在str1的位置,如果找到返回True否則FALSE;
從代碼中我們知道,這道題目要求輸入getkey,但是這個值首先必須要是數字,然後這個值又必須含有givemeky這個字串。這道題目需要用到 ereg()函數的%00字串截斷漏洞 。具體就是當ereg讀取字串string時,如果遇到了%00,後面的字串就不會被解析。那麼我們輸入的字串為: getkey=1%00givemekey 。這樣就可以繞過驗證,拿到key。 Flag: m4g1c@ppp
第五關
第五關給了一張圖片。
遇到這樣的題目,一般都是資訊隱藏。需要查看圖片中隱藏的資訊。我們使用UltraEdit開啟圖片,發現圖片後面有一句話。 Hero's Name Add 666 。key為 LeBlanc6666
第六關
這關給的是一個壓縮包。提示如下:
壓縮密碼很短也很簡單,秒秒鐘破,不過你知道key可以藏在圖片的哪裡嗎?
這個題目說了密碼很短,找一個rar的密碼爆破軟體,得到解壓密碼是0oO。解壓之後同樣得到的是一個這樣的圖片。之前已經說過了,遇到了圖片的題目一般都是資訊隱藏的題目。要麼是在圖片中隱藏了資訊,要麼是在圖片中包含了其他的檔案。在這個題目上,我之前的思路受到了限制。第五題中已經在圖片中包含了資訊,那麼我認為這題應該是在圖片了包含了檔案。最後我使用了 binwalk 來對圖片進行分析,發現其中確實是包含了檔案,但是始終找不出key。後來詢問作者才知道,這道題目的key其實很簡單,就隱藏在了圖片的exif資訊中。
在著作權資訊中,有 65 83 77 68 68 64 49 48 ,轉換為字母是 ASMDD@10 ,這個就是key。
第七關
第七題給出的題目的形式如下:
http://3.hackit.sinaapp.com/index.php?file=flag.php
提示是:
Key就在這個頁面,不是headers也不是cookie,如果你知道如何讀取這個php的源碼,key就是你的了
這道題目就是一個典型的檔案包含的題目,而且這道題目還需要讀取檔案的原始碼。這篇 php檔案包含漏洞 中的題目和本題的題目大致相同。那麼我們就使用使用下面的代碼來顯示頁面的原始碼。
http://3.hackit.sinaapp.com/index.php?file=php://filter/read=convert.base64-encode/resource=flag.php
網頁返回的原始碼base64編碼代碼如下:
PD9waHAKLy9LZXk6QTg5c2FkU0QKPz4KPGgzPktleeWwseWcqOi/meS4qumhtemdou+8jOS4jeaYr2hlYWRlcnPkuZ/kuI3mmK9jb29raWUs5aaC5p6c5L2g55+l6YGT5aaC5L2V6K+75Y+W6L+Z5LiqcGhw55qE5rqQ56CB77yMa2V55bCx5piv5L2g55qE5LqGPC9oMz4=
解碼之後得到key為 Key:A89sadSD
第八關
將檔案下載之後發現一個C#編寫的exe程式,那麼就是一個簡單的逆向的題目。使用C#編寫的程式,就可以直接使用 IISpy 來看原始碼。找出其中的關鍵代碼如下:
string text = string.Empty;for (int i = 0; i <= this.username.TextLength; i++){string arg_A5_0 = text;short num = (short)Encoding.ASCII.GetBytes(this.password.Text[i].ToString())[0];text = arg_A5_0 + num.ToString();}if (text.Equals("837450777811510050")){MessageBox.Show("right!the password is flag!");}else{MessageBox.Show("Error! Try Again");}
其中關鍵的就在於 (short)Encoding.ASCII.GetBytes(this.password.Text[i].ToString()) 。這段代碼就是去除password中的每一個字元,然後獲得字元的ACSII碼,看最後的ASCII碼為 837450777811510050 ,我們得到對應的password為SJ2MNsd2。這個就是key了。
最後,就進入了最後的 闖關成功頁面
當自己一路走來,最終到達了這個頁面的時候,我還是比較興奮的,就像是玩遊戲最後通關的感覺一樣。雖然總體說來這個上面的題目不是很難,其實比較適合剛剛入門CTF比賽的新手,我感覺這個平台上面的題目我也恰好比較適合,在這個平台上面我也學到了很多,尤其是圖片的隱寫技術。做完了這個平台上面之後,我後來做WHCTF(可以看這篇文章)上面的題目時遇到的圖片題目,我還是能夠動手的。一段旅途走完了之後,總會有新的收穫的。通過這個平台,我學習了很多,我也意識到我需要學習和瞭解的內容還有很多。路漫漫其修遠兮。
最後非常感覺作者提供了一個這樣好的平台,讓我這樣的菜鳥有一個好的練習的地方。最後附上作者的blog地址。 sco4x0’s blog