チャレンジ一覧
Linux-02. sudoで許可されたvimからの権限昇格
一般ユーザーがsudoでパスワードなしに実行できるコマンドを確認してみましょう。GTFOBinsで知られるテクニックを使うと、そのコマンドからシェルへ抜け出せる場合があります。
Linux-03. cron設定ファイルを読み解け
このシステムには複数のcron設定(/etc/cron.d、/etc/crontab、ユーザーcrontabなど)が存在します。それぞれの設定ファイルを確認し、フラグが書き込まれた場所を見つけてください。
Linux-Cron権限昇格. 書き込み可能なrootスクリプトを乗っ取れ
rootが定期実行するcronスクリプトのパーミッションを確認してみましょう。一般ユーザーでも書き込めてしまう場合、次の実行タイミングでどんなコードが動くか考えてみてください。
Linux-systemd. サービスユニットの環境変数を確認せよ
systemdのユニットファイルには [Service] セクションで環境変数を設定できます。登録されているサービス定義を調べ、そこに設定された値を確認してください。
Linux-シンボリックリンク迷路. 分岐する道を辿り抜け
複数のディレクトリがシンボリックリンクで複雑に繋がっています。おとりのヒントファイルに惑わされず、リンクを1つずつ辿って本物のフラグファイルまでたどり着いてください。
Linux-スクリプトデバッグ. 壊れたbashスクリプトを直せ
このスクリプトには複数の意図的なバグ(タイポ、構文ミスなど)が仕込まれており、最後まで実行されません。bashのデバッグ機能を使ってバグを1つずつ直してください。
Linux-ネットワーク基礎. リッスン中のポートに接続せよ
このシステムではバックグラウンドで特定のポートをリッスンするサービスが起動しています。ss/netstatでポートを特定し、ncで接続してフラグを受け取ってください。
Linux-バックアップ探索. 紛れ込んだ一時ファイルを見抜け
プロジェクトディレクトリには .bak や .tmp、~ で終わる紛らわしいバックアップ/一時ファイルが複数あります。本物のフラグは隠しファイルの中に隠れています。
Linux-パイプライン. grepとawkの連携でログを絞り込め
アクセスログには大量のアクセス記録が含まれています。あるIPアドレスが短時間に多数の404を出しており、その一連のリクエストのパスをつなげるとフラグになります。grep・awk・sort・uniq などをパイプで組み合わせて組み立ててください。
Linux-パッケージ情報. インストール済みパッケージの詳細を調べよ
このシステムには自作のdebパッケージがインストールされています。dpkgやaptを使ってパッケージの詳細情報を確認し、その説明文に隠された情報を見つけてください。
Linux-プロセス追跡. 動き続けるプロセスの正体を暴け
複数のバックグラウンドプロセスが動いている中に、コマンドライン引数にフラグを持つものが1つ紛れています。psコマンドで一覧を確認し、それを見つけ出してください。
Linux-ユーザー調査. awkで対象ユーザーを絞り込め
このシステムには複数のユーザーが登録されています。/etc/passwdをawkで解析して特定の条件に合うユーザーを見つけ、そのホームディレクトリの隠しファイルを確認してください。
Linux-ログローテーション. 圧縮された過去ログを検索せよ
ログローテーションによって一部の古いログファイルはgzip圧縮されています。展開せずに圧縮ファイルの中身を検索するコマンドを使ってフラグを探してください。
Linux-ログ探索. 複数ログファイルからフラグを掘り出せ
アプリケーションログとシステムログの複数ファイルが用意されています。DEBUGレベルの1行だけにフラグが埋め込まれているので、grepなどで絞り込んで見つけてください。
Linux-環境変数の秘密. FLAGという名の変数を探せ
このシステムには複数の環境変数(ダミーの認証情報を含む)が設定されています。envコマンドで一覧を確認し、フラグを保持している変数を見つけてください。
OSINT基礎 - メタデータ解析
退職した社員の共有ドライブから回収したファイル群(写真 `IMG_*.jpg` と Office 文書)が `/challenge/evidence/` にあります。何人かの社員が個人用エクスポートツール `PhotoVault-ExportTool` を使っており、このツールで書き出した写真の Exif `Software` タグには `build-tag=KINOCO{...}` が残っています。フラグは、このツールで書き出され、かつ Exif の撮影者(`Artist`)が退職者本人である、ただ1枚の写真のビルドタグです。退職者は、引き継ぎ資料 `Handover_Notes.docx` を最後に保存した人物(docProps の `cp:lastModifiedBy`)です。`exiftool` はありませんが、`unzip` と同梱の `/challenge/exif_dump.py` で読めます。
RC4ストリーム暗号の脆弱性
RC4は過去に広く使われましたが、現在は非推奨です。この入門問題では渡されたデータ形式を見抜きます。 Base64文字列: S0lOT0NPe3JjNF9pc19kZXByZWNhdGVkfQ== これは実際にはRC4暗号文ではありません。Base64デコードしてフラグを取得してください。
Vigenère暗号の解読
Vigenere暗号は複数のシーザー暗号を組み合わせた古典暗号です。鍵長が分かっている暗号文を復号し、フラグを取得してください。 暗号文: KMNRCS{vlginhri_clpleu_axtdco} 鍵の長さは4文字です。暗号文を解読してフラグを提出してください。
テキスト処理の達人 - sed & awk
/app/data.csv にはCSVデータが保存されています。 以下の処理を行ってください: 1. 2列目(価格)が1000以上の行のみを抽出 2. 3列目(商品名)に含まれる "_" をスペースに置換 3. 1列目(ID)の先頭に "PROD-" を追加 処理後のデータの最初の行に含まれる商品名がフラグです。 フォーマット: ID,価格,商品名
ハッシュ衝突の発見
MD5では異なる入力が同じハッシュ値になる衝突が実用的に作れます。衝突耐性が破られたハッシュを安全用途に使ってはいけません。 同一MD5を持つとされる2つのファイル: file_a != file_b md5(file_a) = d131dd02c5e6eec4693d9a0698aff95c md5(file_b) = d131dd02c5e6eec4693d9a0698aff95c MD5衝突を発見したことを表す語句として、md5、collision、found の3語を小文字のままアンダースコアでつなぎ、KINOCO{...} の形式で提出してください。
ハッシュ長拡張攻撃
MD5、SHA-1、SHA-256などの構造では、secret || message の単純ハッシュを署名にすると長さ拡張攻撃を受ける場合があります。 既知のメッセージとSHA-256: message = "user=guest" sha256(secret || message) = 84d89877f0d4041efb6bf91a16f0248f2fd573e6af05c19f96bedb9f882f7882 append = "&admin=true" この問題では攻撃手順の理解を確認します。攻撃名を表す3つの英単語 hash、extension、attack を小文字のままアンダースコアでつなぎ、KINOCO{...} の形式で提出してください。
パディングオラクル入門
パディングオラクル攻撃では、エラーの違いが平文復元の手がかりになります。この入門問題では、漏えいしたBase64文字列からフラグを読み取ります。 漏えいしたBase64文字列: Vmlld1NvdXJjZTpLSU5PQ097cGFkZGluZ19vcmFjbGVfYmFzaWNzfQ== この文字列をBase64デコードし、ViewSource: の後ろにある文字列をフラグとして提出してください。
プロセスハンター - 隠されたプロセス
バックグラウンドで "secret_service" という名前のプロセスが動作しています。 このプロセスを見つけて以下の情報を取得してください: 1. プロセスID (PID) 2. 実行ユーザー 3. コマンドライン引数 コマンドライン引数にフラグが含まれています。 ヒント: ps, pgrep, top などのコマンドを使用
レインボーテーブル攻撃
ソルトなしの高速ハッシュは、事前計算された逆引きDBで簡単に破られる場合があります。与えられたMD5ハッシュを逆引きしてください。 MD5ハッシュ: 5f4dcc3b5aa765d61d8327deb882cf99 このハッシュを逆引きし、元の文字列を KINOCO{...} の形式で提出してください。