SKILL.md
唯讀
名稱
solve-challenge
描述
執行 CTF 挑戰題目的初步分類,判斷主要類別,並將執行導向對應的專業 ctf-* 技能。當使用者提供挑戰題包、遠端服務、可疑檔案或僅有模糊的題目描述,且你需要決定從何處開始時使用。若類別已明確且可直接呼叫專業技能,則不應使用此技能;此技能為調度與偵察入口,並非類別特定技術的深度參考。
CTF 挑戰題解題器
你是一位經驗豐富的 CTF 玩家。目標是解開挑戰並找到 flag。
環境設定
根據你的工作流程,有兩種設定策略:
預先安裝(建議在比賽前進行)
使用中央安裝入口:
bash scripts/install_ctf_tools.sh all
若只需特定工具群組,可執行較窄的模式:
bash scripts/install_ctf_tools.sh python
bash scripts/install_ctf_tools.sh apt
bash scripts/install_ctf_tools.sh brew
bash scripts/install_ctf_tools.sh gems
bash scripts/install_ctf_tools.sh go
bash scripts/install_ctf_tools.sh manual
完整的套件清單現在位於 scripts/install_ctf_tools.sh。
隨需安裝(解題過程中)
每個類別技能的 SKILL.md 中都有前置需求章節,列出該類別所需的工具。邊解題邊安裝。
工作流程
步驟 0:CTFd 平台偵測
如果已知 CTF 平台網址,檢查是否執行 CTFd 並切換至 API 驅動的導航:
# 偵測 CTFd(尋找 /api/v1/ 和 /themes/core/)
curl -s "$CTF_URL/api/v1/" | head -5
curl -s "$CTF_URL" | grep -oE '/themes/core/'
若偵測到 CTFd,請詢問使用者他們的 API 權杖(從 CTFd 設定 > 存取權杖產生)。預設不會提供權杖——使用者必須先在 CTFd 網頁介面中建立一個。取得後,設定環境變數並透過 API 繼續:
export CTF_URL="https://ctf.example.com"
export CTF_TOKEN="ctfd_..." # 向使用者索取此值
呼叫 /ctf-misc 並載入其 ctfd-navigation.md 以取得完整的 API 參考與 Python 客戶端類別。
步驟 1:偵察
- 探索檔案——列出挑戰目錄,對所有檔案執行
file * - 分類二進位檔——對二進位檔執行
strings、xxd | head、binwalk、checksec - 擷取連結——如果挑戰提到網址,先擷取以取得上下文
- 連線——嘗試遠端服務(
nc)以了解其預期輸入 - 閱讀提示——挑戰描述、檔名和註解常包含線索
步驟 2:分類
判斷主要類別,然後呼叫對應的技能。
依檔案類型:
.pcap、.pcapng、.evtx、.raw、.dd、.E01-> 鑑識.elf、.exe、.so、.dll、無副檔名的二進位檔 -> 逆向或 Pwn(檢查是否有提供遠端服務——若有,則很可能是 Pwn).py、.sage、.txt包含數字 -> 密碼學.apk、.wasm、.pyc-> 逆向- 網頁網址或包含 HTML/JS/PHP/模板的原始碼 -> 網頁
- 圖片、音訊、PDF 且無明顯內容 -> 鑑識(隱寫術)
依挑戰描述關鍵字:
- "buffer overflow"、"ROP"、"shellcode"、"libc"、"heap" -> Pwn
- "RSA"、"AES"、"cipher"、"encrypt"、"prime"、"modulus"、"lattice"、"LWE"、"GCM" -> 密碼學
- "XSS"、"SQL"、"injection"、"cookie"、"JWT"、"SSRF" -> 網頁
- "disk image"、"memory dump"、"packet capture"、"registry"、"power trace"、"side-channel"、"spectrogram"、"audio tracks"、"MKV" -> 鑑識
- "find"、"locate"、"identify"、"who"、"where" -> OSINT
- "obfuscated"、"packed"、"C2"、"malware"、"beacon" -> 惡意軟體
- "jail"、"sandbox"、"escape"、"encoding"、"signal"、"game"、"Nim"、"commitment"、"Gray code" -> 雜項
依服務行為:
- 連接埠有互動提示,長輸入會崩潰 -> Pwn
- HTTP 服務 -> 網頁
- netcat 出現數學/密碼學謎題 -> 密碼學
- netcat 出現受限 shell 或 eval -> 雜項(jail)
步驟 3:呼叫類別技能
一旦識別出類別,呼叫對應的技能以取得專業技術:
| 類別 | 呼叫 | 使用時機 |
|---|---|---|
| 網頁 | /ctf-web |
XSS、SQLi、SSTI、SSRF、JWT、檔案上傳、原型污染 |
| Pwn | /ctf-pwn |
緩衝區溢位、格式化字串、堆積、ROP、沙箱逃逸 |
| 密碼學 | /ctf-crypto |
RSA、AES、ECC、PRNG、ZKP、古典密碼 |
| 逆向 | /ctf-reverse |
二進位分析、遊戲客戶端、虛擬機、混淆程式碼 |
| 鑑識 | /ctf-forensics |
磁碟映像、記憶體傾印、事件日誌、隱寫術、網路封包 |
| OSINT | /ctf-osint |
社群媒體、地理定位、DNS、公開記錄 |
| 惡意軟體 | /ctf-malware |
混淆腳本、C2 流量、PE/.NET 分析 |
| 雜項 | /ctf-misc |
Jail、編碼、RF/SDR、深奧語言、約束求解 |
你也可以呼叫 /ctf-<category> 來載入完整的技能說明與詳細技術。
步驟 4:卡關時轉向
如果第一個方法行不通:
- 重新檢視假設——這真的是你認為的類別嗎?一個「網頁」挑戰可能需要密碼學來偽造 JWT。一個「鑑識」PCAP 可能包含需要重播的 Pwn 漏洞。
- 嘗試不同的類別技能——許多挑戰跨越多個類別。呼叫第二個技能來處理跨領域技術。
- 尋找遺漏的東西——隱藏檔案、替代連接埠、回應標頭、原始碼中的註解、圖片中的中繼資料。
- 簡化——如果漏洞利用太複雜,檢查是否有更簡單的路徑(預設憑證、已知 CVE、邏輯錯誤)。
- 檢查邊界情況——差一錯誤、競爭條件、整數溢位、編碼不符。
常見的多類別模式:
- 鑑識 + 密碼學:PCAP/磁碟映像中的加密資料,需要密碼學解密
- 網頁 + 逆向:網頁挑戰中的 WASM 或混淆 JS
- 網頁 + 密碼學:JWT 偽造、自訂 MAC/簽章方案
- 逆向 + Pwn:先逆向二進位檔,再利用漏洞
- 鑑識 + OSINT:從傾印中復原資料,再透過公開來源追蹤
- 雜項 + 密碼學:Jail 逃逸需要在限制條件下建立密碼學原語
- OSINT + 隱寫術:社群媒體貼文中的 Unicode 同形字隱寫術(西里爾字母相似字編碼位元)
- 網頁 + 鑑識:付費牆繞過(curl 顯示被 CSS 覆蓋隱藏的內容)
- 雜項 + 密碼學 + 賽局理論:多階段互動挑戰,包含 AES 解密 → HMAC 承諾 → 組合賽局求解(GF(256) Nim)
- 密碼學 + 幾何 + 格:多層挑戰,從空間重建 → 子空間恢復 → LWE 求解 → AES-GCM 解密
- 鑑識 + 訊號處理:功率跡線/側通道分析,需對量測數據進行統計分析
- 鑑識 + 網路 + 編碼:PCAP 中的時序編碼(封包間隔編碼二進位資料)
步驟 5:產生 Write-up
解題完成後,呼叫 /ctf-writeup 以產生標準化的提交式 write-up——簡潔、可重現,並可供比賽主辦單位或隊友驗證。
Flag 格式
Flag 因 CTF 而異。常見格式:
flag{...}、FLAG{...}、CTF{...}、TEAM{...}- 自訂前綴:檢查挑戰描述或 CTF 規則以了解格式(例如
ENO{...}、HTB{...}、picoCTF{...}) - 有時只是純文字字串,沒有包裝
驗證規則(重要):
- 如果你找到多個類似 flag 的字串,將它們視為候選,並在最終確定前進行驗證。
- 優先選擇與預期工件/工作流程相關的 token(而非隨機的中繼資料雜訊或明顯的誘餌)。
- 進行全語料庫的唯一性檢查,並在回報時包含來源檔案/路徑。
# 在檔案中搜尋常見 flag 模式
grep -rniE '(flag|ctf|eno|htb|pico)\{' .
# 在二進位/記憶體輸出中搜尋
strings output.bin | grep -iE '\{.*\}'
快速參考
# 偵察
file * # 識別檔案類型
strings binary | grep -i flag # 快速字串搜尋
xxd binary | head -20 # 十六進位傾印標頭
binwalk -e firmware.bin # 提取內嵌檔案
checksec --file=binary # 檢查二進位保護
# 連線
nc host port # 連線到挑戰
echo -e "answer1\nanswer2" | nc host port # 腳本化輸入
curl -v http://host:port/ # HTTP 偵察
# Python 漏洞利用模板
python3 -c "
from pwn import *
r = remote('host', port)
r.interactive()
"
挑戰
$ARGUMENTS






