solve-challenge

solve-challenge

熱門

執行 CTF 挑戰題目的初步分類,判斷主要類別,並將執行導向對應的專業 ctf-* 技能。當使用者提供挑戰題包、遠端服務、可疑檔案或僅有模糊的題目描述,且你需要決定從何處開始時使用。若類別已明確且可直接呼叫專業技能,則不應使用此技能;此技能為調度與偵察入口,並非類別特定技術的深度參考。

2725星標
329分支
更新於 2026/7/10
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:偵察

  1. 探索檔案——列出挑戰目錄,對所有檔案執行 file *
  2. 分類二進位檔——對二進位檔執行 stringsxxd | headbinwalkchecksec
  3. 擷取連結——如果挑戰提到網址,先擷取以取得上下文
  4. 連線——嘗試遠端服務(nc)以了解其預期輸入
  5. 閱讀提示——挑戰描述、檔名和註解常包含線索

步驟 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:卡關時轉向

如果第一個方法行不通:

  1. 重新檢視假設——這真的是你認為的類別嗎?一個「網頁」挑戰可能需要密碼學來偽造 JWT。一個「鑑識」PCAP 可能包含需要重播的 Pwn 漏洞。
  2. 嘗試不同的類別技能——許多挑戰跨越多個類別。呼叫第二個技能來處理跨領域技術。
  3. 尋找遺漏的東西——隱藏檔案、替代連接埠、回應標頭、原始碼中的註解、圖片中的中繼資料。
  4. 簡化——如果漏洞利用太複雜,檢查是否有更簡單的路徑(預設憑證、已知 CVE、邏輯錯誤)。
  5. 檢查邊界情況——差一錯誤、競爭條件、整數溢位、編碼不符。

常見的多類別模式:

  • 鑑識 + 密碼學: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