チャレンジ一覧

絞り込みを解除

43 問 (2 / 2 ページ)

基礎スキルLevel 3★★★☆☆

ネットワークマスター - Netcat リバースシェル

外部ホストへ接続せず、記録済みの artifacts/netcat/callback-transcript.log を解析してください。リスナーやシェルは起動されません。侵害されたホスト 10.0.5.23 から remote.target.com の 4444 番ポートへつながったコールバックを接続一覧から探し、その conn ID で「captured first bytes」の16進データを引き当て、文字列に戻すとフラグになります。送信元・宛先ホスト・宛先ポートのどれかが違う接続はおとりです。

基礎スキルLevel 3★★★☆☆

パフォーマンス解析 - リソースホッグを見つけろ

サーバーのスナップショット `/challenge/metrics.log` を解析します。前半は top 風のプロセス一覧(%CPU は9列目、%MEM は10列目)、後半は ps -ef 風のフルコマンドライン一覧です。%CPU が 50.0 以上かつ %MEM が 20.0 以上のプロセスはただ1つで、その PID の ps -ef 行の `--token=` 引数がフラグです。`--token=KINOCO{...}` を持つプロセスはほかにもあり、%CPU 最大・%MEM 最大のプロセスはどちらも条件を両方は満たしません。

プログラミングLevel 3★★★☆☆

プログラミング - SQLite証拠データベースの解析

evidence.db は起動のたびに乱数で作られる SQLite データベースです(/challenge にあります。users / sessions / access_log の3表)。trust_score が 80 以上のユーザーのセッションについて、ts がそのセッションの started 〜 ended の範囲内にある event = 'vault' の行を集め、note(6桁の16進)を ts の古い順に - でつないだ文字列を求めてください。その文字列を python3 challenge.py '<答え>' に渡すとフラグが表示されます。

プログラミングLevel 3★★★☆☆

プログラミング - Webスクレイピングとグラフ探索

site.json は起動のたびに乱数で作られるクロール結果です(/challenge にあります)。start と target の URL、各ページの url / links / fragment(Base64 の断片)が入っています。start から links をたどって target へ行く最短経路(一つに決まります)を求め、経路上のページ(start と target を含む)の fragment を経路の順に Base64 デコードして区切りなしでつないだ文字列を求めてください。その文字列を python3 challenge.py '<答え>' に渡すとフラグが表示されます。

プログラミングLevel 3★★★☆☆

プログラミング - ZIPパスワードの復元

secret.zip は起動のたびに作られる、ZipCrypto(従来の PKWARE 暗号)で暗号化された ZIP です(/challenge にあります。同じ場所に wordlist.txt もあります)。パスワードは wordlist.txt のどれか1語の後ろに、2桁の数字(00〜99)を付けたものです。パスワードを見つけて中の note.txt を取り出すと、フラグが書かれています。Python の zipfile は pwd= にパスワードを渡すと ZipCrypto の ZIP を読めます。

プログラミングLevel 3★★★☆☆

プログラミング - パケットログの解析

capture.txt は起動のたびに作られるパケットログです(/challenge にあります)。1行が1つのフローで、flow=<名前> payload_hex=<16進> の形をしています。payload_hex を 0x5A で XOR 復号し、flow=exfil の行を復元するとフラグが現れます。フラグは平文では置かれていません。

プログラミングLevel 3★★★☆☆

プログラミング - マルチスレッド結果の再構築

起動のたびに乱数で作られた並列ジョブの結果ログ worker-results.jsonl を解析します。各 slot は何度も試行されていて、途中で時間切れ(timeout)になったり後の試行に置き換えられたり(superseded)した結果も残っています。最終結果は、slot ごとに status が done のレコードのうち attempt が最大の1件だけです。その result を Base64 デコードし、レコードの worker 番号 N に対する SHA-1(worker-N の文字列) のダイジェストを先頭から繰り返し XOR して復号します。最終結果を slot の昇順につないだ40文字(小文字英数字)が答えです。答えを `python3 challenge.py '<答え>'` に渡すと、正解のときだけフラグが表示されます。

プログラミングLevel 3★★★☆☆

プログラミング - メモリダンプの解析

起動のたびに乱数で作られた合成メモリイメージ memory.img を解析します。先頭のヒープ管理表(先頭8バイト HEAPTBL + NUL・count(uint16)・エントリ(addr: uint32、size: uint16、flags: uint8、すべてリトルエンディアン))で live(flags=1)になっているアドレスの領域だけが現在の値で、解放済みの領域や管理表に載っていない残骸は古いデータです。各領域は `ALLOC:0x<4桁の小文字16進アドレス>:` + 長さ(uint16、リトルエンディアン)+ データで、データは MD5("heap-0x<4桁の小文字16進アドレス>") のダイジェストを繰り返し XOR すると `p<番号>=<4文字>` の断片に復号できます。live の断片を番号の昇順に4文字ずつつないだ40文字(小文字英数字)が答えです。答えを `python3 challenge.py '<答え>'` に渡すと、正解のときだけフラグが表示されます。

プログラミングLevel 3★★★☆☆

プログラミング - 既知平文攻撃

起動のたびに乱数で作られた証拠ファイル ciphertext.b64 と known.txt を解析します。ciphertext.b64 は観測所の報告書を、英小文字だけの短い鍵(長さは不明)で繰り返し XOR して Base64 にしたもので、known.txt は報告書の冒頭部分の平文です。報告書を復号すると `RESULT: unlock-code=...` という行があり、その unlock-code の値(16文字)が答えです。取り消された古いコードも書かれているので取り違えないでください。答えを `python3 challenge.py '<答え>'` に渡すと、正解のときだけフラグが表示されます。

