點進這篇文章的你,大概是想知道 到底怎樣才能入門 CTF?
網路上的建議常常是「就常打比賽阿」、「有很多線上練習站阿」,諸如此類的,
但是打比賽,那些題目都有一定的難度,對一個新手來說真的不太友善,而且能不能找到隊友都是一個問題了...QAQ
線上練習站,很多也都講得不清不楚,提示也給得很少,就只給你一個目標,然後要你「通靈」去破解它....
因此,這篇會嘗試分享一下我個人是怎麼入門的,以及給出一些建議。
我是先學了資安概論,對於基本的資安有大方向的理解,包括密碼學、網頁/網路安全、常見攻擊手法等。
然後也學了作業系統,理解了程序、權限管理、.data/.text/Heap/Stack 等觀念,當然也學了組合語言。
其實我是已經學了不少東西才入門的,還包括了一些 HTML、JS、PHP 以及一些 Linux 指令。
最後一步,是有前輩的意見和指點,才能順利入門。
(入門以後,還上了 CTF 相關的課程,受益良多)
分享完我自己是如何入門的以後,接下來會提供一些給新手的建議~
如果你也想入門 CTF,你並不需要像我一樣學這麼多「先備知識」才來碰它;
相反的,我覺得比較好的方式應該是一邊碰、一邊學;問題導向比較有驅動力,再說也沒有 "學完了" 的那一天。
一點點基礎知識通常是需要的,所以建議先對資安有概論性的理解,
然後 CTF 相關的課程也會有幫助(見底下 "知識" 小節)
在開始之前,我想先送你一句話,那就是「要投入夠多的時間,你的 CTF 能力才會變強」
高手都是花很多時間功夫才成為高手的。
然後多去查相關資料,補充新知識,來打敗難題!
練習
對於該從哪裡下手,我首先會推薦 PicoCTF。
別看它標榜是給中學生,它的題目可是很不錯的!
註冊完以後,按 Challenge Problems 就可以瀏覽各種類型的題目。
它的題目都是階段性的,也就是說不會一次看到全部的題目,要解完一題才會跑出相關的進階題~
如果你希望更基礎一點的話,我會推薦 OverTheWire 的 Wargames。
舉例來說,Bandit 系列,它的 Level 0 就是要你使用 SSH 遠端登入。
你如果不知道 SSH 是什麼,它的提示頁上面有附一些文章連結,還會給一些 "可能會用到的指令",
通常你會用到的就是那上面的其中一個,當然你也可以去 Google 那些指令,去了解更多相關資訊。
它的 Vortex 跟 Semtex 系列也滿友善的,其他就比較還好。
如果你已經有 reverse + pwn + BOF 經驗的話,你也可以玩玩看 Pwnable.tw。
通常,CTF 的題目會分為 reverse、pwn、crypto、web 以及其他。
reverse 就是跟執行擋以及組合語言打交道;pwn 則是 reverse 的進階課,要入侵對方主機;
crypto 是在玩密碼學;而 web 則是網頁前端 (eg. JS) 跟後端 (eg. PHP) 的漏洞。
知識
資安概論 可以讓你有全盤的理解,而 "Hacking Exposed: Network Security Secrets and Solution" 通常會是其指定用書。
Erickson 的 "Hacking: The Art of Exploitation" 也不錯,它是比較偏實務導向的書。
組合語言 也是重要的能力,reverse 跟 pwn 都會用到。(學 x86/amd64 的,那些才是現實中會用到的)
如果要玩 BOF、pwn,一定要了解 Stack frame 以及 Calling convention,
這部分有一些 CTF 相關的課程可以參考,像是 RPISEC 的公開課程,或是許富皓老師的課程。
交大的 CTF 社群 Bamboofox 也有豐富的社課資源。(他們的題目也很棒)
玩 web 的話需要了解 HTTP 協定、前後端的語言 (JS/PHP)、SQL 等等,適合有在寫網站的人(沒有的話也可以順便學XD)
玩 crypto 的話需要了解 RSA 以及一些奇奇怪怪的加密方式XD
知識的部分,我覺得 這個投影片 是不錯的總攬。
最後,有前輩可以問也是滿不錯的,特別是遇到題目解不開時,
所以建議加個社群,像是 這裡 就提到滿多的台灣社群。
以上就是關於如何入門 CTF 的簡單介紹囉~