上回談了一些有關奪旗賽 (CTF) 基本技術知識要求和我對奪旗賽的個人觀點後。今回我想討論一下如何獲得有關基本技術知識要求和如何豐富解題的思路。
在未討論以上問題前,我想談一下如何入門?有很多人 (包括菜鳥) 都對我說,多參加比賽、多看別人的解題 (Writeups),你就會學到很多了。嗯!這不是揠苗助長嗎?這正如訓練不足的戰士上戰場戰鬥,這與自殺無疑?這必定是浪費時間、資源,並且事倍功半吧!如果你根本未有相關基礎知識,那些解題 (Writeups) 你看得懂嗎?瞭解嗎?所以欲速則不達,要按步就班,循序漸進。
我個人認為首先選擇其中一個類型學習,深入瞭解,包括它的相關知識,例如「利用」(PWN) 類型,你首先需要學習組合語言、C 語言、Python 語言,其後就是後門編寫、調試器 (GDB,Debugger) 的使用等。當你有了這些基礎知識後,你就需要學習「利用開發」(Exploit Development)。當你可以掌握以上技術後,你就可以開始參加比賽,閱讀別人的解題 (Writeups) 了。我覺得這才是正確的方向來學習和參與奪旗賽。
至於如何豐富思路,舉例說「利用」類型,在奪旗賽中幾乎所有的庫 (Library,Libc) 都是特製的,有很多現實環境中可以使用的功能都被閹割了,你只能用一種方法去完成解題,所以你必需要學習所有「利用開發」的方法、技巧、技術等以豐富你的思路。又如果你對「利用開發」越瞭解、越清楚,你的解題思路就越清晰,這都需要玩家對該專案的基礎知識的瞭解要求相當高。
當你知道越多,你會發覺其實你知道的就越少!
Samiux
OSCE OSCP OSWP
二零二一年四月廿五日,中國香港
來源來源(簡體中文版本) :https://samiux.github.io/ctf_noob_2.html