
ctf-misc
熱門提供無法明確歸類至主要類別的雜項 CTF 挑戰解題技巧。適用於編碼謎題、pyjails、bash jails、RF/SDR、DNS 特殊行為、Unicode 技巧、奇特程式語言(esolangs)、QR Code 或音訊謎題、條件約束求解、賽局理論、異常沙盒逃脫以及混合邏輯謎題。當題目主要屬於 Web、Pwn、逆向工程(Reverse)、數位鑑識(Forensics)、惡意程式分析(Malware)、OSINT 或密碼學(Crypto)時,請優先使用更具針對性的 Skill。請將此 Skill 作為跨類別或特殊邊緣情境題目的備用方案,而非預設的起始點。
提供無法明確歸類至主要類別的雜項 CTF 挑戰解題技巧。適用於編碼謎題、pyjails、bash jails、RF/SDR、DNS 特殊行為、Unicode 技巧、奇特程式語言(esolangs)、QR Code 或音訊謎題、條件約束求解、賽局理論、異常沙盒逃脫以及混合邏輯謎題。當題目主要屬於 Web、Pwn、逆向工程(Reverse)、數位鑑識(Forensics)、惡意程式分析(Malware)、OSINT 或密碼學(Crypto)時,請優先使用更具針對性的 Skill。請將此 Skill 作為跨類別或特殊邊緣情境題目的備用方案,而非預設的起始點。
CTF 雜項(Miscellaneous)
雜項 CTF 挑戰的快速參考指南。此處為每種技巧提供單行摘要,完整細節請參閱附屬檔案。
前置需求
Python 套件(所有平台):
pip install z3-solver pwntools Pillow numpy requests dnslib
Linux (apt):
apt install ffmpeg qrencode
macOS (Homebrew):
brew install ffmpeg qrencode
手動安裝:
- SageMath — Linux:
apt install sagemath,macOS:brew install --cask sage
附加資源
- pyjails.md - Python jail / 沙盒逃脫技巧、Quine 上下文檢測、受限字元全 1 數(repunit)分解、func_globals 模組鏈尋訪、受限字元集數字生成、類別屬性持久化、經由儲存型 eval 的 f-string 設定注入
- bashjails.md - Bash jail / 限制型 Shell 逃脫技巧、HISTFILE 檔案讀取技巧、bash -v 詳細模式、ctypes.sh 直接呼叫 C 函式庫
- encodings.md - 編碼、QR Code、奇特語言(esolangs)、UTF-16 技巧、BCD 編碼、多層自動解碼、索引目錄 QR 重組、多階段 URL 編碼鏈
- encodings-advanced.md - Verilog/HDL、葛雷碼(Gray code)循環編碼、RTF 自訂標籤擷取、SMS PDU 解碼、多重編碼順序求解器、UTF-9、像素二進位編碼、十六進位數獨 + QR 拼裝、TOPKEK、MaxiCode
- rf-sdr.md - RF/SDR/IQ 信號處理(QAM-16、載波復原、時序同步)
- dns.md - DNS 利用(ECS 偽造、NSEC walking、IXFR、重新綁定、隧道傳輸)
- games-and-vms.md - WASM 修補、Roblox place 檔案逆向、PyInstaller、marshal 分析、Python 環境變數 RCE、Z3(包含布林邏輯閘網路 SAT 求解)、K8s RBAC、浮點數精度利用、經由 Python MRO 鏈的自訂組合語言沙盒逃脫
- games-and-vms-2.md - Cookie 檢查點遊戲爆破、Flask cookie 遊戲狀態洩漏、WebSocket 遊戲操作、伺服器僅限時間驗證繞過、De Bruijn 序列、Brainfuck 插樁、WASM 線性記憶體操作
- games-and-vms-3.md - memfd_create 打包二進位檔、結合 HMAC 承諾揭示(commitment-reveal)與 GF(256) 尼姆遊戲(Nim)的多階段密碼學遊戲、模擬器 ROM 切換狀態保持、Python marshal 程式碼注入、班福定律(Benford's Law)繞過、平行連線甲骨文(oracle)中繼、數織(nonogram)求解器管線、100 名囚犯問題、經由 Emoji 識別碼的 C 程式碼 jail 逃脫、BuildKit daemon 建置機密利用、Docker 容器逃脫、編輯距離(Levenshtein distance)oracle 攻擊、經由型態強轉(type coercion)的污點分析繞過、碎紙文件像素邊緣重組
- games-and-vms-4.md - 第 4 部分(2018 年代):作為圖靈完備 VM 的 XSLT、JavaScript MAX_SAFE_INTEGER 後繼相等性、僅比對 DSL 中的二元搜尋 oracle、經由腳本引擎逾時錯誤的盲注 SQLi、OEIS 數列查詢自動化、根據格式化字串約束的 QR Code 重組、費氏數列遞迴的矩陣快速冪、青蛙跳躍計數的 Tribonacci、Selenium + Tesseract 動態 CAPTCHA、Brainfuck→Piet 多層 Polyglot、bytebeat 合成器程式碼識別
- linux-privesc.md - Sudo 萬用字元參數注入(fnmatch)、精心設計的 pcap 用於 sudoers.d、monit confcheck 行程注入、Apache -d 覆蓋、備份 cronjob SUID、PostgreSQL COPY TO PROGRAM RCE、PostgreSQL 備份憑證擷取、NFS 共享利用、SSH Unix socket 隧道、PaperCut Print Deploy 權限提升、Squid Proxy Pivoting、經由 MySQL 重設 Zabbix 管理員密碼、WinSSHTerm 憑證解密
- ctfd-navigation.md - 無需瀏覽器的 CTFd 平台 API 導覽:檢測、Token 身份驗證、題目列表、檔案下載、Flag 提交、計分板、提示、通知、Python 用戶端類別
何時切換 Skill
- 如果謎題的核心實際上是密碼學或數論,請切換至
/ctf-crypto。 - 如果題目是真正的二進位漏洞利用,而非沙盒/jail、玩具 VM 或編碼問題,請切換至
/ctf-pwn或/ctf-reverse。 - 如果輸入主要是需要先進行復原工作的檔案、圖片、音訊或封包側錄(pcap),請切換至
/ctf-forensics。 - 關於機器學習/人工智慧(ML/AI)技巧(模型攻擊、對抗性樣本、LLM Jailbreak),請參閱
/ctf-ai-ml。
快速上手指令
# 檔案識別
file mystery_file
xxd mystery_file | head -5
python3 -c "import magic; print(magic.from_file('mystery_file'))"
# 編碼檢測
python3 -c "import base64; print(base64.b64decode('<data>'))"
echo '<data>' | base64 -d
echo '<hex>' | xxd -r -p
# QR Code
zbarimg qr.png
python3 -c "from pyzbar.pyzbar import decode; from PIL import Image; print(decode(Image.open('qr.png')))"
# Z3 條件約束求解
python3 -c "from z3 import *; x=BitVec('x',32); s=Solver(); s.add(x^0xdead==0xbeef); s.check(); print(s.model())"
# Python Jail 測試
python3 -c "__import__('os').system('id')"
通用提示
- 仔細閱讀所有提供的檔案
- 檢查檔案元資料(metadata)、隱藏內容與編碼
- Power Automate 腳本可能會隱藏 API 呼叫
- 猜測多個答案時使用二元搜尋(Binary Search)
常見編碼
# Base64
echo "encoded" | base64 -d
# Base32 (A-Z2-7=)
echo "OBUWG32D..." | base32 -d
# Hex
echo "68656c6c6f" | xxd -r -p
# ROT13
echo "uryyb" | tr 'a-zA-Z' 'n-za-mN-ZA-M'
依字元集識別:
- Base64:
A-Za-z0-9+/= - Base32:
A-Z2-7=(無小寫字母) - Hex:
0-9a-fA-F
請參閱 encodings.md 以瞭解凱撒密碼爆破、URL 編碼及完整細節。
IEEE-754 浮點數編碼(資料隱藏)
模式(浮點數): 數字為隱藏原始位元組的 float32 數值。
核心觀念: 32 位元的浮點數本質上只是將 4 個位元組解讀為數字。將其重新解讀為原始位元組 -> ASCII。
import struct
floats = [1.234e5, -3.456e-7, ...] # 題目提供的任何數值
flag = b''
for f in floats:
flag += struct.pack('>f', f)
print(flag.decode())
變體: 雙精度 '>d'、小端序(little-endian)'<f'、混合型。請參閱 encodings.md 查看 CyberChef 配方。
USB 滑鼠 PCAP 重組
模式(螢幕鍵盤點擊): USB HID 滑鼠流量擷取了螢幕鍵盤的打字過程。使用 USB-Mouse-Pcap-Visualizer 擷取點擊座標(下降沿 Falling Edges),透過相對位移的累加和(cumsum)算出絕對位置,並疊加至螢幕鍵盤(OSK)圖片上。
檔案類型檢測
file unknown_file
xxd unknown_file | head
binwalk unknown_file
壓縮檔解壓縮
7z x archive.7z # 通用
tar -xzf archive.tar.gz # Gzip
tar -xjf archive.tar.bz2 # Bzip2
tar -xJf archive.tar.xz # XZ
多層巢狀壓縮檔解壓腳本
while f=$(ls *.tar* *.gz *.bz2 *.xz *.zip *.7z 2>/devnull|head -1) && [ -n "$f" ]; do
7z x -y "$f" && rm "$f"
done
QR Code
zbarimg qrcode.png # 解碼
qrencode -o out.png "data"
MaxiCode 條碼: 中心帶有同心圓標靶的六角形二維條碼;由於標準 QR 解碼器無法解碼,請使用 zxing(Java)進行解碼。請參閱 encodings-advanced.md。
TOPKEK 編碼: CTF 特有的二進位編碼,其中 KEK=0、TOP=1,字尾 ! 代表重複次數。請參閱 encodings-advanced.md。
請參閱 encodings.md 以瞭解 QR 結構、修復技巧、區塊重組(結構型與索引目錄變體)以及多階段 URL 編碼鏈。
音訊類題目
sox audio.wav -n spectrogram # 視覺化聲譜圖
qsstv # SSTV 解碼器
RF / SDR / IQ 信號處理
請參閱 rf-sdr.md 取得完整細節(IQ 格式、QAM-16 解調、載波/時序復原)。
快速參考:
- cf32:
np.fromfile(path, dtype=np.complex64)| cs16: int16 reshape(-1,2) | cu8: RTL-SDR raw - 星座圖中的圓圈 = 固定頻率偏移;螺旋狀 = 漂移頻率 + 增益不穩定
- DD 載波復原中的 4 倍相位模糊(4-fold ambiguity)— 請嘗試 0/90/180/270 度旋轉
pwntools 互動
from pwn import *
r = remote('host', port)
r.recvuntil(b'prompt: ')
r.sendline(b'answer')
r.interactive()
Python Jail 快速參考
- Oracle 模式:
L()= 長度,Q(i,x)= 比對,S(guess)= 提交。使用線性或二元搜尋。 - 海象運算子繞過:
(abcdef := "new_chars")重新指派受限變數 - Decorator 繞過: 使用
@__import__+@func.__class__.__dict__[__name__.__name__].__get__實現免括號呼叫、免引號的逃脫 - 字串拼接: 當
+被封鎖時使用open(''.join(['fl','ag.txt'])).read()
請參閱 pyjails.md 取得完整技巧。
Z3 / 條件約束求解
from z3 import *
flag = [BitVec(f'f{i}', 8) for i in range(FLAG_LEN)]
s = Solver()
# 新增條件約束、檢查 sat、擷取模型
請參閱 games-and-vms.md 以瞭解 YARA 規則、作為約束的型態系統、布林邏輯閘網路 SAT 求解。
特徵雜湊碼識別
MD5: 0x67452301 | SHA-256: 0x6a09e667 | MurmurHash64A: 0xC6A4A7935BD1E995
SHA-256 長度擴充攻擊(Length Extension Attack)
MAC = SHA-256(SECRET || msg) 在已知 msg/雜湊值的情況下 -> 透過 hlextend 偽造有效的 MAC。易受攻擊:SHA-256、MD5、SHA-1。不受影響:HMAC、SHA-3。
import hlextend
sha = hlextend.new('sha256')
new_data = sha.extend(b'extension', b'original_message', len_secret, known_hash_hex)
技巧快速參考
- PyInstaller:
pyinstxtractor.py packed.exe。參閱 games-and-vms.md 查看 Opcode 重新對映。 - Marshal:
marshal.load(f)接著dis.dis(code)。參閱 games-and-vms.md。 - Python 環境變數 RCE:
PYTHONWARNINGS=ignore::antigravity.Foo::0+BROWSER="cmd"。參閱 games-and-vms.md。 - WASM 修補:
wasm2wat-> 反轉 minimax 邏輯 ->wat2wasm。參閱 games-and-vms.md。 - 浮點數精度: 大乘數會將浮點數誤差放大為可利用的小數點偏差。參閱 games-and-vms.md。
- K8s RBAC 繞過: SA token -> 冒充身份(impersonate)-> hostPath 掛載 -> 讀取機密。參閱 games-and-vms.md。
- Cookie 檢查點: 猜測前先儲存 Session Cookie,失敗時還原,實現無需重設狀態的爆破。參閱 games-and-vms-2.md。
- Flask Cookie 遊戲狀態:
flask-unsign -d -c '<cookie>'解碼未簽名的 Flask Session,洩漏遊戲答案。參閱 games-and-vms-2.md。 - WebSocket 瞬間移動: 在 Console 修改
player.x/player.y後呼叫驗證函式。參閱 games-and-vms-2.md。 - 僅限時間驗證: 啟動 Session,
time.sleep(required_seconds),提交獲勝。參閱 games-and-vms-2.md。 - Quine 上下文檢測: 雙重用途的 Quine,可印出自身(通過驗證),且僅透過 globals 閘門在伺服器行程中執行 Payload。參閱 pyjails.md。
- 全 1 數分解(Repunit decomposition): 在受限的 eval 中僅使用 2 個字元(
1與+),將目標整數拆解為全 1 數(1, 11, 111...)的和。參閱 pyjails.md。 - De Bruijn 序列: B(k, n) 包含所有 k^n 種可能的 n 長度子字串;透過追加以下內容將其線性化...



