CTF入門全攻略:從五大方向到靶場練習(xí)路線)
在技術(shù)圈里CTF這幾年是真火但很多剛接觸的朋友普遍有一個(gè)感覺資料太散了。今天搜到一個(gè)WP明天看到一個(gè)工具推薦后天又有人推薦一個(gè)靶場信息全是一塊一塊的根本串不起來。我早年入門的時(shí)候也這樣?xùn)|拼西湊摸索了大半年才把整個(gè)知識框架搭起來中間走了不少彎路。所以這篇東西我想了很久決定不搞那些虛的直接把零基礎(chǔ)入門CTF最該知道的東西一次性捋清楚——從CTF到底是什么、比賽有哪些形式到Web、Pwn、逆向、密碼學(xué)、雜項(xiàng)這五個(gè)方向分別學(xué)什么、練什么再到推薦哪些靶場、裝哪些工具、怎么做學(xué)習(xí)筆記。你照著這條路線走能少花很多冤枉時(shí)間。先說清楚這篇文章適合誰看。如果你是完全沒有接觸過CTF的小白也基本沒寫過代碼那我建議你不要急著刷題先花點(diǎn)時(shí)間把基礎(chǔ)概念搞明白這篇文章會一步步告訴你每個(gè)階段該干什么。如果你已經(jīng)學(xué)過一些編程或者接觸過網(wǎng)絡(luò)安全的基礎(chǔ)知識那你可以直接跳到對應(yīng)方向的部分把工具鏈和靶場路線吃透。這篇文章不適合誰看不適合那種想靠看一篇指南就變成大佬的人CTF這種事情最終還是得靠手上功夫文章只能幫你少走彎路不能代替你敲鍵盤。1. CTF入門前的核心認(rèn)知比賽形態(tài)與選手分工1.1 CTF到底考的是什么為什么值得花時(shí)間CTF全稱Capture The Flag翻譯過來就是奪旗賽。比賽的核心邏輯很簡單主辦方在一堆事先設(shè)計(jì)好的題目環(huán)境里藏了flag字符串你的任務(wù)就是通過各種技術(shù)手段把flag找出來提交拿到分?jǐn)?shù)。聽起來像是黑客攻防游戲但實(shí)際上它是一項(xiàng)非常體系化的信息安全能力競技。早期CTF更偏向于“破解”的概念題目類型比較單一主要是二進(jìn)制逆向和漏洞利用。發(fā)展到現(xiàn)在比賽形式已經(jīng)豐富了很多主流題目方向通常分為五類Web安全、逆向工程、Pwn二進(jìn)制漏洞利用、密碼學(xué)、雜項(xiàng)Misc另外還有一類近年新起的區(qū)塊鏈方向但上手門檻較高入門階段可以先不碰。為什么建議零基礎(chǔ)的人用CTF來入門網(wǎng)絡(luò)安全因?yàn)镃TF的學(xué)習(xí)路徑是高度目標(biāo)驅(qū)動的——你解題得到flag有即時(shí)的正向反饋。這跟你看一本書從頭啃到尾是完全不同的體驗(yàn)。我在實(shí)際帶人的過程中發(fā)現(xiàn)很多完全沒寫過代碼的新手反而是通過打CTF題先理解了HTTP協(xié)議、二進(jìn)制文件結(jié)構(gòu)這些底層概念然后再回頭去補(bǔ)編程基礎(chǔ)的。所以如果你對網(wǎng)絡(luò)安全有興趣又擔(dān)心自己基礎(chǔ)不夠不妨直接用一種“解題驅(qū)動學(xué)習(xí)”的思路來入門效率會比死磕書本高很多。1.2 AWD、解題賽與滲透測試的真實(shí)區(qū)別很多新人分不清CTF和滲透測試的關(guān)系這里必須做一個(gè)明確區(qū)分。CTF里的Web方向題目比如SQL注入、文件上傳、命令執(zhí)行本質(zhì)上是在一個(gè)極其理想化的環(huán)境里考察某個(gè)單一漏洞點(diǎn)。而真實(shí)滲透測試中的Web攻擊往往要面對的是復(fù)雜的業(yè)務(wù)邏輯、WAF過濾、內(nèi)網(wǎng)橫向滲透等一系列現(xiàn)實(shí)問題。所以CTF練的是“單點(diǎn)突破的能力底子”滲透測試是“綜合應(yīng)用的場景實(shí)踐”前者是后者的必經(jīng)之路但不能畫等號。比賽形式方面入門階段你主要會碰到三種傳統(tǒng)解題賽Jeopardy所有題目掛在平臺上分方向分難度選手自己做題拿分適合新手訓(xùn)練和團(tuán)隊(duì)磨合。AWD攻防賽Attack With Defense每個(gè)隊(duì)伍維護(hù)自己的靶機(jī)既要修補(bǔ)漏洞防住別人攻擊又要寫出利用腳本打別人非常激烈一般適合有一定基礎(chǔ)后再參加。滲透實(shí)戰(zhàn)賽給你一個(gè)模擬的真實(shí)業(yè)務(wù)環(huán)境要求在限定時(shí)間內(nèi)拿到指定數(shù)據(jù)題目偏綜合通常面向有經(jīng)驗(yàn)的選手。對于零基礎(chǔ)新人建議從解題賽開始先在單一方向建立信心把每類題目的常見套路摸清楚。不要一上來就報(bào)AWD那種模式對新手很不友好容易被打到懷疑人生。2. 零基礎(chǔ)入門路線拆解從搭環(huán)境到掌握五個(gè)方向2.1 環(huán)境準(zhǔn)備這些基礎(chǔ)工具提前裝好能省一個(gè)月時(shí)間工欲善其事必先利其器這句話在CTF里特別真實(shí)。我給所有跟我一起學(xué)習(xí)的朋友都建議過一個(gè)最小化起步工具清單先把這幾樣裝好其余工具等做題過程中缺什么再補(bǔ)什么千萬別一上來就裝一大堆結(jié)果一個(gè)都用不熟。首選操作系統(tǒng)方面我建議直接用Kali Linux或者退一步用Ubuntu虛擬機(jī)。Kali里預(yù)裝了大量的安全工具最關(guān)鍵的是省去了很多環(huán)境配置的麻煩。我自己早期直接在Windows上做過題后來發(fā)現(xiàn)很多工具在Linux下跑起來確實(shí)更順比如后面會提到的Pwntools、GDB插件這些在Windows下配置成本實(shí)在太高。裝系統(tǒng)這件事上我給的建議是能用虛擬機(jī)就別雙系統(tǒng)VMware或者VirtualBox都行等你真的確定要走這條路了再考慮物理機(jī)安裝。編程基礎(chǔ)方面至少要把Python學(xué)明白。CTF里Python是最通用的語言寫腳本跑爆破、處理數(shù)據(jù)、調(diào)Pwntools接口全靠它。不需要學(xué)到多深的程度列表、字典、文件讀寫、requests庫、subprocess調(diào)用這幾個(gè)點(diǎn)能熟練使用就夠了。另外建議補(bǔ)一點(diǎn)Linux命令行基礎(chǔ)比如文件權(quán)限、進(jìn)程管理、網(wǎng)絡(luò)端口查看這些幾乎每道題都會用上。2.2 Web方向入門從HTTP協(xié)議到常見漏洞利用Web方向是新手最推薦優(yōu)先接觸的方向原因有三個(gè)一是它不像Pwn和逆向那樣需要很強(qiáng)的底層基礎(chǔ)二是Web方向的知識在日后工作中轉(zhuǎn)化率最高三是Web題目的反饋?zhàn)钪庇^你在瀏覽器里改個(gè)參數(shù)可能就拿到flag了正反饋非常強(qiáng)。Web方向的核心知識鏈?zhǔn)沁@樣的先搞懂HTTP協(xié)議的基礎(chǔ)包括請求方法、請求頭、Cookie機(jī)制、狀態(tài)碼這些然后學(xué)習(xí)前后端交互的基本邏輯知道參數(shù)是從哪里傳遞到哪里的接著再逐個(gè)學(xué)習(xí)常見漏洞類型。對于新手優(yōu)先級最高的漏洞類型是SQL注入、XSS跨站腳本、文件上傳、命令執(zhí)行、SSRF、反序列化。以SQL注入為例它的核心本質(zhì)是開發(fā)者沒有對用戶輸入做過濾導(dǎo)致輸入的惡意SQL代碼拼接進(jìn)了后端查詢語句。新手學(xué)習(xí)時(shí)不應(yīng)該只背工具用法而是應(yīng)該手工先試一遍聯(lián)合查詢注入的完整流程判斷注入點(diǎn)、確定字段數(shù)、查庫名、查表名、查字段名、拿數(shù)據(jù)。這個(gè)“手工走一遍”的過程能幫你建立非常扎實(shí)的漏洞利用思維而不是只會丟一個(gè)sqlmap上去。學(xué)Web方向的實(shí)操建議先把靶場里的簡單題刷到30道以上不追求速度每一道題做完都要在筆記里寫明漏洞成因和利用流程。我見過太多人刷題只刷數(shù)量結(jié)果做完就忘下次碰到同樣的知識點(diǎn)還是不會。2.3 Pwn與逆向方向讀懂底層才能掌握主動權(quán)Pwn和逆向通常被新手視為“勸退方向”因?yàn)檫@兩個(gè)方向確實(shí)需要一定的計(jì)算機(jī)底層知識。但我個(gè)人認(rèn)為如果你想在CTF這條路上走得更遠(yuǎn)哪怕最終主攻Web也值得了解一些二進(jìn)制方向的基礎(chǔ)概念。Pwn方向的核心是漏洞利用常見題型是棧溢出、堆溢出、格式化字符串等最終目標(biāo)是通過精心構(gòu)造的輸入數(shù)據(jù)控制程序執(zhí)行流程拿到shell或者讀取flag文件。學(xué)Pwn需要掌握的知識包括C語言內(nèi)存模型、函數(shù)調(diào)用棧結(jié)構(gòu)、匯編語言基礎(chǔ)x86和x64、GDB調(diào)試器的使用、ELF文件格式。逆向方向的核心是分析和破解常見題型是把一個(gè)可執(zhí)行程序進(jìn)行反編譯分析理解其加密算法或驗(yàn)證邏輯從而寫出對應(yīng)的解密腳本。新手練習(xí)逆向建議先學(xué)會用IDA或者Ghidra打開一個(gè)簡單的二進(jìn)制文件看懂main函數(shù)的基本邏輯然后逐步接觸更復(fù)雜的混淆和反調(diào)試技巧。這里我特別想提醒一點(diǎn)不要因?yàn)橛X得Pwn和逆向“看起來很難”就直接放棄。我在實(shí)際學(xué)習(xí)過程中發(fā)現(xiàn)只要把C語言指針和函數(shù)調(diào)用棧這兩塊搞明白很多Pwn入門的棧溢出題是可以看懂的。建議新手在入門階段花一兩周時(shí)間認(rèn)識一下寄存器、棧幀、匯編指令這些基礎(chǔ)概念不求精通但求不陌生。這樣一來后續(xù)哪怕你主攻Web方向在遇到需要逆向分析惡意樣本或者調(diào)試程序時(shí)也不會無從下手。2.4 密碼學(xué)方向數(shù)學(xué)很重要但新手先掌握套路密碼學(xué)方向在很多新人眼中容易走偏以為要先學(xué)習(xí)高深的數(shù)學(xué)知識才能做題。實(shí)際上CTF中的密碼學(xué)題目更偏向于“密碼分析”的套路應(yīng)用對數(shù)學(xué)的要求遠(yuǎn)沒有想象中那么高當(dāng)然想進(jìn)階深入學(xué)習(xí)那就另說了。CTF密碼學(xué)常見題型包括編碼轉(zhuǎn)換Base64、Hex、URL編碼等、古典密碼凱撒、維吉尼亞、柵欄等、現(xiàn)代密碼RSA、AES、DES等、以及一些哈希長度擴(kuò)展攻擊、偽隨機(jī)數(shù)預(yù)測等進(jìn)階題型。新手入門密碼學(xué)第一步是要學(xué)會“識別”看到一串字符串能快速判斷出它大概是什么編碼或者什么加密方式。這一步練好了很多送分題你一眼就能解出來。第二步要熟練使用CyberChef這個(gè)工具它的英文名叫“網(wǎng)絡(luò)安全廚刀”可以理解成一個(gè)魔法般的在線數(shù)據(jù)轉(zhuǎn)換工具箱支持幾百種編碼、加密、解析操作拖拽式操作非常方便80%的密碼學(xué)送分題都能在里面解決。第三步才是針對RSA等算法的專項(xiàng)學(xué)習(xí)。RSA題目的常見攻擊方式有低加密指數(shù)攻擊、共模攻擊、已知p和q求私鑰等。新手先不要去看復(fù)雜的數(shù)學(xué)證明而是先用腳本把常見攻擊方式跑通理解每種攻擊適用的場景條件等你刷題量上去了回頭再補(bǔ)數(shù)學(xué)原理那時(shí)理解深度會完全不同。2.5 雜項(xiàng)方向腦洞與敏感度決定得分效率雜項(xiàng)Misc在CTF里是一個(gè)很有意思的“垃圾桶”方向涵蓋范圍極廣文件分析、流量分析、圖片隱寫、音頻隱寫、取證分析、社工等等。這個(gè)方向?qū)A(chǔ)知識的要求相對低但對常識積累和腦洞的要求非常高。新手在Misc方向最容易出現(xiàn)的問題是“我明明知道這道題考的是圖片隱寫但就是沒有思路?!痹蛟谟谀悴恢烙心男╇[寫手法。圖片隱寫常見的有LSB隱寫像素最低有效位藏信息、附加數(shù)據(jù)隱寫、EXIF信息、GIF幀分離等。你只有把這些手法都接觸過一遍看到圖片才會有條件反射。我的建議是新手可以把Misc當(dāng)成“開胃菜”在刷Web方向累的時(shí)候穿插著做幾道順便積累一些文件格式知識和取證工具用法。這方向不用刻意投入大量時(shí)間但保持日常接觸非常重要因?yàn)楸荣悤r(shí)Misc題目往往是最容易拿分的“保底題”。3. 靶場練習(xí)路線從新手村到實(shí)戰(zhàn)賽場的階梯3.1 新手首選靶場推薦與對比學(xué)習(xí)任何技術(shù)都離不開練習(xí)環(huán)境CTF更是如此。下面這幾個(gè)靶場是我個(gè)人和身邊人用得比較多、口碑比較穩(wěn)定的我按難度和適用階段做了區(qū)分。靶場名稱難度梯度適用階段推薦理由BuuCTF低到中入門到進(jìn)階題目量大覆蓋方向全適合日常刷題攻防世界低到中入門到進(jìn)階有專門的新手練習(xí)區(qū)題目分類清晰XCTF社區(qū)中到高進(jìn)階匯集了大量歷年賽題適合模擬真實(shí)比賽Pwnable.tw中到高Pwn專項(xiàng)進(jìn)階Pwn題目質(zhì)量高階梯設(shè)計(jì)合理CryptoHack低到中密碼學(xué)專項(xiàng)交互式密碼學(xué)學(xué)習(xí)平臺題解詳細(xì)本地DVWA靶場低Web入門必做本地搭建適合反復(fù)練習(xí)SQL注入等基礎(chǔ)Web漏洞我在實(shí)際帶新人的過程中一般的推薦順序是先在攻防世界的新手區(qū)過一遍對手感和題型有一定認(rèn)知后再去BuuCTF大量刷題因?yàn)锽uuCTF很多題目是從各大比賽中收集來的難度梯度比較友好。當(dāng)你覺得自己在一個(gè)方向上已經(jīng)比較熟練了再針對性地去專項(xiàng)靶場Pwnable.tw、CryptoHack做拔高訓(xùn)練。3.2 如何制定屬于自己的刷題路線靶場選好了接下來就是路線問題。我自己帶過不少零基礎(chǔ)的朋友發(fā)現(xiàn)一個(gè)普遍規(guī)律凡是瞎刷題的人三個(gè)月后基本還在原地踏步凡是按路線刷題的人三個(gè)月就能達(dá)到中等難度賽題的水平。我給零基礎(chǔ)新人推薦的刷題路線是“先Web后Misc再密碼學(xué)最后按需涉獵Pwn/逆向”。這個(gè)順序的核心邏輯是Web方向的題目最容易建立正反饋Misc方向最有利于積累常識和工具熟練度密碼學(xué)方向需要一定的腳本能力但套路固定Pwn和逆向則放在最后且不需要人人深入掌握。具體來說第一階段前兩周每天做2到3道Web方向的簡單題同時(shí)穿插1道Misc題來調(diào)節(jié)腦回路。第二階段第三周到第六周每天刷1道中等難度的Web題開始接觸密碼學(xué)方向的常見套路。第三階段第七周以后根據(jù)自己的興趣和職業(yè)規(guī)劃選擇主攻方向比如想做安全的可以主攻Web密碼學(xué)對二進(jìn)制感興趣的主攻Pwn逆向然后圍繞主攻方向集中刷題。這里必須提醒一點(diǎn)刷題過程中如果一道題卡了超過兩小時(shí)還完全沒有思路果斷看WriteUp題解看懂之后立刻自己重新做一遍最好能不看題解獨(dú)立復(fù)現(xiàn)。千萬不要死磕CTF的題目數(shù)量是無限的時(shí)間卻是有限的看題解本身也是一種學(xué)習(xí)方式只要你不是看了就忘就行。3.3 團(tuán)隊(duì)訓(xùn)練與個(gè)人練習(xí)的節(jié)奏安排很多新人會問我應(yīng)該自己單練還是找隊(duì)伍一起練我的觀點(diǎn)是前期一定要單練后期必須要有團(tuán)隊(duì)。單練是為了打基礎(chǔ)團(tuán)隊(duì)是為了提上限。前1到3個(gè)月的個(gè)人練習(xí)期目標(biāo)是把五個(gè)方向的常見題型都刷過一遍建立自己的知識框架和筆記體系。這個(gè)階段一個(gè)人的效率其實(shí)是最高的因?yàn)槟憧梢酝耆醋约旱墓?jié)奏安排時(shí)間不受隊(duì)友進(jìn)度影響。3個(gè)月之后當(dāng)你已經(jīng)能獨(dú)立做出一些中等難度的題目就應(yīng)該開始找小隊(duì)了。CTF比賽題目通常數(shù)量多、覆蓋廣一個(gè)人很難在比賽時(shí)間內(nèi)完成所有方向的題目分工協(xié)作幾乎是必須的。團(tuán)隊(duì)訓(xùn)練的方式可以是每周固定時(shí)間一起打一場線上賽賽后集中復(fù)盤每個(gè)人負(fù)責(zé)自己擅長的方向把解題思路講給隊(duì)友聽。這個(gè)過程既鍛煉表達(dá)能力也能幫你發(fā)現(xiàn)自己知識體系里的盲區(qū)——如果你不能把一道題的解法給別人講明白說明你還沒有真正掌握它。4. 常用工具包盤點(diǎn)每個(gè)方向的核心工具與用法示例4.1 Web方向工具鏈從Burp Suite到SQLMapWeb方向最核心的工具也是我建議你花最多時(shí)間搞熟練的就是Burp Suite。它本質(zhì)上是一個(gè)攔截代理工具可以理解成瀏覽器和服務(wù)器之間的“中間人”你能通過它查看和修改所有經(jīng)過的HTTP請求和響應(yīng)這是手工測試Web漏洞的基礎(chǔ)中的基礎(chǔ)。Burp Suite的核心功能我建議按順序掌握Proxy模塊抓包改包、Repeater模塊手動重放請求、Intruder模塊暴力破解和參數(shù)爆破、Decoder模塊編解碼。新手最容易忽略的是Decoder模塊但它在處理各種編碼混淆時(shí)特別好用尤其是碰到多重編碼的參數(shù)時(shí)可以省去你在終端里手動解碼的時(shí)間。SQLMap也是Web方向必備的自動化注入工具但我必須強(qiáng)調(diào)一點(diǎn)SQLMap只能作為輔助不能作為依賴。很多新手學(xué)會SQLMap之后就再也不想手工注入了結(jié)果一到比賽遇到有WAF攔截或者需要繞過的題就傻眼了。正確用法是先手工理解漏洞點(diǎn)再用工具提高效率。其他常用工具還包括dirsearch目錄掃描、Nmap端口掃描、御劍目錄掃描Windows下常用、中國蟻劍Webshell管理。4.2 Pwn與逆向方向工具鏈IDA、GDB與PwntoolsPwn方向最核心的工具組合是Pwntools GDB IDA/Ghidra。Pwntools是Python編寫的一個(gè)漏洞利用開發(fā)框架簡單來說它讓你用Python腳本去構(gòu)造和發(fā)送惡意數(shù)據(jù)從而實(shí)現(xiàn)控制程序流程的目的。新手入門Pwn第一步就是學(xué)會用Pwntools連接到遠(yuǎn)程題目環(huán)境這是幾乎所有Pwn題的通用前置動作。下面這段代碼是最典型的Pwn題連接代碼幾乎每次做題都會用到建議直接收藏from pwn import * # 連接本地程序 p process(./pwn_test) # 連接遠(yuǎn)程題目環(huán)境比賽時(shí)使用 # p remote(1.2.3.4, 10001) # 接收程序輸出 p.recvuntil(bInput your name:) # 發(fā)送payload p.sendline(baaaabbbb) # 切換為交互模式 p.interactive()GDB則是Linux下最常用的調(diào)試器配合pwndbg插件使用可以讓你非常直觀地看到程序崩潰時(shí)的寄存器狀態(tài)、棧結(jié)構(gòu)以及各種內(nèi)存信息這對分析漏洞利用思路至關(guān)重要。逆向方向的主工具推薦IDA Pro或者免費(fèi)開源的Ghidra兩者都能做反匯編和反編譯新手建議從IDA的F5反編譯功能入手先看偽代碼理清邏輯再回到匯編層逐行分析。4.3 密碼學(xué)與雜項(xiàng)方向工具鏈CyberChef等密碼學(xué)方向的工具核心就是CyberChef另外Python的Crypto庫和gmpy2庫也需要熟悉。Crypto庫用于處理各種加解密算法gmpy2用于高精度大數(shù)運(yùn)算RSA相關(guān)的題目幾乎都要用到它。雜項(xiàng)方向的工具相對更雜一些但有幾樣是通用的十六進(jìn)制編輯器010 Editor或HxD用來查看和修改文件底層字節(jié)。binwalk固件分析利器可以快速提取隱藏在文件中的其他文件。Stegsolve一個(gè)Java寫的小工具專門用來做圖像隱寫分析支持按通道查看圖片像素?cái)?shù)據(jù)。Wireshark流量分析神器我建議每個(gè)方向的人都裝一個(gè)因?yàn)椴还苁裁捶较虻念}目都可能涉及流量包分析。關(guān)于工具我想額外說一句不要貪多。每個(gè)方向選2到3個(gè)主力工具花時(shí)間把它們用得滾瓜爛熟比下載20個(gè)工具但每個(gè)只會點(diǎn)按鈕要有用得多。5. 學(xué)習(xí)筆記體系把刷過的題變成自己的知識資產(chǎn)5.1 筆記要記什么一套可復(fù)用的WP模板很多新人刷題不記筆記理由是“我刷過了印象很深刻”。但實(shí)際情況是CTF的知識點(diǎn)高度碎片化而且同類題型之間的差異很小不記錄的話一兩周后你連當(dāng)初卡住自己的關(guān)鍵點(diǎn)在哪都忘光了。刷題記筆記這個(gè)習(xí)慣可以說是區(qū)分“有效刷題”和“無效刷題”的最重要分水嶺。我個(gè)人的CTF筆記模板是這樣的你可以直接復(fù)用題目名稱和來源哪個(gè)平臺、哪場比賽題目方向與考點(diǎn)標(biāo)簽例如Web/SQL注入/聯(lián)合查詢我的嘗試過程踩過哪些坑卡在哪個(gè)環(huán)節(jié)最終解法和關(guān)鍵步驟按順序?qū)懙迷皆敿?xì)越好涉及的知識點(diǎn)總結(jié)用簡短的語言把所有相關(guān)知識點(diǎn)拉通一遍工具和命令的參考用了什么工具敲了什么命令可遷移的經(jīng)驗(yàn)這道題的方法還能用在哪類題上這套模板的核心邏輯是“復(fù)盤驅(qū)動”重點(diǎn)不在于把WriteUp抄一遍而在于記錄你整個(gè)思考的轉(zhuǎn)變過程。我記得有一次遇到一道反序列化題第一次做完全沒思路翻了題解才明白是利用了一個(gè)特殊觸發(fā)鏈。這道題的筆記我寫了兩千多字從那以后我再遇到PHP反序列化題目腦子里就有了一條清晰的排查路線。5.2 如何整理知識體系從零散筆記到個(gè)人知識庫隨著刷題數(shù)量增加零散的筆記會變得難以檢索。到這個(gè)時(shí)候就該考慮建一個(gè)結(jié)構(gòu)化的個(gè)人知識庫了。我個(gè)人推薦用Markdown文件管理配合Git做版本控制好處是純文本不依賴任何特定軟件而且可以隨時(shí)回溯歷史版本。有條件的也可以搭建一個(gè)本地文檔站點(diǎn)但沒有必要在入門階段為此花費(fèi)太多時(shí)間。知識庫的組織結(jié)構(gòu)可以參考這個(gè)思路按方向建頂層文件夾Web、Pwn、Crypto、Misc、Reverse每個(gè)方向下按知識點(diǎn)建二級文件夾例如Web目錄下就建SQL注入、XSS、文件上傳等子目錄每一道題的筆記就放在對應(yīng)的知識點(diǎn)目錄下。這樣一來在打比賽或者做題時(shí)如果你遇到“這個(gè)點(diǎn)我好像見過”直接在本地搜索關(guān)鍵詞就能快速找到之前的筆記和腳本效率會高很多。這里我要特意強(qiáng)調(diào)一點(diǎn)知識庫不是寫完就完事的建議每兩周做一次回顧把近期刷題筆記重新掃一遍把重復(fù)的知識點(diǎn)合并歸納把已經(jīng)熟練掌握的內(nèi)容標(biāo)記為“可跳過”。這樣你的知識庫就會始終保持高信噪比不會變成一個(gè)新的“垃圾堆”。6. 常見問題與避坑實(shí)錄新手最容易踩的坑我都替你踩過了6.1 新手常見問題速查表我把帶新人時(shí)反復(fù)被問到的問題整理成了一個(gè)速查表每個(gè)問題的答案都是我實(shí)際驗(yàn)證過的經(jīng)驗(yàn)可以直接用于你的實(shí)操。常見問題問題原因與解決思路做題時(shí)報(bào)錯“connection refused”沒有先啟動本地環(huán)境很多題目需要先開啟Docker或服務(wù)端口確認(rèn)目標(biāo)端口處于監(jiān)聽狀態(tài)看不懂題解里的漏洞利用代碼前置知識不夠先停一下把涉及的函數(shù)用法和協(xié)議原理查清楚再繼續(xù)看題目卡了兩小時(shí)還是沒有思路果斷看WriteUp新手不需要死磕看懂后獨(dú)立復(fù)現(xiàn)一次才是最關(guān)鍵的工具裝了但不會用不要試圖一次學(xué)完所有功能先掌握核心功能其余功能遇到具體場景時(shí)再去現(xiàn)查刷了很多題但感覺沒進(jìn)步大概率是刷題沒有總結(jié)開始強(qiáng)制自己每道題寫復(fù)盤筆記Python腳本報(bào)編碼錯誤很多CTF數(shù)據(jù)是字節(jié)流而非字符串注意區(qū)分bytes和str用encode/decode顯式轉(zhuǎn)換6.2 四個(gè)最影響效率的學(xué)習(xí)方式誤區(qū)第一個(gè)誤區(qū)是“越難的工具越厲害”。很多新人一上來就裝一堆高級掃描框架覺得工具越強(qiáng)大自己越強(qiáng)。但事實(shí)上比賽最緊缺的是你對漏洞原理的理解和現(xiàn)場分析能力而不是工具數(shù)量。我被問過很多次“這個(gè)工具能出題解嗎”實(shí)際上大多數(shù)工具只是輔助核心還是你腦子里的思路。第二個(gè)誤區(qū)是“只刷題不補(bǔ)基礎(chǔ)”。刷題確實(shí)是高效的學(xué)習(xí)方式但不是全部。如果你發(fā)現(xiàn)自己做Web題時(shí)經(jīng)??ㄔ诓粫x代碼上說明需要補(bǔ)一補(bǔ)JavaScript和PHP的基礎(chǔ)語法做Pwn題時(shí)讀不懂反匯編說明需要回去再看C語言和匯編的知識。基礎(chǔ)知識和刷題是互補(bǔ)的不能偏廢。第三個(gè)誤區(qū)是“只看WriteUp但不動手復(fù)現(xiàn)”。看題解是最容易產(chǎn)生“我學(xué)會了”錯覺的方式實(shí)際上你對題解的理解程度只有在你動手復(fù)現(xiàn)一遍之后才算數(shù)??搭}解五分鐘復(fù)現(xiàn)五十分鐘這個(gè)時(shí)間投入是值得的。第四個(gè)誤區(qū)是“過早分方向”。我發(fā)現(xiàn)有些新人剛?cè)腴T一個(gè)月就說自己“只做Web其他方向不碰”。但實(shí)際上CTF是一個(gè)交叉性很強(qiáng)的領(lǐng)域多方向的基礎(chǔ)了解會反過來促進(jìn)你對主攻方向的理解。比如對密碼學(xué)套路的了解有助于你在Web題中識別加密參數(shù)對Misc方向的工具了解也能拓展你分析Web流量包的能力。前期至少把所有方向都過一遍再談專精。6.3 資源獲取的正確姿勢找教程、找題解、問問題學(xué)術(shù)和提問也是需要技巧的。CTF圈子的學(xué)習(xí)資源非常豐富但如果獲取方式不對很容易陷進(jìn)信息過載的泥潭。我的建議是優(yōu)先看官方文檔和權(quán)威平臺的WriteUp其次是個(gè)人技術(shù)博客最后才是視頻教程。視頻教程的問題在于信息密度比較低同樣一個(gè)知識點(diǎn)看文字可能五分鐘就能吃透看視頻要花半小時(shí)。當(dāng)然如果你完全零基礎(chǔ)看視頻入門也不是不可以但一定不要局限在看視頻要同步動手操作。提問方面建議使用搜索引擎和論壇搜索先確認(rèn)自己的問題是不是已經(jīng)有人問過。一個(gè)合格的問題應(yīng)該包含你的操作環(huán)境、你復(fù)現(xiàn)的具體步驟、你遇到的完整報(bào)錯信息、你已經(jīng)嘗試過的解決方案。如果你能按這個(gè)格式提問基本會得到非常高質(zhì)量的回復(fù)。我最怕的就是有人只丟一句“這道題怎么做”這種問題基本得不到任何有效信息。最后分享一下我這幾年刷題過程中沉淀下來的一套習(xí)慣。保持記錄是關(guān)鍵我把每道有價(jià)值的題都整理成筆記要求自己用最精簡的語言把解題思路重新表述一遍。這個(gè)“表述”的過程有時(shí)候比做題本身更有收獲因?yàn)樗鼤?qiáng)迫你理解得更深入。前期我也會因?yàn)橐坏李}卡了很久而煩躁但后來慢慢調(diào)整了心態(tài)——那些讓我卡住的題目往往才是我真正學(xué)到的知識。希望這份指南能讓你在CTF這條路上走得比當(dāng)年的我順暢一些也歡迎你在實(shí)操中有了新的體會以后再回頭來對照這篇內(nèi)容形成屬于自己的方法論。