很多人常常會詢問一定學 CTF 嗎?或是社團的課程一定要安排 CTF 嗎?
我的答案是不一定,因為 CTF(Capture The Flag)雖然是資安領域的一個重要競賽,能鍛鍊資安相關技能和增加團隊協作的技巧,但每個社團或每一個人目標可能有所不同。
比如我在台科大資安研究社擔任社長的時候,評估下來之後以「業界需要的資訊安全」為主題,因此反而 CTF 的課程就比較少。
CTF,全名為 Capture The Flag,代表「抓取 Flag」。一種資安競賽,參賽者必須解決出題者出的各種資安、漏洞、甚至是特別難的問題,解答之後會拿到「Flag」,進而取得分數。
CTF 通常分為三大類型:
白話文版本
除了 CTF 之外,還有 WarGame 也可以練習資安相關技能
WarGame 這個玩法可以想像成一系列的電腦遊戲闖關模式。
就像你玩一些手機遊戲,每過一關都會更難,每一關都設有不同的挑戰和障礙需要繞過。
在 WarGame 中,這些「關卡」其實是各種資訊安全的問題和挑戰。
跟 CTF 不同的是,WarGame 更像是單人遊戲,讓你自己在解題的過程中學習和進步。
你不需要在短時間內與其他人競爭,而是可以慢慢地、在自己的節奏下解題。
所以 WarGame 特別適合初學者或是那些想深入研究某一特定技能的人。
有一個蠻受歡迎的 WarGame 網站叫做「overthewire」,裡面有很多系列的闖關遊戲,適合從新手到高手的人挑戰。
如果你想在一個較有競爭性的環境中測試自己的技能,可以參加 CTF。
但如果你希望更專注於學習,並在自己的節奏下逐步提升,那麼 WarGame 是個很好的選擇!
Web 網站:
Pwnable 漏洞分析:
Reverse 逆向工程:
Crypto 加解密:
Forensics 鑑識:
過去和現在的 CTF 題目在許多方面都有所不同,主要的差異和發展趨勢:
現代的 CTF 更加複雜和多樣,反映了目前安全領域的發展趨勢和威脅模型的變化。
過去的 CTF 則更多地聚焦於基礎和經典的安全概念和技術。
打完 CTF 比賽可以在自己的部落格或 GitHub 寫下自己的解題思路
通常大家只會寫自己解出來的
有比賽就打,持續進行 CTF 比賽
優點:一直有最新版的題目,可以增加自己的見聞
缺點:比賽結果很容易讓新手受挫和等不到適合的題目
看考古題
優點:通常有別人的解題可以偷看,打不出來偷看小抄(Write UP)覺得簡單
缺點:沒有做筆記,或是造著打很容易忘記
※ 提升能力的方法:照著小抄試打,隔一週再打一次,看自己卡在那裡,是哪一個步驟自己忘記還是根本不會
※ 提升能力的方法:
(1)單看筆記:了解原來這種程式語言有這種特性、弱點原理是什麼
(2)反向學習:從筆記找題目,從筆記中找到關鍵字+上 CTF 進行搜尋,從搜尋過程中去找題目來看,嘗試去解題,最後寫成自己的筆記。
從零開始學習資安的專業知識,需要有一定的基礎和大量的實際操作經驗。
網路上有許多優質的資源可以學習和練習。
PicoCTF by CMU:由卡內基梅隆大學提供,適合初學者入門。
Hacker101 CTF by HackerOne:由知名的資安公司 HackerOne 提供,包含多種安全挑戰。
Hackme CTF by inndy:由 inndy 提供,涵蓋多種資安挑戰。
如逆向工程和系統漏洞。
逆向工程 Crackmes.one by sar:提供了一系列軟體逆向工程的挑戰。
Pwnable pwn.college:重點在於系統安全和漏洞利用。
臺灣大學:計算機安全
臺灣科技大學:資訊安全實務
交通大學:程式安全
在深入學習之前,建議先了解基礎網路和系統知識,如TCP/IP、作業系統原理等。
此外,程式設計知識也是不可或缺的,特別是 C 語言和 Python,
因為在資安領域中經常被使用。
最後,學習資安需要堅持和實踐,不斷的挑戰和學習才能不斷進步。
為了更有效地管理和分享 CTF 的 Write up,社團可以使用 Write up 管理工具:
新的 app 名為 writeups
:
python manage.py startapp writeups
在 writeups/models.py
中,定義模型。
from django.db import models
from django.contrib.auth.models import User
class WriteUp(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
event_date = models.DateField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
確保已經在 settings.py
的 INSTALLED_APPS
中加入 writeups
在 writeups/views.py
中,建立所需的 views。
from django.shortcuts import render
from .models import WriteUp
def writeup_list(request):
writeups = WriteUp.objects.all()
return render(request, 'writeups/list.html', {'writeups': writeups})
在 writeups/templates/writeups
資料夾中,建立你的 templates。
{% extends "base.html" %}
{% block title %}Write-up 列表{% endblock %}
{% block content %}
<h1>Write-up 列表</h1>
<ul>
{% for writeup in writeups %}
<li>
<h2>{{ writeup.title }}</h2>
<p>作者:{{ writeup.author }}</p>
<p>活動日期:{{ writeup.event_date }}</p>
<p>更新時間:{{ writeup.updated_at }}</p>
<div>{{ writeup.content }}</div>
</li>
{% empty %}
<li>目前沒有任何 write-up。</li>
{% endfor %}
</ul>
{% endblock %}
在 writeups
資料夾中建立一個 urls.py
,然後定義 URL patterns。
from django.urls import path
from . import views
urlpatterns = [
path('', views.writeup_list, name='writeup_list'),
]
確保你在 project 的 urls.py
中加入了這個 app 的 urls。
from django.urls import include, path
urlpatterns = [
path('writeups/', include('writeups.urls')),
]
python manage.py makemigrations writeups
python manage.py migrate
測試伺服器:
python manage.py runserver
打開瀏覽器,查看 http://localhost:8000/writeups/
查看 Write up 列表