ctf-misc

ctf-misc

熱門

提供無法明確歸類至主要類別的雜項 CTF 挑戰解題技巧。適用於編碼謎題、pyjails、bash jails、RF/SDR、DNS 特殊行為、Unicode 技巧、奇特程式語言(esolangs)、QR Code 或音訊謎題、條件約束求解、賽局理論、異常沙盒逃脫以及混合邏輯謎題。當題目主要屬於 Web、Pwn、逆向工程(Reverse)、數位鑑識(Forensics)、惡意程式分析(Malware)、OSINT 或密碼學(Crypto)時,請優先使用更具針對性的 Skill。請將此 Skill 作為跨類別或特殊邊緣情境題目的備用方案,而非預設的起始點。

2725星標
329分支
更新於 2026/7/10
SKILL.md
唯讀
名稱
ctf-misc
描述

提供無法明確歸類至主要類別的雜項 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=0TOP=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 長度子字串;透過追加以下內容將其線性化...