プログラミングLevel 3★★★☆☆

プログラミング - 独自プロトコルの解析

protocol.bin は起動のたびに作られるバイナリのキャプチャです(/challenge にあります)。KINO で始まる長さつきのフレームがいくつか並んでいます。フレームを先頭から順にたどり、type=3 のフレームの payload を 0x23 で XOR 復号するとフラグが現れます。フラグは平文では置かれていません。

プログラミングLevel 3★★★☆☆

プログラミング - 画像ステガノグラフィ

image.pgm は起動のたびに作られるテキスト形式(P2)の PGM 画像です(/challenge にあります)。画素値の最下位ビット(LSB)を先頭から集め、8ビットずつ1バイトにまとめて読むと、NUL(0 のバイト)の手前までがフラグです。フラグは平文では置かれていません。

フォレンジックLevel 3★★★☆☆

メモリから不審なネットワーク接続を見つけよ

侵害されたホスト `kinoco-app03` のメモリイメージから、ソケット一覧 `/challenge/netstat_dump.txt` と、ESTABLISHED のソケットを持つプロセスごとのヒープ領域 `/challenge/heap_carve/pid_<PID>.bin` を復元しました。 カーネルスレッドに偽装した不審なプロセス(インプラント)が外部の C2 サーバーと通信していて、ビーコン設定(フラグを含む)をヒープに、平文ではない形で隠し持っています。ソケット一覧からそのプロセスを特定し、ヒープから設定を取り出してください。ほかのヒープには、フラグに似たおとりの文字列が混ざっています。 使えるツール: python3, grep, strings, xxd, awk

フォレンジックLevel 3★★★☆☆

メモリから実行コマンドを復元せよ

メモリ文字列の記録 `memdump.txt` を解析し、実行されたコマンド履歴を復元してください。Base64 文字列をデコードし、bash へ渡している不審なコマンドの引数からフラグを取得します。

フォレンジックLevel 3★★★☆☆

削除された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

フォレンジックLevel 3★★★☆☆

多重に圧縮されたファイルを解凍せよ

`/challenge/artifact.xz` は、攻撃者が持ち出そうとしていたファイルで、gzip・bzip2・xz・zip・tar が何重にも重ねてあります。形式を1層ずつ見極めながら剥がし、最も深いところにある `flag.txt` からフラグを取り出してください。 途中のアーカイブには、README・ノイズ・偽の `flag.txt` などのおとりが一緒に入っている階層があります。ファイルの拡張子はあてになりません。 使えるツール: file, gzip, bzip2, xz, zip/unzip, tar, python3

フォレンジックLevel 3★★★☆☆

暗号化されたディスクを復号せよ

`/challenge/secret_disk.img` は本物の LUKS2 コンテナで、データ領域にはバックアップ(tar アーカイブ)が入っています。パスフレーズは弱いもので、`/challenge/wordlist.txt` のどれかです。 このターミナルでは device-mapper が使えず、`cryptsetup open` でボリュームを開けません。キースロットから取り出したボリュームキーで、データ領域を自分で復号し、中のファイルからフラグを見つけてください。 使えるツール: cryptsetup, openssl, python3, dd, tar

基礎スキルLevel 3★★★☆☆

正規表現エキスパート - データバリデーション

/challenge/data.txt には受付記録が400行あり、各行にメールアドレス・電話番号・IPアドレス・日付が行ごとに違う順番・ラベルで並び、最後に memo="..." があります。書式が壊れた項目や、項目が無い行もあります。 次の条件をすべて正しい書式で1行に含む行はただ1行で、その行の memo がフラグです。 1. メールアドレス(xxx@yyy.zzz) 2. 電話番号(xxx-xxxx-xxxx または xxx.xxxx.xxxx。数字の桁数はこのとおり) 3. IPアドレス(xxx.xxx.xxx.xxx。数字1〜3桁を4つ) 4. 日付(YYYY-MM-DD) memo に KINOCO{...} の形の値を持つ行はほかにもありますが、どれも1つの条件が欠けています。正規表現を組み合わせて絞り込んでください。

フォレンジックLevel 3★★★☆☆

音声ファイルに隠されたデータ

`hidden.wav` にはオンオフ変調(OOK)で符号化されたメッセージが隠されています。トーンのオン/オフをビット化してデコードし、フラグを取得してください。 参照用のデコーダは付いていません。標準ライブラリの `wave` モジュールなどで、自分で信号を読み解きます。 提供ファイル: hidden.wav

基礎スキルLevel 3★★★☆☆

高度な自動化 - ディレクトリ監視スクリプト

`/challenge/logs/` に Web フロントエンド4台分のアクセスログ(combined log format、60ファイル・10万行超)があります。WAF は多数の送信元IPについて、それぞれ1行だけ `waf_rule=... note=...` を書き残しており、どの note もフラグの形をしています。フラグは、ステータスコード 404 のリクエスト数が最も多い送信元IPの行にある note です。404 が少し少ない別のスキャナー、総リクエスト数が最多のIP(ほとんど 200)、403 が最多のIP、通常の客のIPにも note があり、これらはおとりです。404 を IP ごとに集計して特定してください。