チャレンジ一覧
プログラミング - 既知平文攻撃
起動のたびに乱数で作られた証拠ファイル ciphertext.b64 と known.txt を解析します。ciphertext.b64 は観測所の報告書を、英小文字だけの短い鍵(長さは不明)で繰り返し XOR して Base64 にしたもので、known.txt は報告書の冒頭部分の平文です。報告書を復号すると `RESULT: unlock-code=...` という行があり、その unlock-code の値(16文字)が答えです。取り消された古いコードも書かれているので取り違えないでください。答えを `python3 challenge.py '<答え>'` に渡すと、正解のときだけフラグが表示されます。
プログラミング - 独自プロトコルの解析
protocol.bin は起動のたびに作られるバイナリのキャプチャです(/challenge にあります)。KINO で始まる長さつきのフレームがいくつか並んでいます。フレームを先頭から順にたどり、type=3 のフレームの payload を 0x23 で XOR 復号するとフラグが現れます。フラグは平文では置かれていません。
プログラミング - 画像ステガノグラフィ
image.pgm は起動のたびに作られるテキスト形式(P2)の PGM 画像です(/challenge にあります)。画素値の最下位ビット(LSB)を先頭から集め、8ビットずつ1バイトにまとめて読むと、NUL(0 のバイト)の手前までがフラグです。フラグは平文では置かれていません。
メモリから不審なネットワーク接続を見つけよ
侵害されたホスト `kinoco-app03` のメモリイメージから、ソケット一覧 `/challenge/netstat_dump.txt` と、ESTABLISHED のソケットを持つプロセスごとのヒープ領域 `/challenge/heap_carve/pid_<PID>.bin` を復元しました。 カーネルスレッドに偽装した不審なプロセス(インプラント)が外部の C2 サーバーと通信していて、ビーコン設定(フラグを含む)をヒープに、平文ではない形で隠し持っています。ソケット一覧からそのプロセスを特定し、ヒープから設定を取り出してください。ほかのヒープには、フラグに似たおとりの文字列が混ざっています。 使えるツール: python3, grep, strings, xxd, awk
メモリから実行コマンドを復元せよ
メモリ文字列の記録 `memdump.txt` を解析し、実行されたコマンド履歴を復元してください。Base64 文字列をデコードし、bash へ渡している不審なコマンドの引数からフラグを取得します。
削除されたSQLiteレコードを復元せよ
社内チャット「kinoco-msg」の SQLite データベース `/challenge/app.db` を渡します。「機密メッセージ」として送られた本文は、次の形で保存されます。 body = "enc:v1:" + hex(本文 XOR 鍵ストリーム) 鍵ストリーム = SHA-256("<salt>|<sender>|<sent_at>|0") || SHA-256("<salt>|<sender>|<sent_at>|1") || ... salt = settings テーブルの secure_msg_salt(sender と sent_at は、そのメッセージの列の値) 管理者がワンタイムのアカウントリカバリートークンを機密メッセージで送り、すぐに削除しました。SELECT では見えない削除済みのレコードを復元し、本文を復号してトークン(フラグ)を取り出してください。 使えるツール: sqlite3, python3, xxd, strings, grep
多重に圧縮されたファイルを解凍せよ
`/challenge/artifact.xz` は、攻撃者が持ち出そうとしていたファイルで、gzip・bzip2・xz・zip・tar が何重にも重ねてあります。形式を1層ずつ見極めながら剥がし、最も深いところにある `flag.txt` からフラグを取り出してください。 途中のアーカイブには、README・ノイズ・偽の `flag.txt` などのおとりが一緒に入っている階層があります。ファイルの拡張子はあてになりません。 使えるツール: file, gzip, bzip2, xz, zip/unzip, tar, python3
暗号化されたディスクを復号せよ
`/challenge/secret_disk.img` は本物の LUKS2 コンテナで、データ領域にはバックアップ(tar アーカイブ)が入っています。パスフレーズは弱いもので、`/challenge/wordlist.txt` のどれかです。 このターミナルでは device-mapper が使えず、`cryptsetup open` でボリュームを開けません。キースロットから取り出したボリュームキーで、データ領域を自分で復号し、中のファイルからフラグを見つけてください。 使えるツール: cryptsetup, openssl, python3, dd, tar
暗号解析 - RSA共通モジュラス攻撃
2つのシステムが同じRSAの法nを使い回し、公開指数だけを変えていました。同じメッセージを e1 と e2 で暗号化した暗号文 c1, c2 が漏れています(public_keys.txt、ciphertexts.txt)。nは素因数分解できませんが、秘密鍵なしでメッセージを取り戻し、フラグを提出してください。
暗号解析 - 小さい素数のDiffie-Hellman
古いIoT機器が36ビットしかない素数pでDiffie-Hellman鍵共有をしていました。handshake.txtには p, g, A = g^a mod p, B = g^b mod p と、共有鍵から作った鍵ストリームで暗号化された設定データがあります。離散対数を解いて共有鍵を求め、設定データに含まれるフラグを取り出してください。鍵ストリームの作り方はREADME.mdにあります。
音声ファイルに隠されたデータ
`hidden.wav` にはオンオフ変調(OOK)で符号化されたメッセージが隠されています。トーンのオン/オフをビット化してデコードし、フラグを取得してください。 参照用のデコーダは付いていません。標準ライブラリの `wave` モジュールなどで、自分で信号を読み解きます。 提供ファイル: hidden.wav