--- title: Hello CTF description: Overview of CTF (Capture the Flag). tags: picoCTF 練習, General --- 前言 --- 在這篇文章中,對於 CTF (Capture the Flag) 這個網路安全競賽的內容我不會在這邊詳述。 我主要要來聊聊如果要來打 CTF 時大概要怎麼做,提供一個簡單的 SOP 策略。 當然啦,我不是專業 CTF 的玩家,也不是現役的資深資安工程師。 但是作為一個業餘的資安嗜好者,還是希望提出我的論點跟大家討論討論! > 雖這篇文章不聊 CTF 的定義, > 不過我可以提供 ChatGPT 版本的說明~ ```! 簡介: CTF(Capture the Flag)是一項受歡迎的網絡安全競賽,旨在測試參與者在不同領域的信息安全方面的技能。它涉及解決一系列的挑戰或謎題,以獲取代表特定目標的「旗」。這些挑戰旨在評估和提升參與者在密碼學、逆向工程、網絡安全、二進位利用等領域的知識。 目標: CTF競賽的主要目標是鼓勵學習、技能發展和問題解決,促進網絡安全領域的發展。參與者可以個人或團隊競賽,展示他們識別漏洞、分析代碼、利用系統和防禦攻擊的能力。通過參與CTF,個人可以獲得實踐經驗,提升技術能力,並跟上網絡安全領域的最新趨勢和技術。 挑戰: CTF的挑戰在難度和主題上各不相同。可能涉及解密編碼的消息、分析惡意軟體樣本、繞過安全措施或利用軟體系統中的漏洞等任務。參與者需要批判性思考,應用知識,並運用創造性的問題解決技巧來克服這些挑戰並獲取旗幟。 提交旗幟: 當參與者成功解決一個挑戰時,他們獲得一個「旗 flag」,通常是一個獨特的字串。為了得分,參與者必須將獲得的 flag 提交給競賽組織者。flag 作為成功完成挑戰的證據,並展示參與者在競賽中的進展。 CTF的類型: CTF可以根據其格式和目標受眾進行分類。一些常見的類型包括: Jeopardy Style:以不同的題目類別和不同的分數進行競賽的形式。參與者可以根據自己的專業知識和偏好選擇挑戰。 Attack-Defense:在這種CTF類型中,參與者會獲得易受攻擊的系統或網絡,他們必須在攻擊和利用對手系統的同時保護自己的系統。 紅隊對藍隊:這種形式模擬真實場景,參與者被分為攻擊(紅隊)和防守(藍隊)角色。紅隊的目標是攻擊並入侵系統,而藍隊的目標是防禦和阻止這些攻擊。 結論: CTF競賽為對網絡安全感興趣的人提供了一個激動人心且具有挑戰性的環境。通過參與這些活動,參與者可以提升技術能力,與志同道合的人合作,並以實踐和有趣的方式獲得寶貴的經驗。CTF作為一個有效的學習、交流和了解不斷發展的信息安全領域的平台。 ``` > 以上來自於 ChatGPT 的說明 > ![](https://hackmd.io/_uploads/Sy_--Iud3.png) ATT&CK® 介紹 --- > 資料來源:飛飛 - 資安這條路 [https://feifei.tw/attck-intro/](https://feifei.tw/attck-intro/) 先標註資料來源,因為我覺得他講的夠好了! 如果對於這個標題有興趣的人,可以參閱上面的資料來源! 但是為什麼我要先來講 ATT&CK® 呢? 因為我覺得 CTF 其實就是資安攻擊、防禦與鑑識的一種縮影,理所當然的也很適合使用資安攻擊時的一些步驟與策略。 當然,CTF 的題目是死的,而真實世界的狀況是變動的, 要取其精華才能有一個好的 SOP。 其實,ATT&CK® 並不適合作為 SOP,因為他並不強調「線性」的階段任務,而是認為從哪邊開始都可以。 不過我覺得,本來在解題策略上面,甚至是攻擊策略上面,本來就不是單純「線性」的階段關係,而是不斷的輪迴測試。 感覺有點像是在軟體工程上講的「瀑布式開發 Waterfall」和「敏捷開發 Agile」之間的關係。 不過不管哪一種,還是會定義各種「階段」上面要做的事情。 可以看到以下圖片內容: ![](https://hackmd.io/_uploads/Sk-y4LdO2.png) 在這張圖中,可以看到其實 ATT&CK® 反而沒有所謂階段的,而是 ATT&CK® for Enterprise 。 但是可以注意到另一個叫做 「網路攻擊狙殺鏈 Cyber Kill Chain」是有階段性的內容任務。 為了方便起見,我們就用 Cyber Kill Chain 的階段來說明。 > 畢竟 ATT&CK® 的技巧階段實在有點多... 攻擊階段 SOP --- ![](https://hackmd.io/_uploads/HyM8tU__3.png) > 資料來源:[https://seqred.pl/en/cyber-kill-chain-what-is-it-and-how-to-use-it-to-stop-advanced-methods-of-attack/](https://seqred.pl/en/cyber-kill-chain-what-is-it-and-how-to-use-it-to-stop-advanced-methods-of-attack/) 我們可以看到在資料來源提供的圖片裡面,他提到的幾個基本階段: * 偵查 Reconnaissance * 武裝 Weaponization * 傳遞 Deliery * 弱點攻擊 Exploitation * 安裝 Installation * 執行與控制 Command and Control (C2) * 行動 Action on Objectives 我們對照到 CTF 的內涵,可以有以下比較: || Cyber Kill Chain | CTF Game | |---|---|---| |偵查階段|收集目標對象的資料。|審題、確認搶旗目標、基本掃描目標測試各種目標可能攻擊點。| |武裝階段|使用現成的開源工具或是自行開發專屬的惡意程式。|將蒐集到的階段轉為工具的選擇或是編寫程式。| |傳遞階段|攻擊者將攻擊武器送入目標的系統內。|*看題目是否有這個需求| |弱點攻擊階段|確保遞送的惡意軟體,利用目標對象的系統漏洞。|針對之前蒐集到的情報、弱點開始進行嘗試攻擊,並找到 Flag。| |安裝階段|攻擊者確保自身可以長期控制目標的系統內,將惡意軟體安裝於目標系統中。|| |執行與控制階段|攻擊者潛伏在目標的系統內,收集資料,探索環境。|| |行動階段|根據攻擊者的最終目標,採取行動,如破壞系統、竊取機密資料、勒索目標對象。|提交 Flag。| 其實在網路攻擊中,還有一個「維持階段」,畢竟若是目標系統是非常有價值的,你會想要一來再來,但是不想從頭開始攻擊,這時候就要「維持權限」,讓你下次還可以進入目標系統行動。 但是, CTF 的階段當然不用這麼多,你可以注意到上方表格裡面,並不是每一格都有填上。 所以我們其實重點就在: * 偵查 * 武裝 * 傳遞(如果有需求) * 弱點攻擊 * 提交 Flag (行動) SOP 範例 - Web Exploitation --- 接下來我們用 **Web Exploitation** 來說明各階段的應用。 ### 偵查階段 對於一個網頁來說,怎麼樣的地方是可以被攻擊的? 最具體的當然就是「可以被使用者拿來輸入的地方」。 第二個就是「交互的 API Request & Response」。 所以我們在偵查階段就是測試所有可以被使用者拿來輸入的地方是否有存在漏洞。 通常就是在 html 寫有 `<input />` 或是 `<textarea></textarea>` 的地方。 所以你可以用開啟原始碼的方式,或是用 **dev-tools** 來進行偵查。 如果可能有多個頁面,你也可以用爬蟲的方式來進行偵查標注。 :::warning 這邊要特別標註出來,是我們初階攻擊者可能會遺忘的地方, 那就是 **「網址列」** ,這也是一個可以被使用者輸入的地方,所以也有可能是攻擊點喔! ::: 然後就是稍微嘗試一下漏洞存在的可能性,例如輸入一些資料送出後,看看會發生什麼事情。 這時候我們會去看一下 dev-tools 給的 network 情報,看看在網路傳輸過程中產生了什麼樣的改變。 當然,如果網路傳輸過程看不出什麼端倪,我們可以試著找找看能不能引發「錯誤」訊息。 當然,這個錯誤不能是 404 啦。 401、403、500 等都是有可能存在的攻擊點。 當然你會說 401、403 不能被攻擊, 但是你卻從這次偵查中知道他們有可能是要一些認證手段,你就可以去關注那些「身份認證」相關的漏洞了。 確認了一些攻擊點後,你就可以進入到下一個階段。 ### 武裝階段 這個階段當然就是來開始選擇攻擊的武器。 雖然有些攻擊在偵查階段就結束了。 但是若是還沒,那麼我們就要從剛剛蒐集到的情報中來進行武裝。 這些武裝的內容小至找一找線上工具、開源工具,大到自己客製化一個工具。 當然,通常要客製化的內容在 CTF 中真的就比較小型(應該是不至於到 1000 行以上的程式碼啦!) 但是能夠客製化就代表你不用東湊西湊,就可以建構出合理好用針對性強的攻擊道具。 所以程式設計其實在資安領域內也是一種基本功。 ### 傳遞階段 這階段就真的比較少見... 說不定有,但是我不知道哈哈。 ### 弱點攻擊階段 到了弱點攻擊階段,就是真正攻擊的開始。 就按照之前蒐集到的情報、弱點,用選擇好的武器,就可以發動攻擊了。 值得注意的是,若是在這個階段已經找到的情報、弱點都沒辦法打穿(pass through), 那通常我們就會退回偵查階段,重新找弱點; 或是你也可以退回武裝階段,重新找一找有沒有更適合的武器。 那如果成功打穿,那麼就恭喜你會拿到 flag。 ### 提交 Flag 階段 如小標,不說明... 這已經很白話了啦! :::info 通常,一個 flag 他的型態大概長這樣: [舉辦的CTF競賽名稱]{[flag 字串]} 例如 PicoCTF 舉辦的競賽,他的 flag 大多長成: picoCTF{ajd8q20jiajoqwj082jf} 有沒有例外?當然可能有。 但是應該很少啦! 不然參賽者怎麼會知道 flag 在哪... 光要辨別 flag 可能就用暴力破解還比較快了.. ::: 總結 --- 根據 ATT&CK® 的說明內涵,其實可以根據你的狀況去調整階段。 我也是這麼想。 例如你明明在偵查階段就發現了一個輸入一行指令就可以得到 flag 的漏洞,你難道還要經過 Weaponization Stage 嗎? 當然不用啊,直接上,到 Exploitation Stage 然後快樂的提交 Flag,這樣不是很快樂? 所以雖然上面介紹了這麼多階段: * 偵查階段 * 武裝階段 * 傳遞階段(如果有需要) * 弱點攻擊階段 * 提交 Flag 階段 但是如果你發現可以直接用哪一個階段來解決問題,不用一步步走,直接衝就可以了! 當然啦,如果發現被騙了,怎麼打都打不穿,也要設定一個合理的停損點, 回到偵查階段慢慢找情報囉。 畢竟現代戰爭,打的是情報戰嘛!